frida动态调试入门01——定位关键代码
说明
frida是一款Python工具可以方便对内存进行hook修改代码逻辑在移动端安全和逆向过程中常用到。
实战
嘟嘟牛登录页面hook
使用到的工具
1,jadx-gui
2,frida
定位关键代码
使用jadx-gui 进行模糊搜索,例如搜索encyrpt之类的加密关键字
发现com.dodonew 下面有两个疑似加密的关键代码
右键复制类名
com.dodonew.online.http.JsonRequest
编写脚本
//如果是java hook的话代码都要放到java.perform包括起来
Java.perform(function(){
// 拿到这个类,打印一下确认是否拿到类了
var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest")
console.log("JsonRequest:",JsonRequest)
// 调用类中的方法,实现,也就是将原来的函数修改掉
JsonRequest.paraMap.implementation = function(a){
console.log("params1:", a);
this.paraMap(a);
}
// addRequestMap,可能的另外一个加密函数
// 参数类型或者是参数数量不同为一个重载函数
JsonRequest.addRequestMap.implementation = function(a,b){
console.log("params:", a, b);
this.addRequestMap (a, b);
}
});
启动手机的frida服务端
出现报错,报错显示有多个overload也就是有多个重载,修改hook代码指定那个重载。
修改代码
需要的是int的重载函数
修改后的代码
//如果是java hook的话代码都要放到java.perform包括起来
Java.perform(function(){
// 拿到这个类,打印一下确认是否拿到类了
var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest")
console.log("JsonRequest:",JsonRequest)
// 调用类中的方法,实现,也就是将原来的函数修改掉
JsonRequest.paraMap.implementation = function(a){
console.log("params1:", a);
this.paraMap(a);
}
// addRequestMap,可能的另外一个加密函数
// 参数类型或者是参数数量不同为一个重载函数
JsonRequest.addRequestMap.overload('java.util.Map', 'int').implementation = function(a,b){
console.log("params:", a, b);
console.log("addRequestMap");
this.addRequestMap (a, b);
}
// 确定了加密的关键函数
});
再次运行frida -UF -l hook的js文件
frida -UF -l .hook.js
说明代码逻辑通过的这个函数。
添加两个这个代码就可以打印输入的参数
var bb =Java.cast(a, Java.use("java.util.HashMap"));
console.log("addRequestMap params:", bb.toString());
参考文章
https://www.bilibili.com/video/BV1k3411d7RT