iOS应用逆向工程之初窥门径

作者: Vampire丶Lv | 来源:发表于2017-07-08 22:48 被阅读331次

    前言:

    最近刚刚接触逆向这一块,之前一直觉得是很高大上的一个方向,有点可望而不可即的样子。机缘巧合之下,开始了逆向之路,这两天一直在研究这一块,目前仅仅是砸了壳,得到了.h文件然后用hopper进行了简单的分析。所以这篇文章主要分享一下这几天遇到的坑以及解决方法,做一个记录同时也希望能帮助到跟我一样的人。OK,话不多说,开始。

    1、开发的准备工作

    • 首先需要一部iPhone或者iPad,iPhone的话版本要在10.2.0以下。我用的是全新的6s,初始版本是10.0.2,是可以越狱的。
    • 关于越狱的话,我是直接用的PP助手,傻瓜式的越狱方式啊哈哈。因为手机版本的问题,Mac版的PP越狱助手支持的版本在iOS 10以下,所以用的Windows版的pp助手,直接一键越狱。当然也可以用其他的软件,爱思助手等等。
    • 越狱过程很顺利越狱教程链接 照着教程来没有遇到问题。如果遇到问题可以到论坛上提问也可以在文章末提出来,可以一起交流。
    • 记得在Cydia里面添加一些必要的软件源和插件,软件源的话我只添加了PP助手的,插件的话,Openssh、Cycript、Apple File Conduit"2" 这几个,很多是内置了。

    2、开始逆向的第一步

    有些从 APPStore 商店下载安装的APP 默认都被苹果加了一层壳,加了壳后我们就无法使用dump导出头文件等其它操作,常用的砸壳工具有dumpdecrypted、Clutch、AppCrackr。
    这里我们使用dumpdecrypted砸壳。下载地址。通过make命令得到的dumpdecrypted.dylib就是我们的工具。

    此处有一个乌龟壳
    • “砸壳” :概括一下大概需要这几个步骤,
      1、手机或者iPad中打开需要砸壳的APP。
      2、SSH连接到手机,找到ipa包的位置并记录下来。
      3、Cycript附加到进程,找到App的Documents文件夹位置并记录下来。
      4、拷贝dumpdecrypted.dylib 到App的Documents 的目录。
      5、执行砸壳后,并拷贝出砸壳后的文件,然后完成。
    第一步:分别找到两个地址

    我这里用的是WiFi连接,使用上有一定的局限性,更好的方案是使用USB连接,推荐两篇文章,之后我也会用USB进行连接。debugserver和lldb进行调试iOS逆向工程之Hopper+LLDB调试第三方App .
    用到的命令:

    1, ssh root@10.10.245.208 (iP地址为设备的iP地址)
    2, ps -e (查看进程)
    3, cycript -p (附加进程)
    4, [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
    inDomains:NSUserDomainMask][0]

    演示图
    ** 注意: ** 如果直接用IP地址不可以的话,可以打开电脑的pp助手,在工具里面有一个“打开ssh通道”,手动打开之后,弹窗会提示将设备的IP地址端口映射到了本地,并且给出了提示如何进入root权限,比如,ssh root@localhost -p 2223,密码都是默认的alpine,输入后即可进入了。
    iOS逆向-用Cycript进行运行时分析(微信应用)iOS运行时工具-Cycript 。 这两篇文章可以了解一下Cycript。
    第二步:拷贝dumpdecrypted.dylib 到App的Documents的目录,需要用到的命令:
    scp ~/dumpdecrypted.dylib root@10.10.242.107:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents 利用Scp命令进行拷贝) 截图
    第三步 :砸壳

    进入到 Documents 目录下,然后进行砸壳:
    需要用到的命令:
    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/
    Application/BFED82A3-3238-4F41-B797-C1CB584CBE05/qqlive.app/qqlive


    演示3

    然后就会生成.decrypted的文件,这个就是砸壳后的文件。我们接下来就可以对他做操作了,比如导出头文件。
    ** 注意: ** 我在这里遇到问题了,一是无法用IP进行连接拷贝动态库,二是当我手动把动态库拷贝到documents/下面然后去进行砸壳的时候提示我,dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find:
    dumpdecrypted.dylib: required code signature missing for 'dumpdecrypted.dylib'
    错误。

    • 在这里我一并解答,关于拷贝的话,可以直接手动拷贝的,用PP助手、iExplorer、IFunBox都可以。那为什么砸壳还失败呢,那是因为这里编译出的动态库还需要做一个签名。步骤如下:
    • 列出可签名证书
      security find-identity -v -p codesigning
    • 为dumpecrypted.dylib签名
      codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib

    之后重新上传砸壳既可。

    第四步:拷贝出.decrypted文件并导出头文件

    输入命令:

    class-dump -S -s -H xxx.decrypted -o ./Headers (前面是脱壳文件的位置,后面是导出.h文件的目标文件夹)
    

    ** 如果, **没有成功,不要紧张,应该是导出头文件时指定的ARM架构不正确。所以,解决方法如下:
    armv6:iPhone、 iPhone2、iPhone3G、 第一代和第二代iPod Touch
    armv7: iPhone4、 iPhone4S
    armv7s: iPhone5、iPhone5C
    arm64: iPhone5S、iPhone6、iPhone6s

    使用class-dump的--arch配置项来指定了具体的架构,例如
    class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers

    • 操作步骤和结果如下图所示, 导出成功,你可以慢慢的分析了。


      演示4

    简单说一下Hopper disassembler

    下方就是使用Hopper打开“脱壳”文件的效果。当然,你也可以使用IDA Pro来查看,当然此处我们使用的是Hopper。从下方的截图来看,结果是OK的。


    演示5
    • 至此,分享告一段落。

    • 等接下来继续研究反编译。

    • 再有技术问题一起交流。

    • 在学习以及研究过程中,感谢在网络上无私分享的那些人,是你们在不经意间帮助了很多人,很开心能有这样的技术氛围~

    • 书籍的话在看《iOS应用逆向工程》第二版 ,受益匪浅

    • 博客的话也学习了几篇文章,iOS逆向工程之砸壳iOS逆向之脱壳

    • 写此篇分享是在高铁上,一边享受回家的愉悦一边汇总着知识点。如有不足敬请指出。

    • 希望能和志同道合之人多多交流,共同提高。

    相关文章

      网友评论

      本文标题:iOS应用逆向工程之初窥门径

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