iOS逆向之脱壳

2021-03-20  本文已影响0人  张聪_2048

一、加壳和脱壳

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 图6:Clutch的使用.png

四、dumpdecrypted 脱壳

1、下载安装dumpdecrypted

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

图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.

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

上一篇下一篇

猜你喜欢

热点阅读