LLDB +debugserver 调试IOS应用


#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 ,要是有就好了。


#2

其他的进程有这问题吗?


#3

肯定是姿势不对,,,,


#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++写的东西。以上纯属猜测,大神怎么看?


#5

不科学啊,我站着、趴着、躺着的姿势都试过了,难道还有新姿势:3_45:


#6

微信我试过是没问题的,游戏还没试过呢,我找个游戏试试看


#7

最新版微信:

(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)

#8

大大,说的这个游戏,我下载来,用Hopper反编译了下,里面基本都是object-c写的,貌似没有看到C++的使用。如果可以的话,可以找个用cocos2dx引擎开发的游戏例如刀塔传奇、怪物弹珠之类的,或者大大有试过可以正常设置断点到C++的类方法吗?


#9

游戏刀塔争霸:

(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

没有试过能不能实际断下来,但看起来应该没问题


#10

真是奇怪,这个跟什么配置关联呢。是MAC上的环境还是IOS设备的问题。你用LLDB 都不报unable to find section的错误,而我的就一直有报。用地址打断点的话,我试了下可以正常断到。不过,我的LLDB在断到对应的方法的时候,显示的方法名是一串乱码问号之类的。而你,断到的却能正确显示C++类及方法名。难道这纯属和人品有关系。。。:3_49:


#11

结贴了。虽然,还是报unable to find section的错误,C++类名和方法名也没法正确显示,不过,直接通过地址来断点调试分析,暂时也满足需求。这个问题留待后续研究,谢谢 @snakeninny 的指点。


#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 调试


#13

大神 为何我的连上了但没有断点上?


#14

你这个是怎么解决的?我现在也是SE 完了同样的错误