Themida 2260 VM FISH 初探
by xiaohang99
前言:
著名的反虚拟机插件Oreans UnVirtualizer 已经升级到1.8 ,完全支持了对Themida 2.2.6.0 的FISH 虚拟机生成代码的还原 。
下面摘录自Oreans UnVirtualizer 的更新信息:
[v1.8] - FISH BLACK variant avaible - Fixed deofuscation order (GenV6) - New deofucation scheme for FISH machine - New smart code tracer for FISH machines - Stack sort for FISH commands - Improved management of memory (faster deofuscation) - Added movzx reg32, [esp+eax+memoffset] on CISC machines - Added a message prompt when the opcode buffer is not enough - Added LEAVE instruction for FISH machines - Added support for CALLs to VM section in FISH machines - CHECK_PROTECTION macro disabled, now it must be restored by hand - Fixed QWORD incorrect names for some opcodes - Fixed a problem when deofuscating RISC machines
我尝试着通过对Oreans UnVirtualizer (以下称之为OU)的逆向,来学习Themida的FISH VM结构,有所心得,整理笔记,以成此文。
一下的内容是对VM FISH White 进行的分析,其他颜色的虚拟机可能部分适用,毕竟原理还是一样的。
VM FISH虚拟机的结构
VM FISH 虚拟机在我看来有些类似之前的CISC和RISC的组合,包含了两种指令集的特色,以增加逆向的难度。VM FISH white的结构大概可以分6个部分,他们分别是引导区域、VM入口、Handler表、Handler代码、VM context以及 OP code存储区。
引导区域
这个比较简单,引导区调用自程序代码段,主要任务是PUSH两个立即数,第一个是要使用的OP code 所保存的偏移量,第二个是第一个调用的handler序号。
虚拟机被创造出来的目的就是以Opcode来替代原来PC中的指令,并加入混淆欺骗等等,以增加逆向的难度,这里我们就以VM处理Opcode为引,探索一下Themida Fish VM 是如何处理Opcode的,从而对Fish VM有个概念上的了解,并且其中还将详细的解说subhandle和加密寄存器的作用以及他们的运作机制。
这里,我就举handler中比较复杂的type2类型handler处理一段Opcode为例子,进行详细说明:
(未完待续……)