使用lldb砸壳,dump下来的二进制文件无法读取

参考“ iOS应用脱壳(解密)的几种方式”这篇文章,选择了lldb的方式尝试砸壳(文章中列举的第四种方式lldb+debugserver)。

目前的问题就是dump内存下来的文件并非可执行文件Mach-O(没有文件头),无法进行进一步操作。
砸壳尝试的应用是app store中下载(有测试的授权)。

dump文件相关的操作步骤如下:

a) 使用otool获取到的可执行文件信息(非胖二进制文件,单纯arm64架构):
$otool -l TEST|grep cry
cryptoff 16384
cryptsize 2621440
cryptid 1

b) lldb连接好debugserver后,获取偏移量
[ 0] 0x00000000000d4000 /var/containers/Bundle/Application/…/TEST.app/TEST(0x00000001000d4000)

c) 使用的lldb命令dump:
(lldb)memory read --force --outfile ./decrypted0.bin --binary --count 2621440 0x00000001000d4000+16384

d) 将二进制文件用dd命令转存为可执行文件:
$dd seek=16384 bs=1 conv=notrunc if=./decrypted0.bin of=./TEST2

e) 使用chmod +x TEST2,将其变成了可执行文件(这步是我自己加的)

f) 然后使用otool查看TEST2,产生了报错信息:
$otool -l TEST2
llvm-objdump: ‘TEST2’: Object is not a Mach-O file type.

至此,dump下来的TEST2文件始终无法被识别为Mach-O类型文件,不知道是中间哪个环节出了问题。
目前觉得可能存在问题的地方:

  1. 偏移量错误,b步骤获取的偏移量值有两个,一个是前面的“0x00000000000d4000”,一个是后面括号中的“0x00000001000d4000”,实际操作使用第一个值会报错,所以下一步memory read用的是第二个值,不知道有没有尝试过的大佬知道应该用哪一个。
  2. 参考另一篇文章( iOS逆向之旅—lldb砸壳)所说的,此时生成的TEST2只是被加密的部分被解密了,还需要增加头尾才能使用,比较了原来的可执行文件和TEST2,dump下来的TEST2确实文件头缺失,但是自己不太懂,加过之后还是无法识别。

一个流程走下来可能导致错误的可能性原因比较多,想求教大家解决或者调试的思路。

理解错误,已解决,dd指令是写到原来的TEST文件中的
$dd seek=16384 bs=1 conv=notrunc if=./decrypted0.bin of=./TEST