首页
社区
课程
招聘
[原创]关于Code Virtualizer pcode解密的一种方法
发表于: 2011-7-16 22:34 12515

[原创]关于Code Virtualizer pcode解密的一种方法

2011-7-16 22:34
12515

【详细过程】
   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期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
先mark..
2011-7-16 23:14
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
没碰过CV,先收藏一下
2011-7-17 09:49
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多谢分享,学习思路和方法。
2011-7-18 09:17
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
CV, themida的CISC , VMP好像都是类似的VM框架结构。。
2011-7-20 17:12
0
游客
登录 | 注册 方可回帖
返回
//