前两篇分析app的抓包和逆向工程:破解启信宝app的token算法-抓包分析(一)启信宝破解的token算法xinbaoapp——逆向(2)破解xinbaoapp的token算法——token分析(3)本文将hooktoken的秘钥,使用的是上一篇提到的frida。hook,hooknative方法,获取秘钥和偏移量。弗里达呢?Frida是一个动态代码插入框架。这里的介绍主要适用于Android平台应用。DynamicBinaryInstrumentation(DBI)是将外部代码注入到现有的正在运行的二进制文件中,使其执行额外的操作。DBI可以:访问进程内存在应用程序运行时覆盖函数从导入的类中调用函数在堆上查找对象实例并使用Hook、跟踪和拦截功能等。如何使用呢?pipinstallfrida(python环境)下载服务器二进制文件frida-server与pip同版本$adbpushfrida-server-10.0.1-android-arm/data/local/tmp/frida-server$adbshellcd/data/local/tmpchmod755frida-server./frida-server查看frida-server是否启动成功:frida-ps-U可以看到Android应用进程,启动成功后开始写python和具体的hook代码.python代码:importsysimportfridadefonmsg(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()现在可以挂钩应用程序的特定方法\需要挂钩是MessageUtil类下的具体方法(此代码为参考代码,并非app实际应用代码)setImmediate(function(){//延迟1秒调用Hook方法console.log('start----')setInterval(test,1000);//test()});functiontest(){Java.perform(function(){varhook=Java.use('com.classname');hook.method.overload('参数类型','java.lang.String','java.lang.String').implementation=function(a1,a2,a3){varss=this.method(a1,a2,a3);//call就是这个方法console.log('a1parameter1='+a1);//printconsole.log('a2parameter2='+a2);console.log('a3parameter3='+a3);console.log('res='+ss);返回s;};执行python代码,直接打印出需要的秘钥和偏移量。拿到秘钥后,我们需要验证秘钥,使用第一篇文章中的token解密即可。在实践中,加密需要进行字节数组转换,以及更具体的转换方式。有需要的可以关注小白科技公众号一起讨论技术。
