可以参考下面这个文章:
https://bbs.pediy.com/thread-261587.htm
但是即使参考了这个还是有人不会,那就把详细的步骤写一下吧。
这里写下关键点就可以了,也就是在文章上面没有写明白的地方。
现在的问题是XCode根本没办法挂上app。
问题是你挂不上app,那说明app里面做了检测,既然做了检测,那就在做检测之前下个断点先断下来,然后看反汇编代码里面的地址,再下你的地址断点,然后对应修改寄存器的值,这样就绕过去了。
MonkeyDev里面有一个sysctl
的hook,将这个hook打开,如下:
rebind_symbols((struct rebinding[1]){{"sysctl", my_sysctl, (void*)&orig_sysctl}},1);
然后在my_sysctl
中下断点就可以了。
然后你MonkeyDev跑起来。
那这下就断住了,然后你再看模块的ASLR地址:
(lldb) im list -o -f Aweme
[ 0] 0x0000000002b30000 /Users/dbgw_ebeez/Library/Developer/Xcode/DerivedData/com.ss.iphone.ugc.Aweme-foalqmpaaknsfadlsmzavrycodfb/Build/Products/Debug-iphoneos/com.ss.iphone.ugc.Aweme.app/Aweme
(lldb)
你再看下对应的svc 80
前面调用的写入寄存器的地址:
__text:000000010438E3FC loc_10438E3FC ; CODE XREF: start+48↑j
__text:000000010438E3FC MOV X0, #0x1A
__text:000000010438E400 MOV X1, #0x1F
__text:000000010438E404 MOV X2, #0
__text:000000010438E408 MOV X3, #0
__text:000000010438E40C MOV X16, #0
__text:000000010438E410 SVC 0x80
那这就简单了:
(lldb) dis -s "0x000000010438E404 + 0x0000000002b30000"
Aweme`___lldb_unnamed_symbol594499$$Aweme:
0x106ebe404 <+92>: mov x2, #0x0
0x106ebe408 <+96>: mov x3, #0x0
0x106ebe40c <+100>: mov x16, #0x0
0x106ebe410 <+104>: svc #0x80
0x106ebe414 <+108>: adrp x8, 18127
0x106ebe418 <+112>: ldr x0, [x8, #0x4d0]
0x106ebe41c <+116>: adrp x8, 17821
0x106ebe420 <+120>: ldr x1, [x8, #0x3b0]
(lldb) br set -a "0x000000010438E404 + 0x0000000002b30000"
Breakpoint 4: where = Aweme`___lldb_unnamed_symbol594499$$Aweme + 92, address = 0x0000000106ebe404
(lldb)
然后你去掉my_sysctl
的断点跑起来,断下来了,然后你再写寄存器的值:
(lldb) register write $x1 0
(lldb) po $x1
<nil>
(lldb)
这不就可以调试了么?
或者简单点你直接patch下bin文件呗,下次还不用这么麻烦的改来改去了。
改bin文件也是一门艺术,有几个小技巧和注意的点分享下:
- 只能改bytes,arm指令不能改汇编代码。。。(如果有人知道咋改还请不吝赐教)
- 保存文件的时候可以设置偏移,不然就像我第一次那样傻等好久好久。。。
具体步骤可参考:
https://blog.csdn.net/youshaoduo/article/details/83688732
最后附一个: 最后附一个直接137022版本的改过以后的bin文件,自己放进去直接可以调了。
https://cowtransfer.com/s/2338a42d59fd45
532759