-
-
[原创]关于Code Virtualizer pcode解密的一种方法
-
发表于:
2011-7-16 22:34
12515
-
[原创]关于Code Virtualizer pcode解密的一种方法
【详细过程】
1.VM的解密算法
一般情况下Code Virtualizer的解密有三个运算:add,sub,xor,有如下计算;
loads/b/w/d
operand eax/ax/al ebx/bx/bl //与key进行计算
operand eax/ax/al imm32/imm16/imm8
operand eax/ax/al imm32/imm16/imm8
operand ebx/bx/bl eax/ax/al //更新key
其中esi指向pcode的数据,ebx为解码key,也就是进入虚拟机前压入堆栈的值:
push xxxxxxxx //解码key,正常等于esi
jmp VMStart
2.方法
让VM代码在emulator中执行,记录寄存器和堆栈状态,并HOOK相应的操作,应该可以得到pcode的id
3.x86 emulator
应该有好多,本次采用的是PyEmu,并结合IDA和IDAPython(Python为2.6版本)
4.明文pcode的获取
设置emulator初始环境,设置EIP,指向虚拟机取指令处,为了使emulator顺利执行,安装异常处理函数,当发现异常时记录异常状态,重设EIP,指向下一指令(有问题??),并在更新key处监视eax/ax/al的值,这就是明文pcode,对python不熟悉(缩进实在无语,有可能是我的编辑器有问题),这个emulator BUG多多,不可能完整跑下来,修改了几处,以dump_wmimmc.sys为例,简单测试了取指令:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)