iOS逆向工程使用dumpdecrypted工具给App脱壳
本篇以微信为例,给微信脱壳。"砸壳"在ios逆向工程中是经常做的一件事情,,因为从appstore直接下载安装的app是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。未砸壳的app是无法在class-dump、hopper等工具中使用的。所以我们要将app进行砸壳处理。在android开发中也存在app加壳的处理,比如什么360加固了,其实就是给app加一层壳。
本篇我们就以wechat(微信)为例,从appstore上下载微信并安装,然后使用dumpdecrypted工具(当然你也可以使用其他砸壳工具)进行砸壳处理。砸壳后会生成解密后的app文件,然后我们就可以使用class-dump和hopper处理解密后的文件了。废话少说,就开始今天的主题。
一、生成dumpdecrypted.dylib动态库
首先我们要生成“砸壳”用的动态库dumpdecrypted.dylib,我们“砸壳”时主要用到这个动态库。该动态库的源码在github上是开源的(github地址),要想得到dumpdecrypted.dylib这个动态库,只需要从github上下载代码,然后进行编译,生成dumpdecrypted.dylib即可。下方就是使用make命令对dumpdecrypted的源码进行编译。
进入到dumpdecrypted文件夹下,运行make命令即可。
编译完成后,dumpdecrypted文件夹中就会多一个dumpdecrypted.dylib动态库,该动态库就是稍后我们砸壳使用的工具。
二、“砸壳”前的准备工作
接下来就是要在越狱手机上寻找要“砸壳”的app路径了,首先使用ssh连接到你的越狱设备,然后在越狱设备中打开你要砸壳的app, 此处我们以微信为例。从aippstore中下载安装的应用都会位于/var/mobile/applications中,下方的截图就是我手机上从appstore中下载的应用的安装路径。当然,下方是使用iexplore工具进行查看的,下方内容中,文件的拷贝我们都会用到iexplorer,当然你也可以使用之前提到过的ifunbox。
从上方的截图中要找出微信所在的目录是非常困难的,应用少的话你可以点开一个个的看。向上面这种应用比较多的情况的话,一个个文件夹点开是不太现实的,所以我们得通过另一种方式来定位“微信”app所在的目录。
这种快捷定位“微信”所在目录的方式就是“查看应用进程”的方式,首先你需要打开微信,然后运行下方的命令,来查看文件目录/var/mobile/目录下的所有正在运行的app进行,具体要用到的命令如下所示:
ps -e | grep /var/mobile
上方截图就是上述命令运行后所输出的内容,从上述内容中我们轻而易举的就可以找到“wechat”所在目录。我们可以通过iexplore打开该目录,更直观的来看一下微信app所在的目录,具体内容如下所示. 上面这个进程的绝对路径我们要记下来,因为后边砸壳的时候会使用到该路径。
接下来我们就要使用cycript工具来寻找wechat的document路径了,如果你的越狱设备上没有安装cycript工具的话,那么请前往cydia下载安装cycript工具。下方步骤就是使用cycript工具来查看附加进程的document目录的步骤。
1.使用cycript注入目标进程中
cycript -p wechat
上述命令执行完毕后,会进入到cycript模式中,如下所示。当然,在ios9.2.1上的越狱设备执行上述命令会报错,可能是目前cycript这个强大的工具还不支持ios9.2吧。所以我是在ios7.2上做的该实验。
2.获取该进程的document目录
[[nsfilemanager defaultmanager] urlsfordirectory:nsdocumentdirectory indomans:nsuserdomainmask][0]
输入上述内容,然后点击回车,就会输出wechat进程的document目录,输出结果如下所示。下方的红色部分就是wechat的document目录的绝对路径。
找到上述目录后,使用iexplore进入到该目录下,将上面我们生成的dumpdecripted.dylib动态库拷贝到该目录下即可,如下所示:
三、开始砸壳
上述“砸壳”的准备工作就绪后,接下来我们就要开始砸壳了。进入到wechat的document目录中,执行下方的命令进行砸壳。
dyld_insert_libraries=dumpdecrypted.dylib /var/mobile/applications/3dc16044-e5bb-4038-9e31-cfe3c7134a7b/wechat.app/wechat
在上述命令中,dyld_insert_libraries后边这个动态库就是我们上面生成的动态库,后边这个路径就是wechat执行文件的绝对路径,运行上述命令后,就开始砸壳了,下方截图就是我们砸壳的过程。
砸壳过程完成后,会在我们的document目录下生成一个wechat.decrypted文件,如下截图所示。该文件就是脱壳后的文件,我们可以将该文件拷贝到我们的mac上,以备使用。
四、导出脱壳app的头文件
将上面生成的wechat.decrypted脱壳文件拷贝的我们的mac上,接下来就是我们class-dump出厂的时刻了。接下来我们要使用class-dump导出该脱壳文件的所有头文件。具体步骤如下所示。
1.前奏
wechat.decrypted文件后,我执行了下方的命令来导出其头文件,下方的命令在没有加壳的app中是好使的,直接就可以导出相应app的头文件,如下所示:
class-dump -s -s -h wechat.decrypted -o ./headers
执行上述命令结束后是下方这个结果, 并没有导出想要的头文件,google了一下,是arm的架构不对,所以就没导出成功。
2.开始导出头文件
从上述截图中我们可看到,headers文件夹中并没有生成相应的头文件。是我们解密的文件有问题吗?于是乎,我使用了hopper打开了解密后的文件,是可以正常打开的,于是乎又google一下,原来是我们在导出头文件时指定的arm架构不正确,于是乎使用class-dump的--arch配置项来指定了armv7的架构,这样的话,头文件就导出成功了。
class-dump --arch armv7 -s -s -h wechat.decrypted -o ./headers
操作步骤和结果如下图所示, 导出成功,你可以慢慢的分析了。
五、hopper
上面使用了class-dump来操作我们脱壳的文件,木有问题。那么接下来来看一下在hopper上的效果如何,下方就是使用hopper打开“脱壳”文件的效果。当然,你也可以使用ida pro来查看,当然此处我们使用的是hopper。从下方的截图来看,结果是perfect的。
以上所述是小编给大家介绍的ios逆向工程使用dumpdecrypted工具给app脱壳,希望对大家有所帮助