iOS逆向工程:OSX工具集的安装配置(一)中是关于class-dump和Theos的安装配置,这篇文章介绍 Reveal, IDA, dyld_decache的安装配置.
一.Reveal
Reveal: 由 ITTY BITTY 出品的UI分析工具,可以直观地查看App的UI布局.
破解地址
下载安装完成之后,还需要在终端输入,再打开软件即可
$ sudo spctl --master-disable
要查看别人App的布局,还需要做以下配置:
1.安装RevealLoader
在Cydia中搜索并安装RevealLoader,然后查看iOS上的"/Library/"目录下有没有一个名为"RHRevealLoader"的文件夹,如果没有,则需要手动创建.
root# mkdir /Library/RHRevealLoader
2.使用Cydia安装两个软件:OpenSSH和CydiaSubstrate
(1)SSH是一种可以保证用户加密远程登录到系统的协议,OpenSSH是一个通过SSH接入iOS的连接传输工具。
如果在安装OpenSSH后没有修改密码,则默认密码为alphine,为了降低信息泄露的风险还是重设密码保险.
查看IP地址的途径,如下图第一个就是IP地址
iOS上的用户有2个,分别是root和mobile,修改密码命令如下:
ssh root@iOS设备IP地址
root# passwd root
Changing password for root.
New password:
Retype new password:
root# passwd mobile
Changing password for mobile.
New password:
Retype new password:
(2)CydiaSubstrate是大部分tweak正常工作的基础,只有安装了CydiaSubstrate之后才会有MobileSubstrate目录(此目录必须存在才可以继续下面的步骤)。
MobileSubstrate是一个公共库,可以用来动态替换内存中的代码、数据等。基本上越狱机下比较有用的系统工具都需要这个库,是Cydia同一个作者维护的,可以放心装。
3.打开mac上的Reveal,在标题栏"Help"选项下,选择"Show Reveal Library in Finder"子选项.然后把libReveal.dylib通过scp或者iFunBox等方式拷贝到刚才创建的RHRevealLoader目录下.
使用scp命令的步骤如下:
ssh root@iOS设备IP地址(回车输入yes,然后输入密码)
cd /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries
scp libReveal.dylib root@iOS设备IP地址:/Library/MobileSubstrate/DynamicLibraries/
4.将Mac上创建libReveal.plist文件,通过iFunBox拷贝到Library/MobileSubstrate/DynamicLibraries中。格式如下:
5.保证设备和Mac在同一局域网(Wi-Fi)内,也就是都选择同一个Wi-Fi,不必设置http代理,如果App已经运行,需在后台杀死进程重新打开,保持App在前台运行,然后在Mac中打开Reveal即可.
二.Hopper
破解地址
按照操作步骤进行破解
三.dyld_decache
dyld_decache:提取iOS系统内的二进制文件
从iOS 3.1开始,包括frameworks在内的许多库文件被放入了位于/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armx(dyld_shared_cache_armv7,dyld_shared_cache_armv7s,dyld_shared_cache_arm64)
,可使用dyld_decache将其中的二进制文件提取出来.
1.用iFunBox(不能用scp)从iOS中拷贝dyld_deache到OSX中,查找路径如下:
System/Library/Caches/com.apple.dyld/dyld_shared_cache_armx
2.下载提取工具dyld_decache
https://github.com/downloads/kennytm/Miscellaneous/dyld_decache[v0.1c].bz2
解压之后可将dyld_decache[v0.1c] 重命名为dyld_decache
3.赋予其执行权限
chmod +x dyld_decache(后面加上dyld_decache具体路径)
4.开始提取二进制文件(dyld_decache路径/二进制提取之后存放路径/armx路径)
/Users/yuhan/Documents/appReverse/dyld_decache -o /Users/yuhan/Documents/appReverse/binarys /Users/yuhan/Documents/appReverse/dyld_shared_cache_armv7s
四.dumpdecrypted砸壳工具
由于从AppStore下载的App是被苹果加密过的,class-dump无法作用于加密过的App,所以想要获取头文件,需要先解密App的可执行文件,俗称"砸壳",dumpdecrypted就是一款砸壳工具.
1.下载dump decrypted源码 依次执行下面的命令
1)cd本地存储路径
2)git clone git://github.com/stefanesser/dumpdecrypted/
3)下载完成后 cd dumpdecrypted的路径
4)make
make命令执行完毕,会在当前目录生成dumpdecrypted.dylib文件,用于砸壳
2.关闭所有应用 开启需要砸壳的App
bogon:~ yuhan$ ssh root@iOSIP地址
ximengde-iPhone:~ root# ps -e(打印所有进程,找到目标app)
cycript -p TargetApp // 附加该进程
(执行此命令之前要保证Cydia中安装了Cycript,否则会出现-sh: cycript: command not found)
cy# [[NSFileManager defaultManager ] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
利用cy语言找到目标app的沙盒路径
control+d退出cy#
3.开始砸壳
将dumpdecrypted.dylib拷贝到Documents目录下
bogon:~ yuhan$ scp /Users/yuhan/Documents/appReverse/dumpdecrypted/dumpdecrypted.dylib root@iOSIP:/var/mobile/Containers/Data/Application/3E9A4A3E-0191-48EA-BA15-D135D892C505/Documents/
ximengde-iPhone:/var/root mobile$ su mobile(为了避免在执行砸壳命令时出现killed:9的错误)
Password:
ximengde-iPhone:/var/root mobile$ cd
ximengde-iPhone:~ mobile$ cd /var/mobile/Containers/Data/Application/3E9A4A3E-0191-48EA-BA15-D135D892C505/Documents/
ximengde-iPhone:~/Containers/Data/Application/3E9A4A3E-0191-48EA-BA15-D135D892C505/Documents mobile$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/0E619483-4AC3-430E-AADB-AD2B164FF1B3/Eyepetizer.app/Eyepetizer
4.查看砸壳结果
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: @0x1000ccca8(from 0x1000cc000) = ca8
[+] Found encrypted data at address 00004000 of length 16744448 bytes - type 1.
[+] Opening /private/var/containers/Bundle/Application/0E619483-4AC3-430E-AADB-AD2B164FF1B3/Eyepetizer.app/Eyepetizer for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a plain MACH-O image
[+] Opening Eyepetizer.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 ca8
[+] Closing original file
[+] Closing dump file
ximengde-iPhone:~/Containers/Data/Application/3E9A4A3E-0191-48EA-BA15-D135D892C505/Documents mobile$ ls
5d441558f8bc24dcd9098fc926ca73d0 BNCServerRequestQueue Eyepetizer.decrypted WDJUsers.plist com.tumblr.TMDiskCache.26d0363b2698b43f37da588e8c0e0119
76a378e14109fdcebb0f4c40f0464293 Config QQApi.log backgroundresource.dat dumpdecrypted.dylib
BNCPreferences Configcmsinfo.plist TCSdkConfig.plist clicked_msgIds???file wdj_eyepetizer.sqlite
Eyepetizer.decrypted就是砸壳后我们需要的文件
5.将文件拷贝到电脑中
bogon:~ yuhan$ scp root@iOSIP:/var/mobile/Containers/Data/Application/3E9A4A3E-0191-48EA-BA15-D135D892C505/Documents/Eyepetizer.decrypted /Users/yuhan/Documents/appReverse/code
root@iOSIP's password:
Eyepetizer.decrypted 100% 20MB 3.9MB/s 00:05
把文件拷贝到OSX 用class-dump Hopper分析文件