1.砸壳前的准备
一台越狱iphone📱,根据以往经验,测试用的手机永远不要紧跟潮流升级系统,在越狱手机中打开Cydia,搜索并分别安装OpenSSH,Cycript
下载dumpdecrypted,地址在这https://github.com/stefanesser/dumpdecrypted/archive/master.zip
下载class_dump,地址也在这
http://stevenygard.com/download/class-dump-3.5.tar.gz
下载hopper,地址同样在这
https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM
至此,基本的准备已达成,可继续以下操作步骤
2.砸壳工具dumpdecrypted的使用
设置Makefile中的SDK字段和越狱设备系统版本一致,打开你下载dumpdecrypted的文件夹,接着打开Makefile文件(之前误以为双击打开就行,结果一直默认黑盒子打开,查看不了内容,原因是工具使用错了,那么就搜索相关打开工具吧,可以使用的工具有多种,这里提供一种打开免费工具,sublime,自行下载,打开Makefile是如下内容)
在苹果终端输入
xcrun --sdk iphoneos --show-sdk-path
会显示出当前xcode的sdk版本
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk
可见我当前默认的使用版本是iPhondeOS9.0版本,这个跟我的手机系统版本刚好符合,则Makefile中的SDK=‘xcrun --sdk iphoneos --show-sdk-path’不用作修改,但比方说你的手机是8.4的版本,那么此处xcode的sdk版本就应当是xcode6.4(iPhoneOS8.4),老旧xcode版本可在下方链接下载。
注意,如果你电脑原本安装xcode,保存两者时,第二个xcode会显示为xcode 2,此时在mac终端输入xcrun --sdk iphoneos --show-sdk-path,显示的对应iPhoneOS版本依旧会跟手机的版本不符,可将原有xcode名称先修改为xcode3(3为任意数字,只是为了跟新下载的版本区分开名字),再将新下载的xcode 2重命名为xcode(一旦造好锤子🔨,或者砸壳完毕之后可将文件名修改过来,避免影响mac上相关程序的使用,切记切记)
老旧xcode版本的下载
https://developer.apple.com/downloads/index.action
3.造锤子🔨
完成上述操作之后,在mac终端cd进你下载dumpdecrypted的路径,紧接着输入make指令,可看到在该文件目录下会多处dumpdecrypted.dylib和dumpdecrypted.o两个文件,dumpdecrypted.dylib就是我们要造的锤子🔨,锤子在下面会用到,拷贝到桌面备份(提示:做好的锤子🔨是可以重复使用的,所以可以拷贝一份放好,不用每次都造锤子🔨)
4.通过mac终端控制手机📱
先前已经在越狱手机安装了openSSH,现在可通过mac来控制手机📱,需要确保的是mac跟手机处于同一个网段,并且需要知道手机的IP地址是多少,查看十分简单,在手机连接wifi处点击蓝色感叹号,进入即可看见对应IP地址(新手教程略啰嗦)
接下来在终端输入ssh root@你的手机IP地址,在弹出来需要输入password时输入alpine默认密码(T.T,新手踩过的一个坑,一直以为是我mac的密码,折腾了许久,贱笑了各位),出现如下图情况即为连接手机📱成功。
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ ssh root@192.168.2.11
root@192.168.2.11's password:
zhaoxianshengde-iPhone:~
5.寻找反编译app文件路径
ok,接着在越狱的手机上找到你要反编译的app的文件路径,为了避免影响,最好只运行你要砸壳的app,在mac终端输入ps -e,终端会显示运行app的文件路径(为方便找到你想找的目录,也可将ps -e指令,替换成ps -e | grep var这样终端显示的路径会更少,可自行测试相关指令的使用)
zhaoxianshengde-iPhone:~ root# ps -e | grep var
365 ?? 0:01.10 /usr/libexec/pkd -d/var/db/PlugInKit-Annotations
506 ?? 0:00.32 /private/var/db/stash/_.yogkf3/Applications/ServerDocuments.app/PlugIns/ServerFileProvider.appex/ServerFileProvider
783 ?? 0:00.38 /private/var/db/stash/_.yogkf3/Applications/MobileCal.app/PlugIns/CalendarWidget.appex/CalendarWidget
785 ?? 0:17.48 /private/var/db/stash/_.yogkf3/Applications/Stocks.app/PlugIns/StocksWidget.appex/StocksWidget
1342 ?? 1:38.49 /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx
1918 ttys000 0:00.00 grep var
zhaoxianshengde-iPhone:~ root# cycript -p idx
我砸壳的app叫爱定客,所以终端中显示的/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx就是我要找的路径
6.接着用Cycript找出你看不爽的app的Documents目录路径
zhaoxianshengde-iPhone:~ root# cycript -p 1163
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/"
cy#
'/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/'即为所得,没有多余的“//”
7.将步骤3.造锤子🔨中的锤子放入到上述获得的Documents目录下
(执行的指令为“scp 锤子路径 root@你的ip地址:反编译app路径”,注意中间的空格,为防止各位尝试出错,可直接复制后做相应替换即可,password依旧是alpine)
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp /Users/zhaozhenbo/Desktop/逆向学习/砸壳工具/dumpdecrypted-master/dumpdecrypted.dylib root@192.168.3.107:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/
root@192.168.3.107's password:
dumpdecrypted.dylib 100% 193KB 192.9KB/s 00:00
8.砸~壳
来到最激动人心的时候了,锤子已经放好,那么就开始砸吧(先cd到Documents目录下)
zhaoxianshengde-iPhone:~ root# cd /var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/
zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx
mach-o decryption dumper
DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
[+] detected 32bit ARM binary in memory.
[+] offset to cryptid found: @0x5ea08(from 0x5e000) = a08
[+] Found encrypted data at address 00004000 of length 21364736 bytes - type 1.
[+] Opening /private/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a FAT image - searching for right architecture
[+] Correct arch is at offset 16384 in the file
[+] Opening idx.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 4a08
[+] Closing original file
[+] Closing dump file
找到二进制文件
zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# ls
TCSdkConfig.plist dumpdecrypted.dylib guide.zip loading.html
cache error.html idx.decrypted lsqTempDir
com.bugrpt.data guide info web
以.decrypted结尾的文件即为我们需要找的二进制文件,上图中idx.decrypted就是我砸壳完需要反编译的二进制文件。执行到这一步,感动哭,一开始没什么经验,做砸壳到这的时候确实踩了不少的坑。
9.复制二进制文件
将二进制文件拷贝至mac桌面,利用class_dump和hopper对二进制文件进行反编译,
(注意:自ios8.3版本开始,苹果公司对应用文件共享进行了限制,简而言之就是旧版本的iTools等查看文件工具都看不了document文件下的内容,这很悲催,二进制文件拉不过来,就没有办法进行反编译工作了)
这里还是挺折腾人的,没有查看工具,该怎么复制呢?针对这个问题,我在简书等进行过相关的搜索,但一无所获,大家都是用工具复制的,应该是他们使用的测试机系统没有超过8.3,所以才没有我这种烦恼吧。我使用的查看工具有iTools、pp助手、iExplorer、iFunBox等,但都没法查看到Docunments文件夹。后来终于找到了解决方法,思考通过mac终端直接将二进制文件从手机复制至mac,但应该是需要相关的ssh指令才行,我对这一块并不是很熟悉,所以百度了一下“如何在linux系统下使用ssh进行拷贝文件?”
good,黄天不负有心人,在终端敲一下试下,看到正在复制。。。泪流满面,折腾了我挺久T.T
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp root@192.168.2.11:/var/mobile/Containers/Data/Application/1D0B6021-1DE0-4FF5-9515-38B769287E36/Documents/idx.decrypted /Users/zhaozhenbo/Desktop/idx/idd.decrypted
root@192.168.2.11's password:
idx.decrypted 100% 50MB 2.5MB/s 00:20
zhaozhenbodeMacBook-Pro:~ zhaozhenbo$
10.反编译
二进制文件成功拿到,那么反编译就不是问题了,借助下面的两个强大工具,可以轻松获取整个app的h头文件
i.探索class_dump工具的使用,简单点说可以反编译出项目中h文件声明方法,用法十分简便,下面我举个栗子🌰:
http://www.bubuko.com/infodetail-258073.html
ii.探索hopper工具的使用,反编译二进制文件,呈现的是一坨汇编代码,点击工具右上角按钮,可以大致查看文件的内容,用法简单,请自行尝试,下载地址:
https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM
最后,在砸壳的过程中,借鉴了优秀文章的经验,如(简书上作者蓝月空谷写的
如果文章有任何不足之处,欢迎补充纠正