除了使用dumpdecrypted去解密APP和framework的内容以外,也可以使用LLDB直接从内存中dump出解密后的模块。
0x1
获取framework文件,查看文件对应的偏移
以下是要执行的命令以及解释:
lemons-iPhone5S:~ root# ps aux | grep WeChat //查看Wechat的沙盒目录
mobile 2636 0.0 2.7 1019472 27476 ?? Ss 9:14AM 0:15.37 /var/containers/Bundle/Application/4C23658C-1FC4-4616-A9CD-84E328C4A5CD/WeChat.app/WeChat
root 3316 0.0 0.0 525920 224 s001 R+ 4:52PM 0:00.01 grep WeChat
lemons-iPhone5S:~ root# /var/containers/Bundle/Application/4C23658C-1FC4-4616-A9CD-84E328C4A5CD/WeChat.app
-sh: /var/containers/Bundle/Application/4C23658C-1FC4-4616-A9CD-84E328C4A5CD/WeChat.app: is a directory
lemons-iPhone5S:~ root# cd /var/containers/Bundle/Application/4C23658C-1FC4-4616-A9CD-84E328C4A5CD/WeChat.app
找到对应的MMCommon.framework,将MMCommon.framework复制到mac
0x2
在mac查看MMCommon.framework的加密偏移
cd MMCommon.framework
otool -hf MMCommon //查看MMcommon的文件头部的基础信息
otool -arch arm64 -l MMCommon | grep crypt //获取64位机器加密数据信息
0x3
使用LLDB附加越狱机器,查看MMcommon进程的偏移
image list MMCommon
通过如下命令dump出解密后的二进制数据
memory read --force --outfile ~/Desktop/outputStream --binary --count 3928342 16384+0x00000000384829894
- 3928342 是在上述otool -arch 命令中获取到的cryptsize的值,表明当加密数据的的大小
- 16384 是在上述otool -arch命令汇总获取到的cryptoff的值,代表加密的数据在MMCommon中偏移
- 0x00000000384829894 是在上述image list MMCommon中的模块基地址
上述命令执行完成之后会在桌面生成一个outputStream文件
0x4
修复文件,因为dump出来的文件都没有mach-O文件头,所以需要把dump出来的数据放回原来的framework里面,替换原来加密的数据
dd seek=2384834 bs=1 conv=notrunc if=/Users/lemon/Desktop/outputSteam of=./MMCommon
lipo MMCommon -thin arm64 -output MMCommon_arm64
- 2384834是上述otool -hf的时候architecture 1中的offset的值加上16384(加密数据偏移的值),两者相加,得到了写入的加密数据在文件中的偏移值。
- 替换之后,使用lipo 从FAT文件中提取arm64架构的文件。将MMcommon_arm64拖到MachOView中,修改cryptid为00000000。
网友评论