ios逆向工程

iOS逆向:动态调试

2020-08-20  本文已影响0人  码小菜

目录
一,Xcode动态调试的原理
二,终端动态调试的原理
三,建立连接
四,LLDB常用命令
五,ASLR

一,Xcode动态调试的原理

1,图解
2,说明

1>LLDB将调试命令发送给debugserver
2>debugserver将调试命令执行到APP上
3>APP将调试信息反馈给debugserver
4>debugserver将调试信息转发给LLDB

二,终端动态调试的原理

1,图解
2,说明

三,建立连接

1,debugserver和APP的连接

1>从iPhone中导出debugserver,再从debugserver中导出权限文件

2>在权限文件中添加两个字段:get-task-allowtask_for_pid-allow

3>将权限文件重新添加到debugserver

4>将授权后的debugserver添加到iPhone的/usr/bin目录下(原目录中的无法替换)

1>方法一:debugserver *:[非保留端口号] -a [APP进程名称](先手动启动APP)

2>方法二:debugserver -x auto *:[非保留端口号] [APP可执行文件路径](会自动启动APP)

2,LLDB和debugserver的连接
3,图解

四,LLDB常用命令

1,frame
2,expression
3,thread
4,breakpoint
5,watchpoint
6,image
7,help(查看命令的用法)

五,ASLR

1,Mach-O基本结构
2,Data基本结构
3,字段介绍
4,使用ASLR前的内存布局

1>_PAGEZERO在Mach-O文件中的大小为0x0,加载进内存后大小为0x100000000(arm64架构下)
2>HeaderLoad commands都是描述信息,存储在_TEXT中,所以内存空间从_PAGEZERO开始分配
3>代码编译完成后,_TEXT中方法的位置和_DATA中变量的位置就是固定的,这样很容易进行动态调试,为了增加安全性,从iOS4.3开始就引入了ASLR技术

5,使用ASLR后的内存布局

1>ASLRAddress Space Layout Randomization(地址空间布局随机化)的缩写
2>引入ASLR技术后,当Mach-O文件加载进内存时,会随机生成一个内存地址,然后从该地址开始进行内存空间的分配
3>虽然方法和变量的位置是固定的,但是内存地址就变得随机了,这样就会增加动态调试的难度,从而提高了安全性

6,获取方法的真实内存地址
0x1000055b8 + 0xb4000 = 0x1000b95b8
本文章仅供学习交流,如有侵权,请联系删除,谢谢!
上一篇 下一篇

猜你喜欢

热点阅读