先上样本。跑的包里WeChat和WeChat_bak是同一份文件。我将其中一份头部修改为ARM64方便分析,下载链接在此:
https://www.jianguoyun.com/p/DfEoUoQQkezgBhjcnGc
https://www.jianguoyun.com/p/DbWuv4oQkezgBhjjnGc
Stage1
X64版拉入IDA解析为无效指令,推测为障眼法,实际运行时应该是用定制的loader作为ARM64加载,然而ida两种CPU都无法正常完整反编译。具体待研究
查看MachO的Load Commands, 找到一个可疑条目
之前群里某位老铁说认识那边技术技术说是黑雷自己转的,目前看来并不是这样,二进制并不是AppStore版,也没有做静态翻译.
(静态翻译二进制的第一步是找到二进制里的所有代码,而这已经被祖师爷图灵在一百年前证实为NP完全问题)
之前去年暑假这玩意儿刚公布时我在群里讨论过这东西可能的实现方式:
- 利用qemu类框架从硬件开始模拟,参考链接: Almost booting an iOS kernel in QEMU | Worth Doing Badly Tutorial - emulate an iOS kernel in QEMU up to launchd and userspace | Worth Doing Badly 个人推测Corellium的实现类似这个
- 单二进制利用unicorn引擎做API层的mapping(即arm指令用unicorn模拟,其余的调用回native的库,需要macOS环境,而黑雷恰好(?)也有macOS环境,目前看极大可能是这个)
- 二进制翻译(NP-Complete)
- 单纯的Xcode模拟器套壳 (一开始从官方口径来看比较像这个,目前存疑)
Stage2
直接试图搜索libxosvm无果,目前试图提取文件。虚拟机镜像本身为魔改过的macOS10.12无法进入系统,下一步研究修复文件系统进macOS调试。
VMWare官方提供了vmdk解包工具,我没有Windows环境,等win同行们解压进行下一步。工具地址https://www.vmware.com/support/ws55/doc/ws_disk_manager_running.html
libxosvm.dylib (2.8 MB)
几维的类vmprotect加壳
静态分析不太可能,如果有人有对抗虚拟化和macOS下符号执行反混淆的话当我没说。当然几维的控制流混淆还没有光强(小声BB)
Stage 3 (TODO:)
修复vmdk,使用修改过的内核从syscall层面进行监控。静态搜索特殊指令(VMWare预留了一系列类似于后门的指令用于跟宿主侧沟通,所谓的VMWare Tools基于这套机制)