某APP打开后弹出强按钮
解决办法:
1.反编译APP,修改App版本号
2.拦截getVersion请求,修改版本号
3.patch APP,跳过更新
1.2就不讲了,这里主要分析下第3种方式。
首先发编译APP后发现lib里面有libapp.so和libflutter.so,可以猜测更新等函数在libapp.so实现。
打开ida,函数
都是经过混淆后的。
使用blutter 操作后得到:
查找update,version等函数(省略寻找过程)...
frida hook checkVersion直接返回:
'use strict';
const TARGET_LIB = "libapp.so";
const patchOffsets = [
0x838D40, // checkVersion addr
];
function waitForModule(name, callback) {//检测so加载成功才hook
const check = () => {
const lib = Process.findModuleByName(name);
if (lib) {
clearInterval(timer);
callback(lib);
}
};
const timer = setInterval(check, 100);
check();
}
function patchRetAtOffset(base, offset) {
const addr = base.add(offset);
Memory.protect(addr, 4, 'rwx');
addr.writeU32(0xD65F03C0); // RET
console.log(`PATCH RET @ ${addr} (offset 0x${offset.toString(16)})`);
}
function main() {
waitForModule(TARGET_LIB, (lib) => {
const base = lib.base;
console.log(` ${TARGET_LIB} base: ${base}`);
patchOffsets.forEach(offset => {
try {
patchRetAtOffset(base, offset);
} catch (e) {
console.error(`Patch failed at offset 0x${offset.toString(16)}:`, e);
}
});
});
}
setImmediate(main);
强制更新没了,正常进入app。
patch libapp.so 直接在文件偏移地址上 写入 RET 即可。