Lldb打断点出现的汇编代码对不上

iphone5 ios8.1系统 Xcode8

砸壳出WeChat.decrypted后放到hopper里解析出汇编代码 找到微信登录类的初始化方法的基地址 然后用基地址+ALSR偏移的方式 计算出初始化方法的内存地址后 用LLDB给那个内存地址打断点 本来打断点后应该显示出即将执行的汇编代码的 但是现在出现的汇编代码跟WeChat.decrypted文件解析出来的汇编代码对不上

Hopper里面 -[WCAccountPhoneLoginControlLogic initWithData:]的汇编代码是以下这样的
013c357e push {r4, r5, r6, r7, lr}
013c3580 add r7, sp, #0xc
013c3582 sub sp, #0x8
013c3584 mov r5, r0
013c3586 mov r0, r2

lldb打断点显示如下
Breakpoint 1: where = WeChat`plcrash_error_t plcrash_async_dwarf_expression_eval<unsigned long long, long long>(plcrash_async_mobject*, unsigned int, plcrash_async_thread_state const*, plcrash_async_byteorder const*, unsigned int, int, unsigned int, unsigned long long*, unsigned long, unsigned long long*) + 12557930, address = 0x0142c57e

看到逆向工程这本书上有提及Xcode6附带的LLDB(版本号320.XXX)在armv7和armv7s设备上有时会混淆ARM和THUMB指令
这个bug在Xcode8上应该解决了吧…我的OSX是10.12.6的 用不了Xcode5.0.XX没法测试…Xcode的发布文档也没看到提及修复了这个bug 有遇到同样问题的伙伴吗?有没有前辈指点下迷津 感激不尽

1 个赞

能再说的详细一些, lldb 里 dis 是什么样子的?

lldb里 dis显示如下
0x32fad4dc <+0>: mov r12, sp
0x32fad4e0 <+4>: push {r4, r5, r6, r8}
0x32fad4e4 <+8>: ldm r12, {r4, r5, r6}
0x32fad4e8 <+12>: mvn r12, #30
0x32fad4ec <+16>: svc #0x80
→ 0x32fad4f0 <+20>: pop {r4, r5, r6, r8}
0x32fad4f4 <+24>: bx lr

disass -A thumbv7 试下

2 个赞

(lldb) disass -A thumbv7
libsystem_kernel.dylib`mach_msg_trap:
0x32fad4dc <+0>: stm r0!, {r0, r2, r3}
0x32fad4de <+2>: b 0x32fad822 ; madvise + 18
0x32fad4e0 <+4>: lsls r0, r6, #0x5
0x32fad4e2 <+6>: push.w {r4, r5, r6}
0x32fad4e6 <+10>: ldm.w r12, {r1, r2, r3, r4, lr, pc}
0x32fad4ea <+14>: b 0x32fadcae ; mig_strncpy + 38
0x32fad4ec <+16>: lsls r0, r0, #0x2
0x32fad4ee <+18>: vand q0, q0, q8
0x32fad4f2 <+22>: .long 0xff1ee8bd ; unknown opcode
0x32fad4f6 <+26>: b 0x32fad758 ; mig_get_reply_port

这个指令是什么意思可以告知一下吗

1 个赞

对于 libsystem_kernel.dylib 里的函数, 需要 disass -A armv7

详细参考: help disass

1 个赞

好的 谢谢

在使用disass -A armv7指定了armv7架构之后指令还是对不上 网上看到教程体积iphone5是armv7s架构的 也试了disass -A armv7s 还是对不上 怎么去排查可有方向? 谢谢

确定下 aslr_slide 是否算对了, 不行就上 capstone 哈哈哈.

嗯 好的 感谢回答

兄台解决没,我也遇见一样的问题

或许 你电脑的app版本跟你手机不一样

电脑的二进制是从手机里砸出来的

pp有这个软件吗 有的话两个都重装下试试 按理来说版本一致不应该出现这问题

和你一样 用个32位手机吧 马上没毛病 不用算了

还没 我刚接触逆向这块 这个问题暂时解决不了 只能先放着了

我就是从pp上下载下来的 版本问题确认过了

iphone5应该就是32位的吧?

你的是5还出这个问题 就不应该了 我的是机器位数和二进制文件位数对不上。然后就算不对,可以跳过才
断点微信那些app 不会出现这个问题:wink:

“可以跳过才断点微信那些app 不会出现这个问题” 什么意思?