上篇通过hook确定了登录代码的位置,参考雷电模拟器上使用第一个frida(四)第一个HOOK之抓包-CSDN博客
接下来逆向分析一下,并用python实现其功能,并模拟登陆。
通过抓包分析,其实只要找到riskSecret如何生成的就行了。
在jadx逆向代码中,很明显
hashMap.put("riskSecret", MD5Utils.getMD5(packageName + str2 + currentTimeMillis + str + userToken2));
为了有一个直观认识,我们先HOOK一下getMD5这个函数,看看它的参数是什么内容?
在函数名上右键,“跳到声明”,发现有好多个getMD5,是重载函数。
参考雷电模拟器上使用第一个frida(三)简单的使用实例_小小爬虾的博客-CSDN博客
启动pc端和手机端的frida。
重载函数的frida的hook写法:
import frida
import sys
#重载函数
#运行代码前,一定要先在手机模拟器上启动该app
rdev = frida.get_remote_device()
session = rdev.attach("com.beauty.drama")#包名
scr = """
Java.perform(function () {
var act = Java.use("com.television.amj.utils.MD5Utils");
console.log(act.getMD5);
act.getMD5.overload('java.lang.String').implementation = function (a) {
console.log(a);
var result = this.func.overload('java.lang.String').call(this,a)
console.log(result);
return result;
}
});
"""
script = session.create_script(scr)
script.load()
sys.stdin.read()
拆分一下:
com.beauty.drama包名
1a16d06bc57b69a1uuid(经过多次测试,本机是固定值)
1697369091599时间戳
将这三个字符串拼接起来做md5加密,就得到了riskSecret的值。
顺便写一下hook普通函数(带参数、带返回值)
import frida
import sys
#运行代码前,一定要先在手机模拟器上启动该app
rdev = frida.get_remote_device()
session = rdev.attach("com.beauty.drama")#包名
scr = """
Java.perform(function () {
//包.类
var UserModel = Java.use("com.television.amj.application.UserModel");
UserModel.getAndroidId.implementation = function(a){
console.log(a);
var res = this.getAndroidId(a);
console.log(res);
return res;
}
});
"""
script = session.create_script(scr)
script.load()
sys.stdin.read()
对应关系:
此篇备注两个好用的文章:
(1)adb devices出现emulator-5554 offline的解决方案
参考adb devices出现emulator-5554 offline的解决方案_长进长进的博客-CSDN博客
(2) Frida Hook方法大全(普通、重载、构造)