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()
  • 相关阅读:
    正整数分解质因数
    水仙花数
    键入任意整数,将之从小到大输出
    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少
    输入某年某月某日,判断这一天是这一年的第几天?
    java 日期增加
    oracle数据库 ORA-01461: can bind a LONG value only for insert into a LONG column解决方案
    JAVA实现图片叠加效果
    JAVA_GET请求URL
    sqlserver-触发器-判断更新了哪个字段。
  • 原文地址:https://www.cnblogs.com/tjp40922/p/15328241.html
Copyright © 2011-2022 走看看