逆向开发

逆向第二天-dumpdecryprted

2017-04-07  本文已影响120人  无题007

前言

在上一篇介绍class-dump中,我们提到了,从App Store中下载的App(以下简称StoreApp)是被苹果加密过的,可执行文件被套上了一层保护壳,而class-dump无法作用于加密过的APP。在这样的情况下,想要获取头文件,需要先解密App的可执行文件,俗称“砸壳”。dumpdecrypted就是由越狱社区的知名人士Stefan Esser(@i0nlc)出品的一款咋壳工具,被越狱社区广泛运用在iOS逆向工程研究中。

安装

dump decrypted在GitHub上开源了,得自行编译才能使用。

git clone git://github.com/stefanesser/dumpdecrypted/

砸壳

1,ssh root@192.168.xxx.xxx (ip地址是手机的IP地址,在设置-无线局域网中查看)
2, ps -e (查看手机上的进程)
3, cycript -p (附加进程)

在iOS 8中,StoreAPP全部位于/var/mobile/Containers/下,其中可执行文件位于/var/mobile/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/TargetApp.app下。我们可以关掉手机上的其他应用,只打开目标应用,再执行ps -e命令 在终端下搜索“/var/mobile/Containers/Bundle/Application/”就可以快速找到了。
然后再利用cycript -p TargetApp找到TargetApp的Documents目录路径存起来。

scp ~/dumpdecrypted.dylib root@手机ip:/var/mobile/Containers/Data/Application/XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/Documents
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/
Application/XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/xxx.app/xxxx

当前目录下会生成TargetApp.decrypted,即砸壳后的文件。把该文件就可以进行class-dump的操作了。

以上就是砸壳的过程,不难吧。在上面的过程中,有人会问 为什么要把dumpdecrypted.dylib拷贝到Documents目录下操作呢?在一开始我也有这样的疑问,就去搜索了一下:

我们都知道,StoreApp 对沙盒以外的绝大多数目录没有写权限。dumpdecrypted.dylib要写一个decrypted文件,但它是运行在StoreApp中的,与StoreApp的权限相同,那么它的写操作就必须发生在StoreApp拥有写权限的路径下才能成功。StoreApp一定是能写入其Documents目录的,因此在Documents目录下使用dumpdecrypted.dylib时,保证它能在当前目录下写一个decrypted文件,这就是把dumpdecrypted.dylib拷贝到Documents目录下的操作原因。

要是不放入Documents下 就会出现这样的错误:

dyld: could not load inserted library'dumpdecrypted.dylib' because no suitable image found. Did find:
dumpdecrypted.dylib: stat() failed with errno=1 Trace/BPT trap: 5

这里的errno的值是1,即“Operation not permitted”,砸壳失败。

参考资料:

书籍:iOS应用逆向工程(第2版)
网站:http://bbs.iosre.com/

上一篇下一篇

猜你喜欢

热点阅读