引言
在八中学习简单的分析了一下Apple对App的加密的方式,分析,从原理入手,砸壳探索,八仙过海各显神通
有的时候不得不佩服,一些人根据漏洞、原理,直接实行可行的方案或者找到一些可以代替的方法。然后写成软件免费分享给大家,这种分享的态度,值得追随
世上没有完美的程序,只有更完美,一山比一山高,程序的世界:"高山仰止,景行行止,虽不能至,然心向往之",装逼模式开启
脱壳的原理
要对一个壳应用进行脱壳处理,一般采用静态脱壳和动态脱壳两种方法:静态脱壳就是在已经掌握和了解到了壳应用的加密算法和逻辑后在不运行壳应用程序的前提下将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后就可能会改用更加高级和复杂的加密技术;动态脱壳就是从运行在进程内存空间中的可执行程序映像(image)入手,来将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。从上面的壳应用程序运行的过程就可以看出无论壳程序如何被加密处理,最终运行后在进程中的代码映像(image)始终是被解密后的原始程序二进制。所以只要一个进程内存空间中的代码映像(image)能被读取和访问就可以实现动态脱壳。
使用Clutch砸壳,静态砸壳
在unix系列的操作系统中父进程可以通过fork或者posix_spawnp两个函数来运行或者建立一个子进程的,这两个函数都会返回对应的子进程ID(PID)。iOS系统则可以通过task_for_pid函数来从进程ID获取进程在mach内核子系统中的mach port标识。得到mach port 标识后,就可以借助mach_vm_read_overwrite函数来读取指定进程空间中的任意虚拟内存区域中所存储的内容。因此Clutch内部的实现就是Clutch这个程序对将要进行脱壳的程序文件路径调用posix_spawnp函数来运行从而成为其子进程,然后借助task_for_pid以及mach_vm_read_overwrite函数来读取脱壳程序子进程在内存中已经被解密后的可执行程序的image所映射的内存空间来达到脱壳的目的的。
描述
Clutch是一款高效的iOS解密工具。Clutch支持iPhone,iPod Touch和iPad,以及所有iOS版本,体系结构类型和大多数二进制文件。Clutch仅用于教育目的和安全研究。
Clutch在github上面是开源的地址,感谢!,
下载
https://github.com/KJCracks/Clutch
我们去下载最新的Release版本
得到Clutch一个MachO文件
打印这个MachO文件的基本信息
$ file Clutch-2.0.4
Clutch-2.0.4: Mach-O universal binary with 3 architectures: [arm_v7:Mach-O executable arm_v7] [arm64:Mach-O 64-bit executable arm64]
Clutch-2.0.4 (for architecture armv7): Mach-O executable arm_v7
Clutch-2.0.4 (for architecture armv7s): Mach-O executable arm_v7s
Clutch-2.0.4 (for architecture arm64): Mach-O 64-bit executable arm64
我们发现这个文件一个ARMCUP架构的MachO,so这个文件只能在iOS系统上面使用
在iOS上面使用,需要将这个文件拷贝到我们的手机里面,在五、六这两篇高速大家怎么去访问你的手机,这里就不再赘述了
以后不特别提示所有的访问,我都是用的USB访问
/**首先映射本季的端口3456**/
/**然后Copy 到手机里面**/
$ scp -P 3456 Clutch root@localhost:/usr/bin
/**给这个文件添加权限**/
xxx-iPhone # chmod +x Clutch
使用
- IPhone 输入Clutch命令
xxx-iPhone:~ 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
- 打印所有已安装、加密、可砸壳的App
xxx-iPhone:~ root# Clutch -i
Installed apps:
1: xxxx - xxxx <com.xxxx.xxxx>
- 进行砸壳
xxx-iPhone:~ root# Clutch -d com.gotokeep.keep
....
DONE: /private/var/mobile/Documents/Dumped/com.xxxx.xxx-iOS8.0-(Clutch-2.0.4).ipa
Finished dumping com.xxx.xxx in 46.4 seconds
- 将Ipa文件拖出来放入
mobile
用户目录中的media文件夹下
mv /User/Documents/Dumped/com.xxx.xxx-iOSxx-\(Clutch-2.0.4\).ipa /User/Media/
用ifunbox将Ipa包拖到桌面上这样,你的砸壳文件就生成好了。
将这个ipa文件解压,得到.app中的MachO文件
xxxx $ otool -l xxx | grep crypt
cryptoff 16384
cryptsize 44007424
cryptid 0
砸壳完成
PS
某信App已经不能用静态砸壳了,不过IPhone一起玩越狱 -(十)- 使用dumpdecrypted砸壳,动态砸壳
还是挺好使的