image list -o -f
lldb连接debugserver后,执行上述命令输出的部分结果如下所示。下方截图中,第一个就是“WeChat”程序的相关信息。左边红框就是ASLR偏移量(随机偏移量),ASLR偏移量其实就是虚拟内存的其实地址,相对于模块基地址的偏移量。右边红框中的地址就是偏移后的地址。
在介绍地址这块的东西是先熟悉一下下方的两个概念:
模块在内存中的起始地址----模块基地址
ASLR偏移 ---- 虚拟内存起始地址与模块基地址的偏移量
从下方的输出结果我们可以知道:ASLR偏移量 = 0x5b000, 模块偏移后基地址 = 0x5f000

下方是使用Hopper打开的解密后的微信的安装包,其起始地址从下图中我们可以看出是0x4000, 这个地址就是模块偏移前的地址,也就是模块在虚拟内存中的起始地址。从Hopper中我们可以知道:模块偏移前的基地址=0x4000

从上面两组数据我们可以得出:
模块偏移后的基地址(0x5f000)= ASLR偏移量(0x5b000)+ 模块偏移前基地址(0x4000)
上面这个公式是尤为重要的,因为Hopper中显示的都是“模块偏移前基地址”,而LLDB要操作的都是“模块偏移后的基地址”。所以从Hopper到LLDB,我们要做一个地址偏移量的转换。这个在下方会多次用到。当然,有一点需要注意的是Hopper与LLDB所选择的AMR架构的位数得一致,要么是32位,要么都是64位,如果位数不匹配的话,那么计算出来的内存地址肯定是不对的。
2、使用LLDB给微信登录添加断点
(1)、加断点前的分析
“断点”这个东西在iOS开发中可谓是经常使用的东西,接下来我们要做的就是给在微信点击登录进行页面跳转时添加一个断点。就是点击左边截图的登录按钮往右边页面跳转时添加一个断点。我们暂且将断点添加在右边页面的初始化方法中。

要给上述右边页面添加断点首先得知道上面“手机号登录”视图控制器的内存地址,然后才可以使用LLDB添加断点。那么寻找上述视图控制器的内存地址的任务就交给了我们的Hopper来做了。在Hopper中我们搜索“Login”,然后会筛选出好的带有Login关键字的ViewController,然后我们在筛选的结果中再次寻找可疑目标对象。然后我们找到了一个名为“WCAccountPhoneLoginControlLogic”(我们可以翻译一下英文,大概意思就是“微信手机账号登录控制逻辑”)的类,从这个类的名字中我们不难推断出该类极有可能就是我们要寻找的“手机账号登录”页面。










