非越狱砸壳方式总结及坑

本文详细介绍了非越狱环境下对iOS应用进行砸壳的方法,包括手动lldb砸壳、静态砸壳工具Clutch和动态砸壳工具frida-ios-dump的使用。同时,文章指出了砸壳的局限性,如只能在越狱手机上进行,以及可能遇到的安装错误,如DeviceNotSupportedByThining、APIInternalError、EmbeddedProfileInstallFailed和ApplicationVerificationFailed,并给出了相应的解决方案。了解这些知识有助于在iOS应用开发和调试中更有效地处理砸壳问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言

大家都知道,在进行非越狱开发的过程中,需要对第三方应用的包进行重签名,并向MachO文件实行相关自定义库的注入操作,而这些都离不开需要对原始的二进制进行砸壳,原因是AppStore上的应用在开发者提交上去的时候都进行了加密。
虽然对于版本要求不高的应用可以通过PP助手直接下载已经砸壳的应用,但是仍有一些需求需要直接拿到当前线上版本的应用来进行处理,这就不得不需要自行掌握砸壳的一些技巧或方式。

二、事项

砸壳方式

目前提供了两种方式,一种手动lldb进行砸壳;一种是运用工具砸壳,工具砸壳又分为两种:静态砸壳(Clutch)及动态砸壳dumpdecryptfrida-ios-dump)。
其中静态砸壳局限较高,是硬性解密的过程,而动态砸壳是通过读取加载到内存中的信息进行Mach-O文件的解密替换。

局限性

目前砸壳只能通过越狱手机来做,并且最终的Mach-O可执行文件只会对当前砸壳用的越狱手机架构解密,可通过otool -l xxx | grep -B 2 crypt来查看解密状态。

运用frida-ios-dump工具这种动态砸壳的方式进行砸壳,首先脚本进行了优化,可以预先加载包内所有的framework到内存,但是尚不能加载appex等信息,是因为不能自动启动appex等进程。

具体解决办法是: 可以通过手动启动这些Appex进程,并用dumpdecrypt工具逐个对应用宝中Plugin目录对应的几个appex二进制进行内存dump,然后依次对原包中的appex二进制文件进行替换。当然也可以采用硬性解码的方式Clutch来进行砸壳。

三、坑

砸壳之后的应用可能存在装不上手机的问题,具体看安装过程中出现的问题;具体可采用ideviceinstaller工具进行具体安装问题的排查。
通过源码分析可知,它依赖了libimobiledevice库,-install指令下实际调用的是installation_proxy.c文件下的instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)函数,而在这个文件中还定义了许多安装错误类型,具体可以通过链接查看。

常见错误
1.The application is not build for this device. (ideviceinstaller报错:DeviceNotSupportedByThining)

由于砸壳后ipa做了瘦身,一些UI支持的设备在info.plist里显示不全,只需要修改info.plist的UISupportedDevices项以及Required device capabilities段以适配即将安装的设备类型。

2. APIInternalError

一般属于设备系统出现问题,请重启设备再安装。

3. EmbeddedProfileInstallFailed

一般是Provision profile文件过期或无效导致

4.ApplicationVerificationFailed

应用包的重签名未成功导致

这样便可以在自己重签名的过程中厘清系统安装包的检测步骤,在找问题原因的时候方便很多。

<think>我们正在处理用户关于iOS逆向工程中“抽”()过程中遇到错误的解决方案。根据用户提供的引用和上下文,我们注意到用户引用了多个关于错误的资料,特别是引用[1]中提到的class-dump错误和引用[3]中的编译错误等。用户的问题直接指向“抽报错解决方案”。根据引用内容,我们可以总结如下:1.引用[1]提到在class-dump时出现的错误:`class-dumpError:Cannotfindoffsetforaddress0xd80000000101534ainstringAtAddress:`。这通常发生在OC和Swift混编的项目中,可能是由于class-dump工具在处理混编代码时的局限性。2.引用[2]提到了两种方式:静态(如Clutch)和动态(如dumpdecrypted,frida-ios-dump),并指出静态的局限性较高,而动态通过读取内存中的信息进行解密。3.引用[3]提到了编译环境的问题:不能在中文目录下编译,包名必须全小写,以及编译时关于lzma压缩的错误和缺少SDK的错误。4.引用[4]介绍了frida-ios-dump的使用,并强调时应用必须运行,否则可能导致不完全。5.引用[5]是关于ffmpeg抽帧报错的,但用户的问题是关于“抽”(即)的,所以这个引用可能不直接相关。用户的问题是想解决抽)过程中出现的错误。由于过程可能涉及多种错误,我们需要分类处理。常见错误及解决方案:1.**class-dump错误**(如引用[1]):-**问题原因**:class-dump在处理Swift与OC混编项目时可能无法正确解析某些地址。-**解决方案**:尝试使用更新版本的class-dump,或者使用其他工具如`dsdump`(专门用于Swift)进行导出。另外,也可以考虑使用动态工具,因为动态得到的二进制文件可能已经解密,class-dump可以正常工作。2.**工具执行错误**(静态与动态):-**静态工具(如Clutch)的局限性**:可能不支持某些加密类型或iOS版本。引用[2]指出静态是硬性解密,局限性较高。-**解决方案**:转而使用动态工具(如frida-ios-dump),因为它通过注入脚本到运行中的应用来解密内存中的代码,通常更可靠。3.**环境配置错误**(引用[3]):-避免中文目录:确保整个路径没有中文字符。-包名全小写:在相关配置中,包名必须全小写。-压缩相关错误(`IO::Compress::lzma`):-解决方案1:安装xz,然后安装Perl的Lzma模块(`sudocpanIO::Compress::Lzma`)。-解决方案2:修改配置文件,将压缩方式改为gzip(修改`dm.pl`和`deb.mk`文件)。-缺少SDK错误:通常是因为环境变量中SDK路径未正确设置。确保设置了正确的Xcode路径,或者通过MonkeyDev清理缓存。4.**不完全**(引用[4]):-**问题原因**:使用frida-ios-dump进行动态时,如果目标应用没有在运行,则内存中只有部分模块,导致不完全。-**解决方案**:确保前应用已经启动并运行。在过程中不要关闭应用。5.**其他常见问题**:-设备未越狱通常需要在越狱环境中进行。确保设备已经越狱,并安装了必要的依赖(如frida-server等)。-网络问题:frida-ios-dump需要设备与电脑通过USB连接,并且通常使用iproxy进行端口转发。确保端口转发设置正确(如使用`iproxy222222`将设备的22端口转发到本地的2222端口)。-权限问题:确保有足够的权限执行脚本,如给dump.py执行权限(`chmod+xdump.py`)。具体操作步骤(以frida-ios-dump为例):1.确保iOS设备越狱,并安装OpenSSH和frida-server(在Cydia中搜索安装)。2.在电脑上安装frida:`pipinstallfrida-tools`3.下载frida-ios-dump工具:`gitclonehttps://github.com/AloneMonkey/frida-ios-dump`4.安装依赖:`pipinstall-rfrida-ios-dump/requirements.txt`5.使用iproxy设置端口转发:`iproxy222222`(另开一个终端窗口)6.修改dump.py中的用户和密码(默认是root和alpine,如果设备修改过密码,则填写修改后的密码)7.确保要的应用已经在设备上运行(打开应用)。8.执行:`pythondump.py应用名称`或`pythondump.py进程ID`如果仍然遇到问题,请检查:-frida-server是否在设备上运行(在终端中执行`ps-ef|grepfrida`查看进程)。-电脑与设备是否在同一个网络,或USB连接正常。针对用户提供的引用[3]中的错误,如果用户在前需要编译工具(如自己编译工具),则需要注意:-不要使用中文目录。-包名全小写。-如果遇到压缩错误,修改配置文件使用gzip压缩。-如果遇到SDK错误,指定Xcode路径(例如:`sudoxcode-select-s/Applications/Xcode.app/Contents/Developer`)。总结:错误需要根据具体错误信息定位解决。如果错误信息是关于class-dump的,则考虑使用动态并确保应用运行;如果是环境配置问题,则检查路径、包名、依赖库等;如果是工具本身的问题,考虑更新工具或更换工具。希望以上解决方案能够帮助用户解决抽过程中出现的错误。</think> ### iOS)报错解决方案 针对您在iOS逆向抽过程中可能遇到的错误,以下是基于引用内容的分类解决方案: --- #### **1. class-dump 相关错误**(常见于OC/Swift混编项目) - **报错示例**: `class-dump Error: Cannot find offset for address 0xd80000000101534a in stringAtAddress:`[^1] - **解决方案**: 1. 更换支持混编的**class-dump 工具**(如 [class-dump-swift](https://github.com/ret2d3v/class-dump-swift))。 2. 尝试使用**动态工具**(如 frida-ios-dump)替代静态(如 Clutch),因为动态直接读取内存解密数据,准确性更高[^2][^4]。 --- #### **2. 工具环境配置错误** - **问题A:中文目录路径报错** - **现象**:编译或执行脚本时报错。 - **方案**:确保**所有路径均使用英文命名**,避免中文目录[^3]。 - **问题B:xz压缩模块报错** - **报错**:`make package Error: IO::Compress::lzma` - **解决方案**: ```bash brew install xz # 安装依赖 sudo cpan IO::Compress::Lzma # 安装Perl模块 ``` **或修改压缩方式**: 1. 编辑 `$THEOS/vendor/dm.pl/dm.pl` 文件,注释: ```perl # use IO::Compress::Lzma; # use IO::Compress::Xz; ``` 2. 修改 `$THEOS/makefiles/package/deb.mk`,指定压缩方式: ```makefile _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip ```[^3] - **问题C:SDK缺失报错** - **报错**:`make Error: You do Not an SDK` - **解决方案**: ```bash sudo xcode-select -s /Applications/Xcode.app/Contents/Developer # 指定Xcode路径 monkeydev clean # 清理MonkeyDev缓存 ``` --- #### **3. 动态工具(frida-ios-dump)报错** - **问题A:后文件不完整** - **原因**:目标应用未在设备前台运行。 - **方案**:执行前**确保应用已启动**(如切换到微信界面再执行命令)[^4]。 - **正确命令**: ```bash ./dump.py 微信 # 或通过进程ID:./dump.py 1234 ``` - **问题B:脚本无法全局调用** - **方案**: 1. 将脚本目录加入环境变量: ```bash echo 'export PATH="$PATH:/Your/Script/Dir"' >> ~/.zshrc source ~/.zshrc ``` 2. 创建快捷命令别名: ```bash alias dumpipa="/Your/Script/Dir/dump.py" ``` --- #### **4. 静态工具(Clutch)局限性** - **常见问题**:无法解密新版App加密(如Apple FairPlay DRM)。 - **方案**:优先使用**动态工具**(frida-ios-dump/dumpdecrypted),直接读取内存数据绕过硬加密[^2][^4]。 --- #### **5. 其他建议** 1. **越狱环境检查**:确保设备已越狱(Checkra1n/Unc0ver),并安装必要依赖(OpenSSH, Frida-server)。 2. **设备连接**:使用 `iproxy 2222 22` 转发SSH端口,避免连接超时。 3. **工具更新**:使用最新版工具(如 [frida-ios-dump 更新版](https://github.com/AloneMonkey/frida-ios-dump))。 > 引用资料汇总 > [^1] class-dump混编项目报错处理 > [^2] 动态与静态原理对比 > [^3] 编译环境配置避指南 > [^4] frida-ios-dump正确用法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值