我们知道AppStore的APP都是经过Store加密的,我们想要对其进行一些逆向破解,必须先砸掉这层壳,主要介绍一下怎样用dumpdecrypted砸壳。
- 下载并编译
从这里下载压缩包,然后解压,会得到 dumpdecrypted-master 文件夹,用终端命令行进入该文件夹执行make命令进行编译:
这里有些坑,但是我没踩到,如果遇到编译过程中有问题的童鞋,可以看看这个他踩的坑。 - 准备
接下来我们要找到要砸的App,然后把动态库加进去,为我们最后砸壳做好充分准备。这里我以微信示例。
首先我们要知道两个路径:
一个是微信App可执行文件的存放路径,否则我们砸什么呢。
一个是微信App的沙盒路径,我们需要把动态库放置到沙盒路径下才能保证动态库能正常运行。
-
寻找可执行文件路径
首先把你的微信先跑起来,切到前台
然后用ssh登陆到你的手机上
ssh root@yourPhoneIP
执行ps命令,查看当前跑着的进程(如果你的iphone执行不了ps命令,去cydia安装adv-cmds软件包就好了)
ps -e
然后在众多进程中找到我们要找的微信,显示的就是他的可执行文件路径,记下来
用Cycript寻找沙盒
Cycript不多介绍,第一次用的话可以从这里看一下基本用法。
执行命令行
cycript -p WeChat
cy#[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/"
就找到了微信的沙盒目录。记录下来。把动态库放到沙盒Document目录下
现在dumpdecrypted.dylib还在我们的电脑上,我们需要把他移到微信沙盒Document下。
新打开一个终端并且cd到dumpdecrypted.dylib所在的目录下,执行命令行:
scp dumpdecrypted.dylib root@yourPhoneIP:/var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/dumpdecrypted.dylib
后面的路径就是你之前查到的沙盒路径,别无脑把我这里的复制上去了。
当然你也可以用PP助手这些工具软件直接把dumpdecrypted.dylib拖到微信的沙盒里。
-
砸砸砸
回到之前ssh在你iphone上的终端,先"ctrl + D"退出cycript, cd到微信的沙盒Document下:
cd /var/mobile/Containers/Data/Application/CAD8A685-F1F3-42D8-AB7E-FF18767D7A30/Documents/
执行砸壳,目标路径就是之前查到的微信可执行文件路径:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/5F7F9D80-7EF9-4DEE-82B1-51D028E2752B/WeChat.app/WeChat
当看到 WeChat.decrypted ,大功告成!
之后随便用PP助手之类的工具,直接从微信沙盒把WeChat.decrypted拿出来,就可以用于之后的class-dump之类的了。
class-dump -H 需要导出的框架路径 -o 导出的头文件存放路径
Tip:关于 dumpdecrypted.dylib 要放在沙盒Document目录下。 如果不放在沙盒下执行,会直接报错如下:
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
来自http://bbs.iosre.com/的一段话:我们都知道,StoreApp对沙盒以外的绝大多数目录没有写权限。dumpdecrypted.dylib要写一个decrypted文件,但它是运行在StoreApp中的,与StoreApp的权限相同,那么它的写操作就必须发生在StoreApp拥有写权限的路径下才能成功。StoreApp一定是能写入其Documents目录的,因此我们在Documents目录下使用dumpdecrypted.dylib时,保证它能在当前目录下写一个decrypted文件,这就是把dumpdecrypted.dylib拷贝到Documents目录下操作的原因。