本帖最后由 泄密无花 于 2023-5-15 15:45 编辑
0x00 前言
Hook脚本编写练习帖子
其实求助了无数遍ChatGTP菜也是真的菜,又菜又爱玩
0x01 准备工作
警告声明:下载此App仅供学习逆向使用,不要相信任何App网站包括App内部的任何广告!出现任何损失与帖子作者无关!
下载地址:http://dh99.co/
0x02 逆向分析
参考帖子:https://www.52hb.com/thread-58121-1-1.html
跟参考帖子是同一个框架,估计视频的API都一样,不过这不影响学习
0x03 脚本编写
1、确定目标类
[Java] 纯文本查看 复制代码
// VIP类
com.ys.resemble.entity.MineUserInfo
// 邀请类
com.ys.resemble.entity.ExtensionShareEntry
// 广告类
com.ys.resemble.entity.AdInfoDetailEntry
2、确定需要Hook的方法
[Java] 纯文本查看 复制代码
// VIP方法
getInvited_count
getIs_vip
getVip_validity
// 邀请方法
getInvited_count
// 广告方法
getAd_id
getAd_source_id
3、完整的脚本
[Java] 纯文本查看 复制代码 // 使用 Java.perform() 函数来执行主函数
Java.perform(function() {
// 定义目标类及其需要 Hook 的方法及其对应的返回值
const targets = [
{
clazz: "com.ys.resemble.entity.MineUserInfo",
hooks: {
"getInvited_count": 999,
"getIs_vip": 1,
"getVip_validity": 4070880000,
},
},
{
clazz: "com.ys.resemble.entity.ExtensionShareEntry",
hooks: {
"getInvited_count": 999,
},
},
{
clazz: "com.ys.resemble.entity.AdInfoDetailEntry",
hooks: {
"getAd_id": 0,
"getAd_source_id": 0,
},
},
];
// 对每个目标类的方法进行 Hook
targets.forEach(target => {
const clazz = Java.use(target.clazz);
const hooks = target.hooks;
hookMethods(clazz, hooks);
});
// 定义 hookMethods() 函数
function hookMethods(clazz, hooks) {
// 遍历需要 Hook 的方法
for (const methodName in hooks) {
// 获取方法的引用
const newValue = hooks[methodName];
const method = clazz[methodName];
// 判断方法是否存在
if (method) {
// 替换方法的实现
method.implementation = function() {
// 输出 Hook 成功的日志
console.log(`${methodName} hooked`);
const oldValue = this[methodName]();
// 输出原始返回值
console.log(`${methodName} OldValue: ${oldValue}`);
const result = newValue;
// 输出替换后的返回值
console.log(`${methodName} NewValue: ${result}`);
return result;
};
} else {
// 输出错误日志
console.log(`Method ${methodName} not found in ${clazz}`);
}
}
}
});
4、Hook结果
0x04 总结
优化了代码:将目标类及其需要 Hook 的方法及其对应的返回值封装成了一个数组,然后使用 forEach() 方法对每个目标类进行 Hook
|