启xin宝app的token算法破解——frida篇(四)

1,904 阅读2分钟

前两篇文章分析该APP的抓包、的逆向:
启xin宝app的token算法破解——抓包分析篇(一)
启xin宝app的token算法破解——逆向篇(二)
启xin宝app的token算法破解——token分析篇(三)
本篇就将对token的秘钥进行hook,使用上篇提到的frida进行hook,hooknative方法,获取到秘钥和偏移。 对于frida是什么?

Frida是一个动态代码插桩框架,这里的介绍主要以应用在Android平台应用程序上。动态二进制插桩(DBI)是将外部代码注入到现有的正在运行的二进制文件中,从而让它执行额外操作。DBI可以:

  1. 访问进程内存
  2. 在应用程序运行时覆盖函数
  3. 从导入的类调用函数
  4. 在堆上查找对象实例并使用
  5. Hook、跟踪和拦截函数等

怎么使用呢?

  1. pip install frida (python环境)
  2. 下载服务器二进制文件frida-server要和pip的版本相同
  3. $ adb push frida-server-10.0.1-android-arm /data/local/tmp/frida-server
  4. $ adb shell
  5. cd /data/local/tmp
  6. chmod 755 frida-server
  7. ./frida-server

查看frida-server是否启动成功: frida-ps -U能看到安卓的应用进程就行

启动成功后开始写python和具体的hook代码。 python代码:

import sys
import frida
def onmsg(msg, data):
    print(msg)
jscode = open('qxb.js', 'r', encoding='utf8').read()
session = frida.get_usb_device().attach("com.bertadata.qxb")
script = session.create_script(jscode)
script.on('message', onmsg)
script.load()
sys.stdin.read()

现在可以对该app的具体方法hook
需要hook是MessageUtil类下的具体方(该代码为参考代码,并不是该app的实际应用代码)

setImmediate(function () {
//延迟1秒调用Hook方法
    console.log('start----')
    setInterval(test, 1000);
    // test()
});

function test() {
    Java.perform(function () {

        var hook = Java.use('com.类名');
        hook.方法.overload('传参类型', 'java.lang.String', 'java.lang.String').implementation = function (a1, a2, a3) {
            var ss = this.方法(a1, a2, a3);//调用是本方法
            console.log('a1参数1 =' + a1);//打印
            console.log('a2参数2 =' + a2);
            console.log('a3参数3 =' + a3);
            console.log('res=' + ss);
            return ss;
        };

执行python代码就可以直接打印出需要秘钥和偏移。

拿到秘钥之后我们就需要验证该秘钥了,使用第一篇的token进行解密就可以咯。在实际中需要对改密要进行byte数组转换,更具体的转换方法。需要的话可以关注小白技术公众号讨论技术。
欢迎关注小白微信公众号【小白技术社】,一起学习一起交流