安卓逆向实例 - 免费追书【Frida 全功能VIP】
0x00 前言摸鱼一贴{:5_187:}
0x01 准备
免费追书:com.mianfeizs.book
下载地址:https://www.wandoujia.com/apps/7630647
0x02 逆向分析
定位方法:搜索isVip()
划重点(需要分析的方法都在这个类):com.chineseall.dbservice.entity.AccountData
1、isValidityVip
1)Java 代码
2)Hook 代码
2、isVip
1)Java 代码
2)Hook 代码
3、isCowCardVip
1)Java 代码
2)Hook 代码
4、getChargeVipDate
1)Java 代码
2)Hook 代码
5、代码原理
1)首先,使用Java.perform函数包装hook代码,确保在Java虚拟机中执行
Java.perform()
2)然后,使用Java.use函数获取目标类的引用,替换成实际的类路径
var clazz = Java.use("com.chineseall.dbservice.entity.AccountData");
3)接下来,使用implementation属性替换被hook函数的实现。在新的实现中,打印一条日志并将返回值result,按需求设置返回值
4)然后,打印出旧的返回值和新的返回值
6、Hook结果
0x03 代码优化
1、使用Java.perform函数包装hook代码,确保在Java虚拟机上下文中执行
2、使用Java.use函数获取目标类的引用,替换成实际的类路径
3、定义一个名为hooks的对象,用于存储要hook的方法和替换的返回值。对象的属性名表示要hook的方法名,属性值表示要替换的返回值
4、使用for循环遍历hooks对象,分别调用hookMethod函数进行hook
5、在hookMethod函数中,使用eval函数动态生成hook代码,并使用methodName和newValue参数替换相应的值
6、调用hookMethod函数,分别hook目标类中的方法,并将返回值替换为指定的值
Java.perform(function() {
var clazz = Java.use("com.chineseall.dbservice.entity.AccountData");
var hooks = {
"isValidityVip": true,
"isVip": true,
"isCowCardVip": true,
// "getTopShieldAd": 0,
// "getShieldAd": 0,
// "isShieldAd" : true,
"getChargeVipDate": 4102358400000 // 2099-12-31的时间戳
};
for (var methodName in hooks) {
hookMethod(methodName, hooks);
}
function hookMethod(methodName, newValue) {
var method = "clazz." + methodName + ".implementation = function() { \
console.log(\"" + methodName + " hooked\"); \
console.log(\"" + methodName + " OldValue: \" + result); \
var result = " + newValue + "; \
console.log(\"" + methodName + " NewValue: \" + result); \
return result; \
}";
eval(method);
}
});
0x04 总结
基本上优化后代码可以作为一个通用的基础模板了,还是需要多写代码啊{:5_184:}
页:
[1]