zoukankan      html  css  js  c++  java
  • app逆向万能的md5加密hook破解入参方法(其他加密用通用方法原理差不多,小白推荐)

    一.原理

    安卓开发调用md5加密时候都会调用到系统类java.security.MessageDigest
    
    加密时候会会调用里面2个关键方法update以及digest
    
    根据这个原理我们开始写代码吧

    二.代码

    hook.js

    function Uint8ArrayToString(fileData){    //Uint8Array转字符串
      var dataString = "";
      for (var i = 0; i < fileData.length; i++) {
        dataString += String.fromCharCode(fileData[i]);
         // console.log(dataString)
      }
      return dataString
    }
    function byteToHexString(uint8arr) {  //byte数组转16进制字符串
        if (!uint8arr) {
            return '';
        }
        var hexStr = '';
        for (var i = 0; i < uint8arr.length; i++) {
            var hex = (uint8arr[i] & 0xff).toString(16);
            hex = (hex.length === 1) ? '0' + hex : hex;
            hexStr += hex;
        }
    
        return hexStr.toUpperCase();
    }
    Java.perform(function () {
        var BB = Java.use("java.security.MessageDigest");
        BB.update.overload('[B').implementation = function (args1, args2, args3, args4, args5, args6) {
            console.log(Uint8ArrayToString(args1))
            var args = this.update(args1)
            console.log("update", args)
            return args
        }
         BB.digest.overload().implementation = function (args1, args2, args3, args4, args5, args6) {
            var args = this.digest()
            console.log(byteToHexString(args))
            return args
        }
    });

    可以直接cmd窗口调用(老手推荐)

    frida -U 包名 -l js
    #修改js他会热更新

    可以用python调用(新手推荐)

    import logging
    import frida
    import sys
    
    def on_message(message, data):
        if message['type'] == 'send':
            print("[*] {0}".format(message['payload']))
        else:
            print(message)
    
    
    with open('hook.js', 'r', encoding='utf-8') as f:  # js文件
        sta = ''.join(f.readlines())
    
    rdev = frida.get_remote_device()
    
    session = rdev.attach("xxxxxx")  #app包名
    print(session)
    script = session.create_script(sta)
    print(script)
    def show(message,data):
        print(message)
    script.on("message",show)
    
    # 加载脚本
    script.load()
    sys.stdin.read()

     或者都写在一起:

    js_code = """
    function Uint8ArrayToString(fileData){    //Uint8Array转字符串
      var dataString = "";
      for (var i = 0; i < fileData.length; i++) {
        dataString += String.fromCharCode(fileData[i]);
         // console.log(dataString)
      }
      return dataString
    }
    function byteToHexString(uint8arr) {  //byte数组转16进制字符串
        if (!uint8arr) {
            return '';
        }
        var hexStr = '';
        for (var i = 0; i < uint8arr.length; i++) {
            var hex = (uint8arr[i] & 0xff).toString(16);
            hex = (hex.length === 1) ? '0' + hex : hex;
            hexStr += hex;
        }
    
        return hexStr.toUpperCase();
    }
    Java.perform(function () {
        var BB = Java.use("java.security.MessageDigest");
        BB.update.overload('[B').implementation = function (args1, args2, args3, args4, args5, args6) {
            console.log(Uint8ArrayToString(args1))
            var args = this.update(args1)
            console.log("update", args)
            return args
        }
         BB.digest.overload().implementation = function (args1, args2, args3, args4, args5, args6) {
            var args = this.digest()
            console.log(byteToHexString(args))
            return args
        }
    });
    
    """
    
    import logging
    import frida
    import sys
    
    
    def on_message(message, data):
        if message['type'] == 'send':
            print("[*] {0}".format(message['payload']))
        else:
            print(message)
    
    
    rdev = frida.get_remote_device()
    
    session = rdev.attach("com.xiachufang")  # app包名
    # session = rdev.attach("com.md.md211106")  # app包名
    print(session)
    script = session.create_script(js_code)
    print(script)
    
    
    def show(message, data):
        print(message)
    
    
    script.on("message", show)
    
    # 加载脚本
    script.load()
    sys.stdin.read()
  • 相关阅读:
    tcp/心跳包
    TCP协议中的三次握手和四次挥手(图解)
    http 中get和post
    xmpp总结
    IOS中http请求使用cookie
    sdwebimage总结
    iOS断言
    Object-C自定义对象NSLog输入信息
    NSTimer你真的会用了吗
    ios中block中的探究
  • 原文地址:https://www.cnblogs.com/tjp40922/p/15328241.html
Copyright © 2011-2022 走看看