逆向-砸壳导出头文件-(一)Clutch
前言
最近想了解别人app的一个功能实现,入了逆向的坑,也当做一次更深了解oc底层的机会。前前后后看了几篇相关文章,就拿个App练了练手,在此记录下学习过程,方便以后回忆。首先,上传到AppStore的App都是经过苹果签名加密的(具体加密过程可以看我写的这篇文章),所以我们要拿到App代码的头文件,必须解密,俗称砸壳,接下来,我会用以下三种工具来实现砸壳并且导出头文件。此篇介绍的是Clutch。
准备
越狱的iPhone
- Cydia安装OpenSSH(Mac 上远程输入命令操作 iOS 设备)
Cydia安装Apple File Conduit “2”(方便ifunbox等工具访问iOS系统目录)
安装 afc2add 也是一样,不过我在安装 afc2add 后无法访问系统目录,才用 Apple File Conduit “2” 这个插件的,这个插件要通过添加 apt.25pp.com 这个源来装,你用Cydia的源访问不了,应该是要翻墙。
(这里小记录下,每次重新越狱, Apple File Conduit “2” 这个插件都要重新安装一遍,不然会失效)
电脑安装ifunbox,usbmuxd,class-dump
iFunBox自己找,主要用来iPhone和Mac传输文件,实在不用也行,可用scp命令代替
usb连接手机情况下:
12scp -P 12345 root@localhost:<手机上文件的路径> <复制的文件存放到电脑的路径>scp -P 12345 <电脑上文件的路径> root@localhost:<复制的文件存放到手机的路径>wifi连接手机情况下:
12scp <电脑上文件的路径> root@越狱机ip地址:<复制的文件存放到手机的路径>scp root@越狱机ip地址:<手机上文件的路径> <复制的文件存放到电脑的路径>usbmuxd可通过下面命令安装,前提是你Mac装了Homebrew
1brew install usbmuxd如果你安装了或者打算装 Monkey Dev 的,就可以不用装 class-dump,因为它里面已经自带了。自己安装 class-dump 可以通过此地址下载,下载后打开,把里面的 class-dump 复制到 /usr/local/bin 路径下,打开终端,执行:
1class-dump成功安装好class-dump~
过程
安装Clutch
先从GitHub下载最新Clutch
ssh连接iPhone
由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。打开终端,执行:
1iproxy 12345 22这时终端会显示 waiting for connection 这表示我们已经搭建好Mac和iPhone的通道,现在我们直接和本地的12345端口通信就能和iPhone通信了。保持上一个命令显示的状态,新建个终端执行:
1ssh -p 12345 root@127.0.0.1如果要你输入密码则输入:alpine,显示 iPhone:~ root# 代表成功,你可以在后面输入命令操作设备啦。
移到iPhone的Device->usr->bin目录下
直接拖动下载 Clutch-2.0.4文件 到iFunBox的 Device/usr/bin 目录下就算安装成了。
砸壳
给 clutch 加权限
cd到 clutch 所在位置:
12iPhone:~ root# cd /usr/biniPhone:/usr/bin root#直接执行:
12iPhone:/usr/bin root# Clutch-2.0.4-sh: /usr/bin/Clutch-2.0.4: Permission denied这是因为没有权限,给他加一下就好了
12345678910iPhone:/usr/bin root# chmod +x Clutch-2.0.4iPhone:/usr/bin root# Clutch-2.0.4Usage: Clutch-2.0.4 [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的包名,砸壳
我们执行这句查看手机安装的App:
12345iPhone:/usr/bin root# Clutch-2.0.4 -iInstalled apps:1: 微信 <com.tencent.xin>2: 大众点评-分享你的潮生活 <com.dianping.dpscope>3: Keep - 自由运动场 <com.gotokeep.keep>找到你想砸壳的App,复制他的包名,执行:
1234567iPhone:/usr/bin root# Clutch-2.0.4 -d com.tencent.xinZipping MacauLife.appASLR slide: 0x10009c000Dumping <MacauLife> (arm64)...DONE: /private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-(Clutch-2.0.4).ipaFinished dumping com.tencent.xin in 17.6 seconds砸壳成功~
导出头文件
拿到可执行文件
从上面砸壳我们已经成功得到砸完壳的ipa包了,接着只要根据返回的路径,从iFunBox找到ipa包,拖到你的Mac电脑上,右键解压,然后你会发现一个Payload文件夹,右键显示包内容,在里面找到 WeChat 这个文件,把它复制出来放到你喜欢的路径下,这就是微信的可执行文件啦,我们要利用这个文件来导出头文件。
如果没有iFunBox可以用命令代替这个操作:
1scp -P 12345 root@localhost:/private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-\\\(Clutch-2.0.4\\\).ipa ~/注意:
- 此命令是在电脑终端执行,而不是在手机端终端下。
- -P 的 P 必须是大写,指定端口的意思。
- Clutch砸壳后生成的ipa包命名有’(‘,’)’这两个符号,要加反斜杠,不然会报找不到文件问题。或者你直接用mv命令重新命名这个ipa包名,去掉括号在进行scp复制到电脑也行。
导出头文件
用class-dump导出头文件,到终端执行(包括两个符号’<’,’>’整个替换路径):
1class-dump -H <你放WeChat可执行文件的路径> -o <你打算放导出的头文件的文件夹路径>喝杯咖啡,emmmm,头文件就出来啦。
总结
至此,clutch砸壳&获取头文件完毕,你可以用ida来打开上面得到可执行文件,它可以生成伪代码,免去看汇编的痛苦,配合sublime来看头文件,进而分析,学习别人App某些功能的实现,下一篇将讲用 dumpdecrypted 砸壳。
原文作者: JackNehc
原文链接: https://jacknehc.github.io/2019/03/17/逆向-砸壳导出头文件-Clutch/
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议