iOS逆向之脱壳

一、加壳和脱壳

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录一,加壳二,脱壳三,工具四,验证 一,加壳 1,介绍 App Store会对ipa包中的可执行文件进行加壳操作...
    码小菜阅读 2,977评论 0 5
  • 1、 加壳; 2、 砸壳; 3、IOS逆向常见的砸壳工具; 1、 加壳; 1.1 概念:利用特殊的算法,对...
    一杯开水阅读 866评论 1 3
  • 加壳脱壳基本概念 使用dumpdecrypted工具进行iOSApp脱壳 一 加壳脱壳基本概念 一 什么是加壳? ...
    当前明月阅读 4,827评论 15 8
  • 加壳 什么是加壳?利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的 脱壳 什...
    Rathen阅读 552评论 0 0
  • 苹果手机的应用市场分为App Store和非App Store(PP助手、爱思助手)。 我们平时编写的代码最后发布...
    fanglaoda阅读 1,431评论 0 1

友情链接更多精彩内容