美文网首页
iOS逆向之脱壳

iOS逆向之脱壳

作者: 张聪_2048 | 来源:发表于2021-03-20 11:24 被阅读0次

    一、加壳和脱壳

    1、加壳

    利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的。iOS端App在上线之前会有苹果商店进行FairPlayDRM数字版权加密保护,我们称之为“加壳”。

    图1:加壳.png

    2、脱壳

    要对App Store分发的iOS App进行分析,我们需要先对App进行解密,我们称之为“脱壳”,有些人也称为“砸壳”。脱壳之后的二进制文件就是原始的、未加密的二进制文件。 对于macOS上的App,苹果官方是不会对其进行加壳的。所以分析macOS App不需要执行脱壳操作。脱壳主要有2种方法:硬脱壳、动态脱壳

    图2:脱壳.png

    二、判断是否加壳

    1、使用MachOView检测

    使用MachOView打开目标Mach-O文件。展开“Load Commands”节点,选择“LC_ENCRYPTION_INFO_64”节点,右边的crypt ID即代表了是否加密。为0则代表未加密(没有壳或已脱壳),为1则代表已加密(已加壳)。

    图3:MachOView检测是否加壳.png

    2、使用otool检测

    otool是Xcode自带的命令行工具,安装了Xcode的macOS系统不需要额外安装otool。 使用otool的如下命令可以检测App是否被加壳。如下:

    otool -l mach-O文件 | grep crypt 
    
    图4:otool检测是否加壳.png

    三、Clutch 脱壳

    图5:下载安装Clutch.png
    • 3、如果在iPhone上执行Clutch指令,权限不够,赋予“可执行的权限” chomd +x /usr/bin/Clutch。如上图

    • 4、列出已安装的APP:Clutch -i。如下图

    • 5、输入APP序号或者Bundle Id进行脱壳操作:Clutch -d APP序号或BundleId。 注意:因为是动态脱壳,使用Clutch脱壳前需要先启动目标App。如下图

    • 6、脱壳成功后会生成一个ipa文件。之后就可以在对应的手机文件目录下获取脱壳后的ipa文件了。/private/var/mobile/Documents/Dumped/com.ss.iphone.ugc.Aweme-iOS8.0-(Clutch-2.0.4)-2.ipa 如下图

    图6:Clutch的使用.png

    四、dumpdecrypted 脱壳

    1、下载安装dumpdecrypted

    dumpdecrpyted是开源的,需要先进行编译,然后再将编译好的dylib复制到越狱iPhone上

    • 1)下载源码 https://github.com/stefanesser/dumpdecrypted
    • 2)目录下执行make命令执行编译操作。
    • 3)编译成功后目录下会多出一个dylib动态库文件。
    • 4)将dylib复制到越狱设备的/var/root目录下(以root用户身份登录)
    图7:dumpdecrypted下载安装.png

    2、使用dumpdecrypted

    终端进入dylib所在的目录。使用环境变量DYLD_INSERT_LIBRARIES将动态库dumpdecrpyted注入到需要脱壳的目标mach-O文件中。命令格式DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径.可执行文件路径 可以通过 ps -A查看获得。
    例如命令:

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/EE46F01C-AECF-4894-938C-7588A6543397/QQNews.app/QQNews
    

    执行成功后目录下会多出一个xxx.decrypted文件。该文件就是脱壳后的可执行文件。

    图8:使用dumpdecrypted.png

    3、可能出现的问题

    1)dyld: Symbol not found: ___chkstk_darwin

    原因是Xcode SDK 版本要与越狱手机 iOS SDK 版本一致。此时我们需要下载一个老版本的Xcode9者Xcode10。然后打开终端执行如下命令sudo xcode-select -s /Users/xxx/Desktop/Xcode_9.4.1.app/Contents/Developer。然后cd到dumpdecrypted所在目录,删除原来生成的 dumpdecrypted.dylibdumpdecrypted.o文件,然后执行make命令

    问题详情请转阅:https://www.jianshu.com/p/06474e84166c

    2)dyld:could not load inserted library 'dumpdecrypted.dylib' because no suitable image found.
    • 原因:对dylib所在的文件夹权限不够
    • 解决方案:将dylib放在用户所在文件夹,比如 :如果是root用户,请将dylib放在/var/root目录。如果是mobile用户,请将dylib放在/var/mobile目录

    参考链接:https://cloud.tencent.com/developer/article/1764018

    相关文章

      网友评论

          本文标题:iOS逆向之脱壳

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