上一篇文章: "举一反三:iOS逆向App签名"
"金蛋破壳:iOS应用砸壳工具解密",介绍了如何通过工具砸壳,读者朋友可以先阅读一下。
本篇文章,我们将使用LLDB进行手动砸壳操作,以增强对iOS应用程序的逆向分析能力。
- LLDB砸壳实现的原理
使用lldb砸壳是一种常见的逆向工程技术,旨在绕过iOS应用程序的加密保护,以便进行更深入的分析和调试。
通过lldb连接到运行中的应用程序,找到其可执行文件的内存地址,并将其内容dump到本地文件中。
这样,我们就可以绕过加密保护,获得对应用程序的完全访问,并进行后续的逆向分析工作。
本篇以某App为例,进行砸壳
下载好你想砸壳的App
- 我们找到App的可执行文件
ps -ax | grep app
4215 ?? 0:13.06 /var/containers/Bundle/Application/5C560292-9C39-4080-9D7A-3D83413EB127/app/app
- 把可执行文件拷贝到电脑,通过otool 查看二进制文件的信息
otool -arch arm64 -l 二进制 | grep -C5 LC_ENCRYPTION
cmd LC_MAIN
cmdsize 24
entryoff 2361676
stacksize 0
Load command 12
cmd LC_ENCRYPTION_INFO_64
cmdsize 24
cryptoff 16384
cryptsize 34504704
cryptid 1
pad 0
cryptid为1,即为加密
- 我们通过lldb进行进程附加
(lldb) image list
[ 0] E11692A0-C528-3ADD-8B12-6BA7F7F8D51F 0x0000000100b80000 /private/var/containers/Bundle/Application/5C560292-9C39-4080-9D7A-3D83413EB127/app/二进制 (0x0000000100b80000)
memory read --force -outfile ./Decrypted.bin --binary --count 34504704 0x0000000100b80000+16384
34504704 bytes written to 'Decrypted.bin'
获取解密的数据Decrypted.bin
- 用解密后的数据替换原加密数据
dd seek=16384 bs=1 conv=notrunc if=./Decrypted.bin of=二进制
MachOView -> LC_ENCRYPTION_INFO 修改cryptid为0
在脱壳后,我们需要验证一下class-dump是否可行,以确认解密的Mach-O文件是否成功解密。
砸壳成功后,使用工具对其进行分析,例如 class-dump、Hopper、IDA 等,以查看其中的内容。