準(zhǔn)備工作
找出程序的可執(zhí)行文件路徑
- root#
ps aux | grep Snapchat
列出所有的 Frameworks
- xx.app root#
ls Frameworks
把所需要解密的庫,復(fù)制出來
scp -P 2222 -r root@localhost:/var/....xx.app/Frameworks/xxscp -P root@10.0.0.3:/var/....xx.app/Frameworks/xx
獲取可執(zhí)行文件的頭部信息
otool -hf xxx(可執(zhí)行文件)

圖1.png
獲取64位的加密信息(arm64)
-
otool -arch arm64 -l 可執(zhí)行文件 | grep crypt圖2.png
LLDB 附加
獲取解密的目標(biāo)文件加載模塊的基地址
im list -o -f 可執(zhí)行文件

圖3.png
獲取解密后的二進(jìn)制數(shù)據(jù)
-
memory read --force --outfile ~/Desktop/dumpoutput --binary --count cryptsize cryptoff+基地址- cryptsize來自加密信息,cryptoff 也是來自加密信息

圖4.png
~/Desktop/dumpoutput 是保存到本地計(jì)算機(jī)的目標(biāo)可執(zhí)行文件,這個(gè)文件包含的是解密后的數(shù)據(jù)
修復(fù)文件
因?yàn)?dump 出來的文件都沒有 Mach-O 文件頭,所以要先把 dump 出來的數(shù)據(jù)寫會(huì)原來加密的文件,以替換原來加密的部分.
dd seek=20086784 bs=1 conv=notrunc if=/Users/wyp/Desktop/dumpoutput of=./可執(zhí)行文件名

圖5.png
20086784是20070400+16384的計(jì)算結(jié)果.20070400是之前獲取的 arm64架構(gòu)的偏移值 offset,16384 是加密數(shù)據(jù)的 crypoff, 二者相加,得到了寫入加密數(shù)據(jù)在文件中的偏移值
替換之后,使用 lipo 從 FAT 文件中提取 arm64 架構(gòu)的文件,然后將 arm64_tmp 拖到 MachOView 中,修改 cryptid 的值為00000000,然后就完成了 framework 的解密.
lipo 可執(zhí)行文件 -thin arm64 -output arm64_tmp

圖6.png

圖7.png
查看64位的加密信息

圖8.png
完成
部分 framework, 通過 image li 查不到基地址,解密的方式待續(xù)!
