iOS逆向开发-砸壳

作者: 胡小夜大叔 | 来源:发表于2016-09-03 00:41 被阅读1105次

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

  1. 下载并编译
    从这里下载压缩包,然后解压,会得到 dumpdecrypted-master 文件夹,用终端命令行进入该文件夹执行make命令进行编译:
    编译 然后会得到我们需要的 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 ,大功告成!


    砸壳

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

相关文章

网友评论

  • _Vitality:大神 如果我的是iOS10.0.1系统的 这种方法也可以吗? 我看可执行文件的路径和你图中的不一样 按照你图中var/mobile.Container/xxx这种路径找不到可执行文件的
    胡小夜大叔:@_Vitality 当然可以了,这个你不用逆向用method swizzling 都可以。逆向了你就找到方法所在类%hook,然后在方法里加上你需要的逻辑就行
    _Vitality:你好,这个问题昨天解决了,不过我想向您请教一个问题,iOS中我能hook住项目中所有加载图片的方法吗?,比如 + (nullable instancetype)dataWithContentsOfURL:(NSURL *)url; 方法,我想在图片加载的时候,注入我的一些逻辑代码。谢谢
    胡小夜大叔:你按ps -e 给出的路径来走,以那个为准

本文标题:iOS逆向开发-砸壳

本文链接:https://www.haomeiwen.com/subject/tmfkettx.html