准备一个要被破解的APP
这个游戏的功能是点击刷新 后生命值增加到8 魔法值增加到10
接下来用hook技术把这两个值改成9999
将安装包后缀.apk 改为.zip 解压
打开lib 文件夹
如果lib文件夹下或者在下层的子文件夹中有包含libunity.so则说明是unity制作的游戏
如果有libil2cpp.so 则说明是IL2CPP模式下构建的安装包
将这个libil2cpp.so 反编译看一下里面的函数
需要用到工具
打开il2cpp dumper.exe
第一个弹框选择文件lib2cpp.so
第二个弹框的文件选择assets/bin/Data/Managed/Metadata/global-metadata.dat
出现下图说明成功 失败有可能是有加密 需要手动模式 这里只说明成功的
此时会在IL2CPPDUMPER安装目录同级目录下出现DummyDll文件夹 下面有一个反编译出来的dll
打开dnSpy.exe
将刚才反编译出来的Assembly-CSharp.dll拖进去
找到按钮对应的函数 Refresh(int,int)
基址偏移是0x781D90
接下来用frida hook这个函数并修改
没用过得frida的看这个frida 下载安装与使用基础
在js代码中写下
// 程序入口
Java.perform(function()
{
// 获取模块
var module = Process.getModuleByName("libil2cpp.so")
// 转为函数地址
var addr=module.base.add("0x753B7B");
// 获取函数入口
var func = new NativePointer(addr.toString());
console.log('[+] hook '+func.toString())
// 函数hook钩子附加
Interceptor.attach(func, {
onEnter: function (args) {
console.log('hook success')
//输入参数
args[1] = ptr(999)
args[2] = ptr(888)
},
onLeave: function (retval) {
console.log('method onleave')
}
});
});
执行后成功显示