iOS逆向开发(四)----LLDB,ASLR
我们常常需要动态调试app,通过xcode
安装的app都支持动态调试,这是因为在调试的iphone中存在debugserver
,xcode集成了LLDB
.debugserver
放在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/De viceSupport/12.0/DeveloperDiskImage.dmg/usr/bin/debugserver
中.
XcodeXcodedebugserveriPhone,路径为/Developer/usr/bin/debugserver
默认情况下/Developer/usr/bin/debugserver
,只能调试Xcode安装的app,因此我们对debugserver
重新签名,加上get-task-allow
和task_for_pid-allow
权限.
通过ldid导出权限:
ldid -e debugserver > debugserver.entitlements
重新签名
ldid -Sdebugserver.entitlements debugserver
###让附加到某个app进程
debugserver *:端口号 -a 进程
如果提示没有权限:chmod +x /usr/bin/debugserver
赋予执行权限.
在MAC启动LLDB,lldb
,连接debugserver服务,process connect connect://IP:端口号
.
LLDB常用命令
格式为:<command> [<subcommand> [<subcommand>...]] <action> [-options [option- value]] [argument [argument...]]
给函数设置断点:breakpoint set -n 函数名
,breakpoint set -a 函数地址
,breakpoint set -r 正则表达式
,breakpoint set -s 动态库 -n 函数名
列出所有断点:breakpoint list
禁用断点:breakpoint disable
启用断点:breakpoint enable
删除断点:breakpoint delete
给断点预先设置命令:breakpoint command add 断点编号
查看断点命令:breakpoint command list 断点编号
删除某个断点命令:breakpoint command delete 断点编号
内存断点:watchpoint set variable 变量
,watchpoint set expression 地址
执行表达式:expression self.view.backgroundColor = [UIColor redColor]
, expression和expression --,与p,print,call一样功能,expression -O --
打印对象信息.
打印线程信息:thread backtrace
直接返回,不执行断点后面的代码:thread return []
打印当前栈帧变量:frame variable []
程序继续执行:c
单步执行,不进入子函数:n
单步执行,进入子函数:s
执行当前函数,返回上一个函数:finish
单步指令,不进入子命令:ni
单步指令,进入子命令:si
查找某个类型的信息:image lookup -t 类型
根据内存地址查找模块中的位置:image lookup -a 地址
查找符号和函数的位置:image lookup -n 符号或函数名
所有加载模块信息:image list
模块偏移地址,全路径:image list -o -f
c
ASLR
ASLR: Address Space Layout Randomization,地址空间布局随机化,是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术,iOS4.3开始引入了ASLR技术. ASLR产生的随机偏移,就是可执行文件的内存地址.
用lldb命令:image list -o -f
查看app的mach-o的ASLR值.
如上图,这次微信的ASLR值为ox58000
网友评论