iOS逆向实操笔记4-app脱壳
2020-12-25 本文已影响0人
水煮杰尼龟
发布到appstore
的app
是经过苹果做了加壳
处理的,即做了加密处理的。
这样我们通过appstore
下载的app
,是无法导出头文件,或者反编译分析的。
所以需要对app
进行脱壳处理。
我这里采取了常规的2种方式(Clutch
和dumpdecrypted
)
1. Clutch
- 去这里下载最新的
release
版本
image.png - 重命名去掉后缀,把它放到手机的
/usr/bin
目录。通过命令chmod +x /usr/bin/Clutch
增加权限
image.png -
Clutch -i
展示安装的app,Clutch -d 进程
即开始脱壳。
image.png
image.png
image.png - 脱壳完成,
.ipa
地址也给了
image.png
这样可以导出头文件,查看反编译代码了
不过Clutch
对于带AppExtention
的app
会脱壳失败,而目前的主流app
,大部分都带AppExtention
,所以我多数采用dumpdecrypted
脱壳
2. dumpdecrypted
- 去下载dumpdecrypted,在目录下,通过
make
指令 生成dylib
库。 - 将生成的
dylib
库 拷贝到手机目录/var/root
image.png - 启动某个
app
,通过ps -A
查看app路径
- 通过
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib app路径
命令进行脱壳
image.png
image.png - 如上2图,则成功了。
这里可能会遇到的问题
image.png上图的解决办法:需要重新给
dumpdecrypted库
签一下名
-
security find-identity -v -p codesigning
查看电脑可用证书 -
codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib
通过codesign
重签名 即可
其他错误
-
还可能出现
dyld: Symbol not found: ___chkstk_darwin Referenced from: dumpdecrypted.dylib Expected in: /usr/lib/libSystem.B.dylib in dumpdecrypted.dylib
错误 -
原因是Xcode 版本与越狱手机版本不匹配导致(我使用的越狱手机版本是
iOS 10.3.3
、本机的Xcode版本是Xcode 11
)。
所以我下载了一个老版本的Xcode10
。然后打开终端执行如下命令sudo xcode-select -s Xcode10路径
然后在dumpdecrypted
文件夹重新make
,生成dumpdecrypted.dylib
。
最后可以切换回原来的Xcode
了,sudo xcode-select -s /Applications/Xcode.app
接下来就可以正常脱壳了
PS:判断app是否脱壳
- 通过
MachOView
- 通过这个软件打开可执行文件,查看
Load Commands
中的LC_ENCRYPTION_INFO_64
,如果是armv7,则看LC_ENCRYPTION_INFO
,里面有一个Crypt ID
,1就是未脱壳,0表示已脱壳,例如下图
image.png
- 通过命令行 (更方便)
-
otool -l xxxxx | grep crypt
image.png