
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、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

















暂无评论内容