欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

关于Code Virtualizer pcode解密的一种方法

关于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为例,简单测试了取指令:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功