[wip]分析黑雷模拟器


#1

先上样本。跑的包里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类框架从硬件开始模拟,参考链接: https://worthdoingbadly.com/xnuqemu/ https://worthdoingbadly.com/xnuqemu2/ 个人推测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)
:kissing:几维的类vmprotect加壳

F5C8A33B422F89CC5A747B07B49A5368

静态分析不太可能,如果有人有对抗虚拟化和macOS下符号执行反混淆的话当我没说。当然几维的控制流混淆还没有光强(小声BB)

Stage 3 (TODO:)

修复vmdk,使用修改过的内核从syscall层面进行监控。静态搜索特殊指令(VMWare预留了一系列类似于后门的指令用于跟宿主侧沟通,所谓的VMWare Tools基于这套机制)


#2

mark观望。


#3

mark学习下


#4

来膜张总(prpr


#5

膜,给张总续一秒


#6

不知道我pay不pay膜张总


#7

mark 膜


#8

静态分析不太可能,如果有人有对抗虚拟化和macOS下符号执行反混淆的话当我没说。当然几维的控制流混淆还没有光强(小声BB)

没看明白这里说的是哪一块东西,libxosvm.dylib?另外libkvmrt.dylib能提供一份不


#9

是的,你下下来看就知道了。强ollvm
libkvmrt.dylib是啥


#10

那个libxosvm.dylib里链的一个库

; Imports from @rpath/libkvmrt.dylib
UNDEF:00000000002BD310 ;
UNDEF:00000000002BD310 ?? ?? ?? ?? ?? ?? ?? ?? extrn __imp__llvm_lifetime_end_p0i8:qword
UNDEF:00000000002BD310 ; DATA XREF: __got:__imp__llvm_lifetime_end_p0i8_ptr↑o
UNDEF:00000000002BD310 ; __la_symbol_ptr:_llvm_lifetime_end_p0i8_ptr↑o
UNDEF:00000000002BD318 ?? ?? ?? ?? ?? ?? ?? ?? extrn __imp__llvm_lifetime_start_p0i8:qword
UNDEF:00000000002BD318 ; DATA XREF: __got:__imp__llvm_lifetime_start_p0i8_ptr↑o
UNDEF:00000000002BD318 ; __la_symbol_ptr:_llvm_lifetime_start_p0i8_ptr↑o
UNDEF:00000000002BD320 ?? ?? ?? ?? ?? ?? ?? ?? extrn __imp__kiwisec_vm_interpreter:qword
UNDEF:00000000002BD320 ; DATA XREF: __la_symbol_ptr:_kiwisec_vm_interpreter_ptr↑o


#11

他们自己搞的llvm混淆 intrinsics调用没删干净,lol
文件本身grep一下看看我这也是静态分析的


#12

mark 膜


#13

libxosvm.dylib中还加载了这么个玩意儿

WX20180806-135200