最近在学习iOS逆向,在砸壳这个环节查看了很多资料写的各有不同最终还是成功了,但是过程相对曲折,这里记录分享一下自己砸壳的过程希望往后面可以更好的帮助大家。
> 这里我要说一下砸壳只能在越狱手机上进行如果没有越狱设备的话是不行的。
1.下载dumpdecrypted
[dumpdecrypted源码下载地址](https://link.jianshu.com?t=https://github.com/stefanesser/dumpdecrypted/archive/master.zip)
下载之后放在哪里看你个人喜好。
2.设置Makefile中的SDK字段和设备上的一致
> 在有些教程里是没有说设置SDK保持一致的。不设置能不能成功我也没有尝试过,不过设置了是一定可以的。
打开下载的dumpdecrypted文件夹里面的Makefile(我用的是sublime)
Makefile部分内容
我们看第三行是SDK,复制sdk后面的内容
xcrun --sdk iphoneos --show-sdk-path
打开终端并输入上面命令
本地默认SDK路径
可以看到我的默认的是9.3的我的xcode版本是7.3的xcode。我的设备是iOS8.3而现在默认的为9.3是不一样的所以我们找到对应版本的路径自己设置一下,如果没有的话就去这里下载旧版本的xcode
旧版xcode下载地址
下载安装好旧版本xcode之后在xcode目录下
> /Applications/Xcode6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
> 在这个目录下找到我们需要的sdk替换默认的
SDK修改之后
3.修改Makefile中的GCC_UNIVERSAL字段和dumpdecrypted.c
如果是7.0以下的设备我们还需要改些东西,我们要将上图的第二行修改为
GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s
还要将dumpdecrypted文件夹里的dumpdecrypted.c文件的第76行
if (lc->cmd == LC_ENCRYPTION_INFO || lc->cmd == LC_ENCRYPTION_INFO_64)
改为
if(lc->cmd == LC_ENCRYPTION_INFO)
4.生成dumpdecrypted.dylib
文件
然后我们在终端cd到dumpdecrypted目录下,在终端执行命令
&make
完成后dumpdecrypted.dylib
文件出现在当前目录下,这个就是我们砸壳用的锤头。
5.将dumpdecrypted.dylib
拷贝到iOS设备上
你可以使用iFunBox,iFile这些图形界面来操作,相对来说我还是习惯使用命令行。
我们要把“锤头”拷贝到Documents目录下。
我们先来定位待砸壳app的可执行文件
设备上运行待砸壳app
,最好只运行这一个,然后终端接入设备
$ssh root@设备ip
> 有关环境配置请自行查阅资料
接上设备后我们使用
ps -e
执行后如下:
ps -e 执行结果
这里只是列出部分结果,因为我们只运行了一个app所以我们找到
/var/mobile/Containers/Bundle/Application/ED230789-AE88-4AAF-9D08-7BB97C7E629D/MinecraftBox.app/MinecraftBox
/var/mobile/Containers/Bundle/Application/
这个字段就是目标
这里以口袋MC盒子
为例,可以看到MinecraftBox.app/MinecraftBox
就是我们要找的可执行文件
然后我们用Cycript找出要砸壳app的Documents目录路径,命令输入
cycript -p 要砸壳的app
输入之后结果如下:
结果
然后再输入:
[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
得到Documents路径:
将dumpdecrypted.dylib
拷贝到Documents路径下
$scp `dumpdecrypted.dylib路径` root@设备IP:`Documents路径`;
拷贝成功结果:
6.开始砸壳
DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable
实际操作:
> cd 到设备Documents下
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
运行后可以看到:
运行后结果
接着我们ls一下看看文件夹下的内容:
Documents文件夹下文件
我们可以看到除了app本身自带的内容和我们拷贝进去的dumpdecrypted.dylib文件里面还有个后缀为decrypted
文件,没错这个就是我们想要的。后缀为decrypted
的文件就是解密后的app的可执行文件,把它拿出来对它进行你想要的操作吧!