USB调试:
-
首先安装usbmuxd,在Mac下就不需要手动安装了,直接命令行
brew install usbmuxd
-
使用iproxy命令映射端口,2222代表本机端口,22代表远程端口 此时提示等待连接 可以另外开个终端输入接下去的指令
iproxy 2222 22 & 3333 1234
-
ssh到设备上开启debugserver
ssh -lroot 127.0.0.1 -p2222
-
查看需要debug的进程(这时已经在手机端)
ps -A
//附加进程
debugserver *:1234 -a "SpringBoard"
//启动进程
debugserver -x backboard *:1234 path/IF.app/IF
-
本地lldb连接(电脑端)
$: lldb
(lldb): platform select remote-ios
(lldb): process connect connect://127.0.0.1:3333
脱壳:
1: github 下载:dumpdecrypted
2: 在下载的目录执行: make
命令.在当前目录会生成一个dumpdecrypted.dylib
文件.此文件生成一次就可重用
3: 用ps -e
命令定位待脱壳app在手机中的目录(在手机端可以只开待脱壳一个应用) 用上面usb调试方法ssh登陆到手机端
iphone:~ root# ps -e
1767 ?? 0:01.60 /usr/libexec/ptpd -t usb
1806 ?? 0:00.03 /usr/libexec/amfid
1807 ?? 0:00.00 (MSUnrestrictProc)
1812 ?? 0:23.66 /var/mobile/Containers/Bundle/Application/AA4626E2-39A3-4E82-AC7B-12549B0EF7B5/GuitarMaster.app/GuitarMaster
4: 用Cycript
找出待脱壳app在手机中的Documents目录(注意手机得解锁)
iphone:~ root# cycript -p GuitarMaster
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/F116C3AF-156E-4C1B-BF54-055BBC5D2377/Documents/"
iphone:~ root# ?exit
5: 用scp命令或pp助手或iFunBox将dumpdecrypted.dylib复制到Documents目录下
6: 开始脱壳(完成后在当前目录生成GuitarMaster.decrypted文件 复制到mac端 上IDA)
iphone:~ root# cd /var/mobile/Containers/Data/Application/F116C3AF-156E-4C1B-BF54-055BBC5D2377/Documents/
iphone:/var/mobile/Containers/Data/Application/F116C3AF-156E-4C1B-BF54-055BBC5D2377/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/AA4626E2-39A3-4E82-AC7B-12549B0EF7B5/GuitarMaster.app/GuitarMaster
mach-o decryption dumper
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
[+] detected 64bit ARM binary in memory.
[+] offset to cryptid found: @0x100050c58(from 0x100050000) = c58
[+] Found encrypted data at address 00004000 of length 11026432 bytes - type 1.
[+] Opening /private/var/mobile/Containers/Bundle/Application/AA4626E2-39A3-4E82-AC7B-12549B0EF7B5/GuitarMaster.app/GuitarMaster for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a FAT image - searching for right architecture
[+] Correct arch is at offset 12353536 in the file
[+] Opening GuitarMaster.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset bc8c58
[+] Closing original file
[+] Closing dump file
iphone:/var/mobile/Containers/Data/Application/F116C3AF-156E-4C1B-BF54-055BBC5D2377/Documents root#
class-dump
- 下载最新版本class-dump-3.5.dmg
- 打开后把里边'class-dump'文件复制到'/usr/local/bin'目录下
- 命令行输入'sudo chmod 777 /usr/local/bin/class-dump'给可执行权限
- 上一步脱完壳已经把app的可执行文件复制到了mac中.这里命令行切换到app可执行文件所在目录.输入命令
MAC:bin MAC$ cd /Users/WANG/Desktop/GuitarMaster
//当前GuitarMasterDecrypted可执行文件dump出头文件放到当前GuitarMasterDecryptedH目录下.按名字排序
MAC:GuitarMaster MAC$ class-dump -S -s -H GuitarMasterDecrypted -o GuitarMasterDecryptedH
LLDB:
1: 查看ASLR偏移
image list -o -f
2:断点
断点命令 | 说明 |
---|---|
b function name | 直接用函数名字下断点 会输出断点号 |
br s -a address | 在地址处下断点 |
br s -a 'ASLROffset+address' | 同上 |
br dis [断点号] | 禁用断点 不带索引号表示全部禁用 |
br end [断点号] | 启用断点 索引同上 |
br del [断点号] | 删除断点 索引同上 |
br com add [断点号] | 断下来时 执行预先设置的指令 断点号在下断点时会输出 |
// 引用自: http://iosre.com/t/lldb-oc/6711
// 打印出MMServiceCenter类的所有函数 与 地址
(lldb) po [MMServiceCenter _shortMethodDescription]
//后面会跟这函数的当前所在地址
- (id) getService:(Class)arg1; 0x100bd04f0
// 该地址可以直接下断
(lldb) b 0x100bd04f0
// 打印数据模型内容的私有函数方法
(lldb) po [模型对象 _ivarDescription]
3:打印
打印命令 | 说明 |
---|---|
disas | 显示汇编 |
bt | 打印栈信息 |
p $r0 | 打印寄存器的值 |
po $r0 | 打印对象 |
p/x $sp | 以16进制打印sp寄存器 |
x/10 $sp | 打印sp指向的连续10个dword |
x/10xg $x0(addr) | x/(显示命令) x(16进制显示) g(64位一组) |
x/10xw $x0(addr) | w(32位一组) |
x/10s $x0(addr) | s(字符串显示) |
x/10fg $x0(addr) | f(以浮点数显示) |
cmd+k | 清屏 |
4:执行
执行命令 | 说明 |
---|---|
c | 运行 |
ni | 步过 |
si | 步入 |
finish | 步出 |
参考资料:
http://blog.tanyawei.com/2015/09/07/iOS-USB%E8%B0%83%E8%AF%95/
<iOS应用逆向工程>
网友评论