VB 调试之 P-Code 寻找操作码
使用工具
- OllyDbg 1.10原版,简称
OD
; OD
汉化
和插件
均来自互联网;- VB 静态分析工具exdec来自互联网;
- CrackMe来自互联网,仅供学习使用;
- 文中特殊数字均是
HEX
,为了书写方便采用DEC
;
分析思路
方法一:手动寻找
将
CrackMe
倒入OD
,会停留在程序的入口点,向上滚动代码:会发现一个 API
MethCallEngine
是用来初始化P-Code
的,不过P-Code
的初始化和常见的程序相反,一般,程序在运行时,会初始化所有资源以供调用,而P-Code
却是在调用时才会初始化;在
MethCallEngine
上右键菜单选择跟随或者在MethCallEngine
上按下Enter
,进入函数内部:双击行首或按下
F2
设置断点并做好备注;接着运行程序,发现程序主窗体已经出现,但并没有中断在设置的断点位置:
然后输入随机注册码,点击
Registrar
后,程序才会中断在断点位置,这也从侧面说明了P-Code
是先调用,后初始化;来到
内存窗口
,在代码段设置内存访问断点
:虽然
P-Code
使用的是操作码,但它依然会存储在代码段;接下来就是寻找操作码了,操作码的格式是
MOVE AL, BYTE PTR DS:[ESI]
:多次中断后会停留在预期的指令上,而这条指令的作用就是获取操作码,数据窗口查看
ESI
会得到具体的操作码;
方法二:工具分析
使用
exdec
工具分析程序,会得到程序的静态分析结果:可以看到,分析的结果和手动寻找的结果一致,地址相同,操作码相同;
测试一下:
重载程序,在数据窗口跟随分析结果第 1 操作码的地址,然后在第 1 操作码上设置内存访问断点;
运行程序,输入注册码,点击 Registrar:
程序中断在第 1 操作码的位置;