iOS逆向工程:OSX工具集的安装配置(二)

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安装两个软件:OpenSSHCydiaSubstrate
(1)SSH是一种可以保证用户加密远程登录到系统的协议,OpenSSH是一个通过SSH接入iOS的连接传输工具。
如果在安装OpenSSH后没有修改密码,则默认密码为alphine,为了降低信息泄露的风险还是重设密码保险.

查看IP地址的途径,如下图第一个就是IP地址

iOS逆向工程:OSX工具集的安装配置(二)_第1张图片
查看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中。格式如下:

iOS逆向工程:OSX工具集的安装配置(二)_第2张图片
libReveal.plist

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分析文件

你可能感兴趣的:(iOS逆向工程:OSX工具集的安装配置(二))