woxhty
(woxhty)
2015 年2 月 2 日 12:04
1
我按论坛之前的帖子里步骤,来使用LLDB+debugserver attach 游戏进程,打算进行动态分析,在使用LLDB 来连接IOS设备上的debugsever,但是
一直在报error:unable to find section:section 32类似的错误,然后这个过程结束之后,使用bt命令查看当前的调用栈,发现只有系统的库的方法名
可以打印出来,应用本身定义的方法名字打印不出来。已经使用IDA反编译看反编译过应用,知道有哪些C++类和方法,但用方法名来打断点,就提示
识别不了。而且,(lldb) po [UIApplication sharedApplication] delegate] 这样也提示说标识符没发识别,目前这样感觉,LLDB一点用都没有。
我使用的是ipad air2 系统版本8.1.2,已越狱。应用也解密并且去掉了ALSR标志。
求大神指点迷津。网上,也找不到,ARM 64 版本的 GDB ,要是有就好了。
woxhty
(woxhty)
2015 年2 月 3 日 12:32
4
我试了下,attach SpringBoard,正常,没有报unable to find section的错误,application 的delegate也可以正常打印。然后,我又试了下attach微信,报了4个unable to find section的错误,而application 的delegate也无法打印。我猜测是,如果用纯用object-c开发的应用,lldb可以正常的去读取信息,而如果应用里有C++或者大量C++写的东西,lldb就没发正常读取信息了。我想要分析的游戏,用cocos2dx开发的,90%是C++的,而微信里面应该是有小部分用C++写的东西。以上纯属猜测,大神怎么看?
woxhty
(woxhty)
2015 年2 月 3 日 12:33
5
不科学啊,我站着、趴着、躺着的姿势都试过了,难道还有新姿势:3_45:
微信我试过是没问题的,游戏还没试过呢,我找个游戏试试看
最新版微信:
(lldb) process connect connect://localhost:1234
Process 195138 stopped
* thread #1: tid = 0x2fa42, 0x34e0e4f0 libsystem_kernel.dylib`mach_msg_trap + 20, queue = 'com.apple.main-thread, stop reason = signal SIGSTOP
frame #0: 0x34e0e4f0 libsystem_kernel.dylib`mach_msg_trap + 20
libsystem_kernel.dylib`mach_msg_trap + 20:
-> 0x34e0e4f0: pop {r4, r5, r6, r8}
0x34e0e4f4: bx lr
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x34e0e4f8: mov r12, sp
0x34e0e4fc: push {r4, r5, r6, r8}
(lldb) image list -o -f
0] 0x000d2000 /private/var/mobile/Containers/Bundle/Application/FD5B5049-4DB9-4811-BDDE-40C7B5E5AECD/MicroMessenger.app/MicroMessenger(0x00000000000d6000)
游戏Trivia Crack,刚下的:
(lldb) process connect connect://localhost:1234
Process 194789 stopped
* thread #1: tid = 0x2f8e5, 0x34e0e4f0 libsystem_kernel.dylib`mach_msg_trap + 20, queue = 'com.apple.main-thread, stop reason = signal SIGSTOP
frame #0: 0x34e0e4f0 libsystem_kernel.dylib`mach_msg_trap + 20
libsystem_kernel.dylib`mach_msg_trap + 20:
-> 0x34e0e4f0: pop {r4, r5, r6, r8}
0x34e0e4f4: bx lr
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x34e0e4f8: mov r12, sp
0x34e0e4fc: push {r4, r5, r6, r8}
(lldb) image list -o -f
0] 0x000d4000 /private/var/mobile/Containers/Bundle/Application/AE41C07D-5A0C-4A82-94F7-CEEFF92C1941/Preguntados.app/Preguntados(0x00000000000d8000)
woxhty
(woxhty)
2015 年2 月 4 日 01:56
8
大大,说的这个游戏,我下载来,用Hopper反编译了下,里面基本都是object-c写的,貌似没有看到C++的使用。如果可以的话,可以找个用cocos2dx引擎开发的游戏例如刀塔传奇、怪物弹珠之类的,或者大大有试过可以正常设置断点到C++的类方法吗?
游戏刀塔争霸:
(lldb) process connect connect://localhost:1234
Process 10419 stopped
* thread #1: tid = 0x28b3, 0x30e964f0 libsystem_kernel.dylib`mach_msg_trap + 20, queue = 'com.apple.main-thread, stop reason = signal SIGSTOP
frame #0: 0x30e964f0 libsystem_kernel.dylib`mach_msg_trap + 20
libsystem_kernel.dylib`mach_msg_trap + 20:
-> 0x30e964f0: pop {r4, r5, r6, r8}
0x30e964f4: bx lr
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x30e964f8: mov r12, sp
0x30e964fc: push {r4, r5, r6, r8}
(lldb) image list -o -f
0] 0x00091000 /private/var/mobile/Containers/Bundle/Application/37B23041-1176-40E2-ACBD-7511067BB5EC/M7.app/M7(0x0000000000095000)
下断点:
(lldb) br s -a '0x00091000+0x12345'
Breakpoint 1: where = M7`cocos2d::CCBezierBy::startWithTarget(cocos2d::CCNode*) + 13, address = 0x000a3345
没有试过能不能实际断下来,但看起来应该没问题
woxhty
(woxhty)
2015 年2 月 5 日 03:34
10
真是奇怪,这个跟什么配置关联呢。是MAC上的环境还是IOS设备的问题。你用LLDB 都不报unable to find section的错误,而我的就一直有报。用地址打断点的话,我试了下可以正常断到。不过,我的LLDB在断到对应的方法的时候,显示的方法名是一串乱码问号之类的。而你,断到的却能正确显示C++类及方法名。难道这纯属和人品有关系。。。:3_49:
woxhty
(woxhty)
2015 年2 月 6 日 01:29
11
结贴了。虽然,还是报unable to find section的错误,C++类名和方法名也没法正确显示,不过,直接通过地址来断点调试分析,暂时也满足需求。这个问题留待后续研究,谢谢 @snakeninny 的指点。
niyaoyao
(Niyao)
2017 年3 月 13 日 04:13
12
➜ debugserver lldb
(lldb) process connect connect://10.12.66.85:1234
Process 245 stopped
* thread #1: tid = 0x0dd1, 0x0000000182968fd8 libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000182968fd8 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x182968fd8 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x182968fdc <+0>: movn x16, #0x1f
0x182968fe0 <+4>: svc #0x80
0x182968fe4 <+8>: ret
(lldb) exit
好奇怪,我的 iPhone SE 连 SpringBoard 也不能用 lldb 调试
你这个是怎么解决的?我现在也是SE 完了同样的错误