赞
踩
上篇通过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方法大全(普通、重载、构造)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。