美文网首页
iOS逆向工程之App脱壳

iOS逆向工程之App脱壳

作者: Jessica124 | 来源:发表于2016-12-09 14:31 被阅读1123次

    "砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。
    本文以微信为例。

    一、生成dumpdecrypted.dylib动态库

    首先我们要生成“砸壳”用的动态库dumpdecrypted.dylib,我们“砸壳”时主要用到这个动态库。该动态库的源码在github上是开源的,要想得到dumpdecrypted.dylib这个动态库,只需要从github上下载代码,然后进行编译,生成dumpdecrypted.dylib即可。
    使用make命令对dumpdecrypted的源码进行编译。
    编译完成后,dumpdecrypted文件夹中就会多一个dumpdecrypted.dylib动态库,该动态库就是稍后我们砸壳使用的工具。

    二、“砸壳”前的准备工作

    1. 用iExplorer打开手机文件,将dumpdecrypted.dylib拖到微信Document中。


      docment.png

      2.获取到微信Document路径。
      很多文章都说用cycript获取,但是我发现用find也能方便取到。

    find /var/mobile/Containers/Data/Application/ -name dumpdecrypted.dylib
    

    将这个路径存好(砸壳时用)
    前提是只有这个应用有dumpdecrypted.dylib,否则分辨不出哪个是微信的。。。

    1. 获取到应用名称
      手机打开微信,ssh连到手机中,用以下命令获取微信应用名称
    ps -e | grep /var/mobile
    

    如果找不到ps命令,在手机Cydia中搜索adv-cmds 安装。

    adv-cmds #finger,fingerd,last,lsvfs,md,ps 
    basic-cmds #msg,uudecode,uuencode,write 
    bc #计算器工具 
    cURL #就是curl了 
    Diff Utilities #diff 
    diskdev-cmds #mount,quota,fsck等,忘记是否默认安装的 
    file #常用的file命令 
    file-cmds #chflags,compress 
    Find Utilites #find 
    Gawk #awk 
    grep #grep 
    inetutils #ftp,inetd,ping,telnet… 
    less #less 
    

    结果如图,名称WeChat(砸壳时用)

    WeChat.png

    三、开始砸壳

    上述“砸壳”的准备工作就绪后,接下来我们就要开始砸壳了。进入到WeChat的Document目录中,执行下方的命令进行砸壳。

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/5897759F-D179-4194-AAF1-E0726F7DD147/WeChat.app/WeChat
    

    在上述命令中,DYLD_INSERT_LIBRARIES后边这个动态库就是我们上面生成的动态库,后边这个路径就是WeChat执行文件的绝对路径,运行上述命令后,就开始砸壳了,下方截图就是我们砸壳的过程。


    zake.png

    砸壳过程完成后,会在我们的Document目录下生成一个WeChat.decrypted文件,如下截图所示。该文件就是脱壳后的文件,我们可以将该文件拷贝到我们的Mac上,以备使用。
    拷贝可参考

    http://www.jianshu.com/p/6a5c8c685d2c

    四、导出脱壳App的头文件

    将上面生成的WeChat.decrypted脱壳文件拷贝的我们的Mac上,接下来就是我们class-dump出场的时刻了。接下来我们要使用class-dump导出该脱壳文件的所有头文件。具体步骤如下所示。

    1. 导出头文件
    class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers
    

    就不贴图了。。。
    ps : 后来砸了一个自己的项目,swift和oc混编的,发现这步不成功:

    Error: Cannot find offset for address 0xc8002a76 in stringAtAddress:
    

    度娘说是class-dump解不出swift

    五、Hopper

    上面使用了class-dump来操作我们脱壳的文件,木有问题。那么接下来来看一下在Hopper上的效果如何,下方就是使用Hopper打开“脱壳”文件的效果,汇编语言的,慢慢研究吧。。。


    hopper.png

    最后,非常感谢🙏青玉伏案,这篇文章也拷贝了不少他的文章,链接附在了推荐阅读中。

    相关文章

      网友评论

          本文标题:iOS逆向工程之App脱壳

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