1.使用材料:
(Windous)pc
Python3环境
雷电模拟器
frida16.0.9(hook框架)
vscode
Charles(抓包)
APP(驾培训创业教练)未加固
jadx4.1
2.逆向目标:hook接口:逆向登录参数sigin加密
3.详细逆向过程:
3.1抓包
设置ssl代理,在雷电模拟器WIFI设置代理,下载证书并安装证书,重启雷电模拟器
打开 驾培训创业教练 APP的登录页面
打开抓包工具
输入手机号抓包,抓包结果如下:
vscode note记录抓包结果,养成好习惯!
3.2反编译app搜索逆向关键词
APP未加壳,如果加壳需要先破壳,安卓逆向中最重要的就是:代码分析+脱壳
打开jadx 导入APP后开始反编译 搜索关键词:getSmscode 双击转到代码区
代码审计:
这段代码就是构造请求体,包括了 类型 手机 时间 签名 。其中签名是用了stringMD5toUpperCase函数来生成,
其中stringMD5toUpperCase函数又使用了yyyyMMddHHmmss + i + str + str2这几个参数生成,我们不知道str是什么,所有可以使用frida进行hook!!!!!!
3.3编写hook代码
目录如下:
- jiapeixunHook.py
- getHook.js
- setHook.js
我们直接使用模板frida
python模板
import frida # 导入frida模块 import sys # 导入sys模块 def on_message(message, data): # js中执行send函数后要回调的函数 print(message) ''' spawn模式,Frida会自行启动并注入进目标App,Hook的时机非常早 ''' # device=frida.get_remote_device() # pid=device.spawn(['com.jx885.reward']) #包名 # device.resume(pid) # time.sleep(1) # session = device.attach(pid) ''' attach模式,Frida会附加到当前的目标进程中,即需要App处于启动状态,这也意味着只能从当前时机往后Hook, ''' session = frida.get_remote_device().attach('驾培创业教练') #APPNAME这里是填APP名字 with open("./getHook.js") as f: script = session.create_script(f.read()) script.on('message', on_message) # 加载回调函数,也就是js中执行send函数规定要执行的python函数 script.load() # 加载脚本 sys.stdin.read()
模板介绍:frida两种模式,我们这里使第二种。他们的区别:
-spawn模式,Frida会自行启动并注入进目标App,Hook的时机非常早 自动重启 设置包名
-attach模式,Frida会附加到当前的目标进程中,即需要App处于启动状态,这也意味着只能从当前时机往后Hook 手动启动 设置APP名
js模板:
Java.perform(function (){ //固定 // ('包名.类名').方法名.getSmscode.implementation=function(){} hook函数格式 Java.use('com.jx885.library.http.CommAction').getSmscode.implementation=function (mi,mstr,mstr2){ console.log(mi,mstr,mstr2); return this.getSmscode(mi,mstr,mstr2); //注意hook完一定要返回函数,否则可能会报错 } });
结合反编译Java代码编写:
补充:java方法的重载
什么是重载?
几个相同的函数,参数不相同(随口一说)
该怎么hook呢?
Java.use('包名.类名').方法.overload('java.lang.String')
例如:
Java.use('com.jx885.library.http.CommAction').getSmscode..overload('int')implementation=function(mi){}
完整代码:
- jiapeixunHook.py
import frida import sys def on_message(message, data): print(message) session = frida.get_remote_device().attach('驾培创业教练') with open("./frida.js") as f: script = session.create_script(f.read()) script.on('message', on_message) script.load() sys.stdin.read()
- getHook.js
Java.perform(function (){ Java.use('com.jx885.library.http.CommAction').getSmscode.implementation=function (mi,mstr,mstr2){ console.log(mi,mstr,mstr2); return this.getSmscode(mi,mstr,mstr2); } });
3.4 连接frida服务器,对app进行hook
终端命令:
adb shell su cd /data/local/tmp ./frida.....
端口转发
adb forward tcp:27042 tcp:27042
运行
- jiapeixunHook.py
结果如下:
PS E:\逆向工具工程\frida-dexdump\Learn> & D:/python3/python.exe e:/逆向工具工程/frida-dexdump/Learn/mode.py 1 wocaonima 15187488268
补充:grpc直接调用
#jiapeixunHook.py.py import frida # 导入frida模块 import sys # 导入sys模块 def on_message(message, data): # js中执行send函数后要回调的函数 print(message) ''' spawn模式,Frida会自行启动并注入进目标App,Hook的时机非常早 ''' # device=frida.get_remote_device() # pid=device.spawn(['com.jx885.reward']) #包名 # device.resume(pid) # time.sleep(1) # session = device.attach(pid) ''' attach模式,Frida会附加到当前的目标进程中,即需要App处于启动状态,这也意味着只能从当前时机往后Hook, ''' session = frida.get_remote_device().attach('驾培创业教练') #APPNAME with open("./frida.js") as f: script = session.create_script(f.read()) script.on('message', on_message) # 加载回调函数,也就是js中执行send函数规定要执行的python函数 script.load() # 加载脚本 currTime='20220619043925' phone='13966552233' type='1' sign=script.exports.getsign(f'{currTime}{type}wocaonima{phone}') print(sign) #sys.stdin.read()
#getHook.js.js // Java.perform(function (){ // Java.use('com.jx885.library.http.CommAction').getSmscode.implementation=function (mi,mstr,mstr2){ // console.log(mi,mstr,mstr2); // return this.getSmscode(mi,mstr,mstr2); // } // }); function sign(s){ var result=''; Java.perform(function (){ result=Java.use('com.jx885.library.http.network.HttpUtils').getStringMD5toUpperCase(s); }) return result } rpc.exports={ getsign:sign }
2、本站永久网址:https://www.xheishou.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
暂无评论内容