FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • AndroidUI

  • Android第三方SDK

  • Android混淆

  • Android仓库

  • Android新闻

  • Android系统开发

  • Android源码

  • Android注解AOP

  • Android脚本

  • AndroidTv开发

  • AndroidNDK

  • Android音视频

  • Android热修复

  • Android性能优化

  • Android云游戏

  • Android插件化

  • iOSUI

  • iOS工具

  • iOS底层原理与应用

  • iOS组件化

  • iOS音视频

  • iOS疑难杂症

  • iOS之Swift

  • iOS之RxSwift

  • iOS开源项目

  • iOS逆向

    • Mac远程登录到iOS设备
    • Mach-O文件结构分析
    • iOS逆向 - 应用脱壳
      • 一、检测是否加壳
        • 1、使用 otool 检测
        • 2、使用 MachOView 检测
      • 二、脱壳
        • 1、CrackerXI
        • 2、Clutch
        • 3、dumpdecrypted
        • 4、frida-ios-dump
      • 三、取出脱壳文件
        • 1、爱思助手
        • 2、SCP
      • 四、验证
    • iOS逆向 - 运行时分析(一)class-dump
    • iOS逆向 - 运行时分析(二)Cycript
    • iOS逆向 - 运行时分析(三)Frida
  • Flutter开发

  • 移动端
  • iOS逆向
LinXunFeng
2022-02-19
目录

iOS逆向 - 应用脱壳

欢迎关注微信公众号:[FSA全栈行动 👋]

iOS 端 APP 在上线之前,会经过苹果商店进行 FairPlayDRM 数字版本加密保护,俗称 “加壳”,如果想对应用进行分析,就必须进行 “脱壳”,从而得到未加密的二进制文件

# 一、检测是否加壳

介绍两个常用的方式

# 1、使用 otool 检测

执行如下命令

otool -l Twitter | grep crypt

在得到的结果中,如果 cryptid 的值为 1,则说明已加壳,如果为 0 则说明未加壳

# 2、使用 MachOView 检测

使用 MachOView打开目标文件后,展开 Load Commands 找到 LC_ENCRYPTION_INFO_64,右侧可以看到 Crypt ID,同上,1 为已加壳,0 为未加壳

# 二、脱壳

以下罗列常用的脱壳工具,推荐度从上到下依次递减

# 1、CrackerXI

CrackerXI 的安装和使用都较为简单,是目前为止最为傻瓜式的脱壳工具

在 Cydia 中添加源地址 http://cydia.iphonecake.com/,添加完成后搜索 CrackerXI,找到后安装即可。

在进行脱壳前,需要进入 Settings 页面进行配置,配置如下图所示

切回 AppList 页面,点击需要脱壳的 App,在弹出的对话框中选择 YES,Full IPA 即可。

# 2、Clutch

https://github.com/KJCracks/Clutch

在 Release 页面找到最新版本的可执行文件,下载后改名为 Clutch,执行下方命令,将 Cluth 文件复制到 iOS 设备的 /usr/bin 目录下

scp -P 2222 -r ./Clutch root@localhost:/usr/bin/

登录到 iOS 设备,给 Cluth 文件添加执行权限

lxf-iPad:~ root# chmod +x /usr/bin/Clutch

至于怎么通过端口 2222 就可以从 Mac 上传输给 iOS 设备,以及如何登录到 iOS 设备,请查看本人的另一篇文章:Mac远程登录到iOS设备 (opens new window)

执行 Clutch 可查看帮助信息

lxf-iPad:~ root# Clutch
Usage: Clutch [OPTIONS]
-b --binary-dump <value> Only dump binary files from specified bundleID
-d --dump <value>        Dump specified bundleID into .ipa file
-i --print-installed     Print installed applications
   --clean               Clean /var/tmp/clutch directory
   --version             Display version and exit
-? --help                Display this help and exit
-n --no-color            Print with colors disabled

-i 参数可以打印从 AppStore 上下载安装的 App

lxf-iPad:~ root# Clutch -i
Installed apps:
1:   Twitter <com.atebits.Tweetie2>
...

-d 参数可以进行脱壳,这里以 Twitter 为例

Clutch -d com.atebits.Tweetie2

脱壳后的 ipa 文件会存放至 /private/var/mobile/Documents/Dumped/ 目录下

# 3、dumpdecrypted

https://github.com/stefanesser/dumpdecrypted

下载源码,在 dumpdecrypted 目录下执行 make 命令编译生成 dumpdecrypted.dylib

# 进入 dumpdecrypted 目录
cd xxx/dumpdecrypted

# 进行编译
make

编译完成后,目录下就有了 dumpdecrypted.dylib 文件

.
├── Makefile
├── README
├── dumpdecrypted.c
├── dumpdecrypted.dylib
└── dumpdecrypted.o

将 dumpdecrypted.dylib 文件复制 iOS 设备

scp -P 2222 -r ./dumpdecrypted.dylib root@localhost:/usr/bin/

使用 ps 命令查看目标文件的完整路径

lxf-iPad:~ root# ps -ax | grep Twitter
15153 ??         0:00.00 /var/containers/Bundle/Application/3A7C3480-C30B-40D7-A0A4-6C313E42B793/Twitter.app/Twitter
15161 ttys000    0:00.02 grep Twitter

使用 DYLD_INSERT_LIBRARIES 环境变量将 dumpdecrypted.dylib 注入就可以脱壳。

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/3A7C3480-C30B-40D7-A0A4-6C313E42B793/Twitter.app/Twitter

执行完成后会在将脱壳后的文件存放到当前目录下

# 4、frida-ios-dump

https://github.com/AloneMonkey/frida-ios-dump (opens new window)

下载源码后,安装其 python 脚本所需依赖包

pip install -r requirements.tx

-h 参数查看帮助

python dump.py -h

-l 参数查看本机已应用 App

./dump.py -l

# 三、取出脱壳文件

# 1、爱思助手

以 CrackerXI 为例,按此路径便可找到脱壳后的文件

/private/var/mobile/Documents/CrackerXI/

找到后选中目的文件,点击左上角的 导出 按钮,或者右击文件,在弹出的菜单中选中 导出 按钮即可。

# 2、SCP

scp -P 2222 -r root@localhost:/private/var/mobile/Documents/CrackerXI/Twitter_8.61_LXF.ipa ./

# 四、验证

正如文章开头所说的,使用 otool 或 MachOView 查看 cryptid 的值,为 0 即为脱壳成功。

#iOS#逆向
Mach-O文件结构分析
iOS逆向 - 运行时分析(一)class-dump

← Mach-O文件结构分析 iOS逆向 - 运行时分析(一)class-dump→

最近更新
01
Flutter - Xcode16 还原编译速度
04-05
02
AI - 免费的 Cursor 平替方案
03-30
03
Android - 2025年安卓真的闭源了吗
03-28
更多文章>
Theme by Vdoing | Copyright © 2020-2025 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×