前言
首先是我有個(gè)app棍潘,我就不說(shuō)是誰(shuí)了秒咨,里面的反調(diào)試是libmsaoaidsec.so實(shí)現(xiàn)的。
然后看到一個(gè)文章bilibili反調(diào)試
有兩個(gè)問(wèn)題
- 1是寫的沒那么詳細(xì)
- 2是ThumbWriter 未定義 報(bào)找不到的異常
找方法偏移地址
他寫的我就不重復(fù)寫了
主要就是找地址
image.png
image.png
image.png
偏移地址分別為1AEE4,1A574
找pthread_create創(chuàng)建的地址
打開ida 搜索pthread_create 两嘴, 雙擊
image.png
交叉引用
image.png
image.png
看最后兩個(gè)
image.png
sub_7DE0就是pthread_create,上面的箭頭熟悉吧1AEE4 剛才找的便宜地址 享甸,說(shuō)明就是這里。
另一個(gè)同理梳侨,那就nop掉這兩個(gè)就可以了蛉威。
找nop 地址
image.png
1A5B0+2A8 = 0x1A858 1B88C+28 = 0x1B8A8
對(duì)原論壇代碼進(jìn)行修改
function bypass(){
var module = Process.findModuleByName("libmsaoaidsec.so")
// 32位
// nop(module.base.add(0x10AE4))
// nop(module.base.add(0x113F8))
// 64位
nop(module.base.add(0x1A858));
nop(module.base.add(0x1B8A8));
}
nop方法 ThumbWriter方法會(huì)提示找不到 64要用Arm64Writer 且putNop要寫四個(gè) 32位寫兩個(gè)
function nop(addr) {
Memory.patchCode(ptr(addr), 4,
code=> {
// 64位
const cw = new Arm64Writer(code, { pc: ptr(addr) });
// 32位
// const cw = new ThumbWriter(code, { pc: ptr(addr) });
// 32位putNop兩次 64位要putNop四次
cw.putNop();
cw.putNop();
cw.putNop();
cw.putNop();
cw.flush();
});
}
為啥個(gè)數(shù)有區(qū)別呢?
image.png
結(jié)語(yǔ):
還有其他方式也能過(guò) 我就賣關(guān)子了 :)奸笑