iOS逆向学习笔记之--LLDB动态调试目标程序

iOS逆向学习笔记之–LLDB动态调试目标程序

  • 配置debugserver

1、将手机中的debugserver拷贝到Mac电脑上(前提是手机作为测试机使用过)

scp root@192.168.0.15:/Developer/usr/bin/debugserver /Users/mac/Desktop/dump 

2、查看debugserver架构然后瘦身去除其他架构

macdeiMac:dump mac$ lipo -info debugserver 
Architectures in the fat file: debugserver are: armv7 armv7s arm64 
// 保留需要的架构(这里是4s)
lipo -thin armv7 debugserver -output /Users/mac/Desktop/debugserver

3、给debugserver签名
使用codesign添加task_for_pid权限
1、下载ent.plist文件(地址:http://iosre.com/ent.plist)
2、把ent.plist和debugserver放到同一目录下进行签名

macdeiMac:dump mac$ cd /Users/mac/Desktop/sign 
macdeiMac:sign mac$ codesign -s - --entitlements ent.plist -f debugserver
debugserver: replacing existing signature
// 查看签名信息
macdeiMac:sign mac$ ldid -e  debugserver
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.springboard.debugapplications</key>
	<true/>
	<key>run-unsigned-code</key>
	<true/>
	<key>get-task-allow</key>
	<true/>
	<key>task_for_pid-allow</key>
	<true/>
</dict> 
</plist>

3、将处理好的debugserver拷贝回越狱iOS设备

scp /Users/mac/Desktop/sign/debugserver root@192.168.2.122:/usr/bin/debugserver

说明:拷贝到"/usr/bin/"目录下具有全局使用权限,原有目录下/Developer/usr/bin/debugserver是不可写的无法覆盖。

  • lldb的使用(iOS设备和电脑位于同一局域网)

1、ssh到手机开启debugserver监听

debugserver *:9999 -a "caipudaquan"

2、在电脑端使用lldb

lldb
process connect connect://192.168.2.122:9999

效果如下:
这里写图片描述

这里写图片描述
通过debugserver来启动app

debugserver -x auto *:端口号  app可执行文件路径

常用命令:

查看ASLR偏移
image list -o -f 
br = breakpoint
查看指令的用法
help breakpoint
执行一个表达式
expression self.redView.backgroundColor = [UIColor redColor]
expression expression -- 和指令print、p、call的效果一样
expression -O --和指令po的效果一样
设置断点
br s -a '0x0000000000054000+0x0000000101dcbb0c'
b function
br s –a address
br s –a 'ASLROffset+address'
br s -n touchesBegan:withEvent: // 函数名
br s -r 正则表达式
br s -s 动态库 -n 函数名
// 查看所有断点
br list
// 删除断点1
br delete 1
// 程序继续运行
c
// 查看函数调用堆栈
bt = thread backtrace
// 使断点1失效
br dis 1
// 使断点1生效
br enable 1
打印当前栈帧的变量
frame variable
x/s $x1  // 将寄存器x1处的内存以字符串的形式显示出来
register read  // 读取所有寄存器的值
register read $x0  // 读取某个寄存器的值
register write $x5 1 //  修改某个寄存器的值
si // 汇编级别,遇到子函数进入子函数,跳转当前指令的内部
ni // 汇编级别,把子函数当做一个整体执行,跳过当前指令
n // 源码级别,把子函数当做一个整体执行
s // 源码级别,遇到子函数会进入子函数执行
finish // 返回上层调用栈
thread return // 不再执行下面的代码,直接从当前调用栈返回一个值
br list // 查看当前断点列表
br del // 删除当前所有的断点
help // 查看所有LLDB命令
apropos name // 搜索命令带有name的相关命令
memory read -force -f A $sp $fp // 打印内存中栈的值
x/10xg address // 用16进制显示该地址空间10个64位元素内容
// 给断点添加命令,在触发此断点的时候会执行自己添加的命令 例如此时有一个断点1
br com add 1
> po $r0
> po $r1
> c
> DONE

内存断点
在内存数据发生改变的时候触发
watchpoint set variable 变量 
watchpoint set variable self->age
watchpoint set expression 地址
watchpoint set expression &(self->_age)
watchpoint list
watchpoint disable  断点编号
watchpoint enable	断点编号
watchpoint delete	断点编号   
watchpoint command add	断点编号    
watchpoint command list	断点编号      
watchpoint command delete	断点编号
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值