免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
工具下载:
链接:百度网盘 请输入提取码
提取码:zy89
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)
首先运行FridaServer
hook静态方法和实例方法
静态方法是指属于类而不是类的实例的方法,使用static关键字来声明一个静态方法
然后有
public static int getXXX(int i1, int i2){
return md5(i1+i2);
}
这样一个代码,我需要知道那些东西?我们需要知道入参、返回值、加密方式是否为标准算法(百度上可以找在线加密,这些都是标准算法,相同的值加密出的结果不一样就说明app里的加密是非标准算法)
使用Frida就是为了得到入参是什么、返回值是什么、加密方式是否为标准算法
现在有下图红框的代码,一个静态方法
调用位置是在下图红框位置,它的参数是2000和2000
效果图:
接下来使用FridaHook这个 getCalc 方法获取它的入参
Java.perform(function () {
var Utils = Java.use('com.luoge.com.Utils');
Utils.getCalc.implementation = function (a, b) {
// 获取入参
console.log("入参1:"+a+" 入参2:"+b);
// 调用原本的 getCalc 方法
var res = this.getCalc(a,b);
// 获取返回值
console.log("返回值:"+res);
return res;
}
})
效果图:可以看到得到了入参和返回值
如下图把返回值修改成 9999999 ,可以看到app中也受到了影响
HOOK实例方法,下图红框是一个java的实例方法(对象方法)
代码和效果图:
Java.perform(function () {
var Utils = Java.use('com.luoge.com.Utils');
Utils.getFlag.implementation = function () {
// 调用原本的 getCalc 方法
var res = this.getFlag();
// 获取返回值
console.log("返回值:"+res);
return res;
}
})
改值,getFlag方法的值是通过下图红框的setFlag设置的
通过点击按钮调用的setFlag方法
代码:
Java.perform(function () {
var Utils = Java.use('com.luoge.com.Utils');
Utils.getFlag.implementation = function () {
// 调用原本的 getCalc 方法
var res = this.getFlag();
// 获取返回值
console.log("返回值:"+res);
return res;
}
Utils.setFlag.implementation = function(arg){
console.log("setFlag入参:${arg}");
return this.setFlag(" 被修改了 ");
}
})
效果图: