iOS逆向开发-砸壳

我们知道AppStore的APP都是经过Store加密的,我们想要对其进行一些逆向破解,必须先砸掉这层壳,主要介绍一下怎样用dumpdecrypted砸壳。

  1. 下载并编译
    从这里下载压缩包,然后解压,会得到 dumpdecrypted-master 文件夹,用终端命令行进入该文件夹执行make命令进行编译:
    iOS逆向开发-砸壳_第1张图片
    编译
    然后会得到我们需要的 dumpdecrypted.dylib 库文件。
    这里有些坑,但是我没踩到,如果遇到编译过程中有问题的童鞋,可以看看这个他踩的坑。
  2. 准备
    接下来我们要找到要砸的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拖到微信的沙盒里。

  1. 砸砸砸
    回到之前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 ,大功告成!


    iOS逆向开发-砸壳_第2张图片
    砸壳

    之后随便用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目录下操作的原因。

你可能感兴趣的:(iOS逆向开发-砸壳)