使用lldb和hopper计算函数地址给运行中的app添加断点
来源:http://www.tudoupe.com时间:2022-02-26
文章目录
- 原理讲解
- 使用hopper找到你要下断点的macho-o文件里的函数地址的方法
- 通过越狱手机连接上mac,并且进入lldb
- 查看app所有段落和偏移量: -f是完整路径 -o是偏移量
- 在lldb里通过计算后的内存地址设置断点
原理讲解
hopper是分析macho文件的里面的函数地址,是macho文件中的函数地址.而macho文件运行在内存中以后,macho文件的段落里的PAGEZERO端会改变大小,所以导致后面的段落后向后移动,因为代码段的大小在加载在虚拟内存后不会改变,所以虚拟内存中的函地址,可以通过pagezero端的大小,也就是代码段后面的便宜量+ hopper里函数的地址相加得到.
具体操作是:偏移量可以通过lldb的 image list -o -fc查出段落的偏移量,让段落的偏移量+hopper中的函数的代码段的偏移量 得到真实的内存中函数的偏移量
使用hopper找到你要下断点的macho-o文件里的函数地址的方法
例如,我通过theos tweek已经在BaseMsgContentViewController控制器里,把所有的方法都添加了打印信息.
的TextDidChanged方法下hook了打印的方法
下面这篇文章是关于如何使用theos给一个控制器的所有方法都用logify.pl脚本自动添加上所有打印信息
ios使用theos的 logify.pl自动hook .h头文件中所有的方法
例如其中BaseMsgContentViewController这个文件是发送信息时候的控制器,里面每次文字改变会调用下面的方法,里面也添加了打印信息,如下面代码
通过控制台打印,可以看到当手机微信输入789的时候,函数被打印了如下图:
打开Hopper Disassembler,把脱壳以后的app的mach-o文件拖拽进去.
脱壳请查看我写的这篇文章
ios脱壳工具frida使用教程和各种踩坑总结(app store可用脱壳)
拖拽进去脱壳后的macho-o文件以后如下
搜索,要查找的文件名 和 函数名,中间用空格分开,例如
找到hopper搜搜到的函数地址

例如,上图,的函数地址:00000001034d0be8
这个地址是没加载到虚拟内存的地址.一旦加载到虚拟内存以后,地址会存在一个偏移量.
通过越狱手机连接上mac,并且进入lldb
具体操作参见这篇文章
ios 让debugserver可以调试任意app
usb连接上越狱手机后再手机端ssh输入:
mac端输入:
查看app所有段落和偏移量: -f是完整路径 -o是偏移量
打印结果如下:
找到上面第0行 wechat.app这行,这行开头的地址0x00000000025cc000 是这个app的偏移量
设置函数虚拟内存里的断点就是这个偏移量+ hopper里的函数偏移量
通过下断点指令
在lldb里通过计算后的内存地址设置断点
例如这个函数下的断点的地址就是如下,注意添加0x开头,因为) image list -o -f 和hopper里复制的地址都是16进制的.用+加号相加
得到结果下断点成功
下面按下c,让app继续执行,相当于xcode的F9
之后我退出聊天页面再重新进入,再用键盘输入文字,发现lldb在断点停住了
原因显示是 :因为断点breakpoint 1.1
代表你设置断点成功了,如下图
相关新闻
- 2023-05-06 微pe怎么初始化U盘(微pe怎么恢复初
- 2023-05-06 Xp系统boot 进入pe(boot manager 怎么进入
- 2023-05-06 win pe修复bcdboot(pe修复系统)
- 2023-05-06 win7更新失败 pe(win7更新失败还原更
- 2023-05-06 u盘装了pe读取不了(u盘能进pe读取不
- 2023-05-06 u盘pe 发热(u盘发热烫手)
- 2023-05-06 u盘pe下看不到硬盘(u盘启动pe看不到
- 2023-05-06 pe盘 ntfs(u盘ntfs格式)
- 2023-05-06 sony笔记本进入pe模式(联想笔记本怎
- 2023-05-06 pe启动盘进不去(pe启动盘进不去系统
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
