iOS逆向 - dumpdecrypted工具砸壳

本文详细介绍如何使用dumpdecrypted工具破解App Store中下载的应用程序加密壳,包括工具下载、编译、定位目标文件及砸壳过程,并解释为何需放置在Document目录。

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

Appstore下载的App是苹果加密过的, 可执行文件套上了一层保护壳. class-dump无法作用于加密过的App。所以,要想获取头文件,首先得破解加密的可执行文件,俗称”砸壳”.

dumpdecrypted 就是砸壳工具,需要自行编译。

1、下载工具
liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ git clone https://github.com/s
tefanesser/dumpdecrypted
Cloning into 'dumpdecrypted'...
remote: Counting objects: 31, done.
remote: Total 31 (delta 0), reused 0 (delta 0), pack-reused 31
Unpacking objects: 100% (31/31), done.
Checking connectivity... done.
2、编译
liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ cd dumpdecrypted/
liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ make
`xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c 
2015-12-23 15:44:16.429 xcodebuild[9345:206961] [MT] DVTPlugInManager: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for KSImageNamed.ideplugin (com.ksuther.KSImageNamed) not present
2015-12-23 15:44:16.490 xcodebuild[9345:206961] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/CodePilot3.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2015-12-23 15:44:16.490 xcodebuild[9345:206961] [MT] PluginLoading: Required plug-in compatibility UUID F41BD31E-2683-44B8-AE7F-5F09E919790E for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ClangFormat.xcplugin' not present in DVTPlugInCompatibilityUUID
..........省略大部分log

liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ ls
Makefile            dumpdecrypted.c     dumpdecrypted.o
README              dumpdecrypted.dylib

最后生成了 dumpdecrypted.dylib 文件. 这个就是等会需要用到的砸壳文件。 以后都能重复使用了,无须重新编译。

3、定位需要砸壳的可执行文件。

appstore里面的App一般位于/var/mobile/Containers/Bundle/Application/xxx 下面

这里有一个小技巧:就是用 ps -e 命令找到所有进程,手机只开一个App,所以含有 /var/mobile 路径的就是可执行文件的路径. 这里拿肯德基的官方app做例子,可以看到 KFC 关键字,所以这个路径是正确的。

didi:~ root# ps -e | grep var
 2351 ??         0:20.04 /var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/KFC_BRAND.app/KFC_BRAND
 2360 ttys000    0:00.01 grep var
4、找到Doucument目录位置

进入目录下面,使用上一节介绍的cycript工具

didi:/var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/KFC_BRAND.app root# cycript -p KFC_BRAND 
cy#     [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/Documents/"
5、将dumpdecrypted.dylib拷贝到Document目录下面
liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ scp dumpdecrypted.dylib root@192.168.31.209:/var/mobile/Applications/F2842AA9-F
082-4EA1-8FAD-97BBAAA84D8F/Documents/dumpdecrypted.dylib
dumpdecrypted.dylib                                                                            100%  193KB 192.9KB/s   00:00
6、开始砸壳

进入Document目录下面,执行 DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib相关的命令.

liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ ssh root@192.168.31.209
didi:~ root# cd /var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/Documents/
didi:/var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/Documents root# ls
BIStorage  Backups  IDatabaseHelper  TCSdkConfig.plist	dumpdecrypted.dylib  imageFileCache.dat  tencent_analysis_qc.db
didi:/var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /va
r/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/KFC_BRAND.app/KFC_BRAND 
mach-o decryption dumper

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 32bit ARM binary in memory.
[+] offset to cryptid found: @0x68a08(from 0x68000) = a08
[+] Found encrypted data at address 00004000 of length 4620288 bytes - type 1.
[+] Opening /private/var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/KFC_BRAND.app/KFC_BRAND for reading.
[+] Reading header
[+] Detecting header type
[+] Executable is a FAT image - searching for right architecture
[+] Correct arch is at offset 16384 in the file
[+] Opening KFC_BRAND.decrypted for writing.
[+] Copying the not encrypted start of the file
[+] Dumping the decrypted data into the file
[+] Copying the not encrypted remainder of the file
[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4a08
[+] Closing original file
[+] Closing dump file

会生成app砸壳后的文件xx.decrypted. 这里就是 KFC_BRAND.decrypted

didi:/var/mobile/Applications/F2842AA9-F082-4EA1-8FAD-97BBAAA84D8F/Documents root# ls
BIStorage  IDatabaseHelper	TCSdkConfig.plist    imageFileCache.dat
Backups    KFC_BRAND.decrypted	dumpdecrypted.dylib  tencent_analysis_qc.db

然后就能用 class-dump 、 IDA 工具了.

流程还是比较简单的、跟着步骤一步步来。

为什么要放在Document目录下面?

沙盒意外的大多数文件没有写权限, dumpdecrypted.dylib 要写一个decrypted文件, 它是运行在跟商店app中的,需要与商店里面的app权限相同,所以写操作必须发生在有写权限的路径下才能成功。

获取头文件

检查一下砸壳后的文件是否能获取到头文件。

liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ /Users/liuchendi/Desktop/class-dump -H /Users/liuchendi/Desktop/逆向/KFC_BRAND.
decrypted -o head
liuchendi@lovelyddtekiMacBook-Pro dumpdecrypted$ cd head/
liuchendi@lovelyddtekiMacBook-Pro head$ ls
ABNewPersonViewControllerDelegate-Protocol.h             MTAWXOPasteboard.h
ABPeoplePickerNavigationControllerDelegate-Protocol.h    MTAWXOReachability.h
ABPersonViewControllerDelegate-Protocol.h                MTAWXOSessionEnv.h
AMapViewController.h                                     MTAWXOStore.h
APAutoRotateImageView.h                                  MTAWXOStoreEvent.h
APHTTPRequestOperation.h                                 MTAWXOTestSpeedEvent.h
APIBase.h                                                MTAWXOUser.h
...........省略大部分
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值