Kealdish's Studio.

dumpdecrypted砸壳记录

字数统计: 1.1k阅读时长: 4 min
2016/10/03 Share

前言

之前一直采用Clutch对ipa包进行砸壳,后来发现Clutch在某些iOS版本下砸壳会失效,故而放弃了Clutch而采用dumpdecrypted。本篇文章就是记录用dumpdecrypted砸壳的过程以及其中的注意点。

准备工作

砸壳需要的东西:

  • dumpdecrypted
  • 越狱的iOS设备
  • OpenSSH(Cydia)
  • iFile(Cydia)
  • Cycript(Cydia)
  • XCode
  • Command Line Tools

编译dumpdecrypted

从Github上下载最新的dumpdecrypted源码,在命令行中进入进入源码的目录下,输入make进行编译生成dumpdecrypted.dylib。这里有一点需要注意,编译时依赖的XCode的SDK版本需要兼容iOS越狱设备的系统版本。比如,我当前XCode的SDK版本是iOS10.0,而我的越狱设备的系统版本是iOS 9.3.1,按照当前配置编译出来的dumpdecrypted.dylib在设备上进行砸壳是会失败的。那如何知道Xcode当前的SDK版本呢?我们可以在命令行中输入命令:xcrun –sdk iphoneos –show-sdk-path。

1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk

若SDK版本不兼容怎么办?可以在这里下载过往版本的SDK。把下载的SDK替换当前SDK的位置,当然别忘了把当前SDK备份,或者用xcode-select命令指定一个活动的XCode。最后再make,成功,输出如下:

1
2
3
4
5
6
7
$ 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
`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 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o
$ ls
Makefile dumpdecrypted.c dumpdecrypted.o
README dumpdecrypted.dylib

再看目录下多出了两个文件:dumpdecrypted.odumpdecrypted.dylib,其中dumpdecrypted.dylib是我们用来砸壳的锤子。

配置iOS越狱设备

进入越狱设备的Cydia中下载安装OpenSSHCycriptiFile。在越狱设备上安装上需要砸壳的APP。

在Mac命令行中通过SSH连接iOS设备,这里必须确保iOS设备与mac电脑处于同一无线网络下,OpenSSH的默认密码是alpine。

1
2
// 192.168.xx.xx为iOS设备在wifi下的IP地址
ssh root@192.168.xx.xx

连接成功后,需要找到砸壳APP的bundle id了,我们可以把除砸壳APP的所有其他APP关掉,在命令行中输入:ps -e命令。以微信为例,我们可以看到微信的bundle id为WeChat。

知道了bundle id,我们就可以通过Cycript找到微信Documents路径,在命令行中输入:cycript -p WeChat,再输入:NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES)[0]。

记下bundle id和Documents的路径,后面会用到。

砸壳

将dumpdecrypted.dylib拷贝到iOS越狱设备上,这里可以用像iTools、iFunBox工具,我用的是scp命令将其传到iOS设备。

1
2
3
$ scp dumpdecrypted.dylib root@192.168.xxx.xxx:/usr/lib
root@192.168.xxx.xxx's password:
dumpdecrypted.dylib 100% 81KB 81.0KB/

注意,若你的设备是iOS 9.3以上,可能会在后面的砸壳中出现错误,所以,推荐将dumpdecrypted.dylib传到/usr/lib目录下。

在命令行中切换到/usr/lib目录下,输入砸壳命令:DYLD_INSERT_LIBRARIES=”dumpdecrypted.dylib的路径” “app的Bundle id的路径”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC
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: @0xd5a90(from 0xd5000) = a90
[+] Found encrypted data at address 00004000 of length 3047424 bytes - type 1.
[+] Opening /private/var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC 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 HBGC.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 4a90
[+] Closing original file
[+] Closing dump file

到此,砸壳工作就完成了。这里还有一点说明,StoreApp对沙盒以外的其他大多数目录没有写权限。除了/usr/lib外,你还可以把dumpdecrypted.dylib拷贝到Documents目录下操作。如果不放在Documents目录下,可能会出现下面的问题:

1
2
3
4
5
FunMaker-5: /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# mv dumpdecrypted.dylib /var/tmp/
FunMaker-5: /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# cd /var/tmp
FunMaker-5:/var/tmp root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E-0E2C6541F879/TargetApp.app/TargetApp
dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find:
dumpdecrypted.dylib: stat() failed with errno=1

CATALOG
  1. 1. 前言
  2. 2. 准备工作
  3. 3. 编译dumpdecrypted
  4. 4. 配置iOS越狱设备
  5. 5. 砸壳