第8章: abex'crackme#2
VB文件的使用名为MSVBVN60.DLL,是VB的专用引擎.应注意,VB语言使用的是Unicode字符串
使用VB文件可以编译为本地代码(Native-Code)与伪代码(Pseudo-code).
本地代码使用易于调试器解析IA-32指令;伪指令是一种解释器(interpreter)语言,它使用由VB引擎实现虚拟机并可自解析的指令(字节码).
想要准确解析VB的伪代码需要分析VB引擎并实现模拟器.伪代码的好处是方便移植.
在401238的地址上,push指令把 RT_MainStruct结构体 的地址压入栈.这个结构体中存储着其它结构体的地址(国外大佬分析出的).
另外,上面红字的地方,是一个间接(indirect)调用法.
经多次调试可以发现VB程序经常对字符串进行移动,每次运行的地址都会不同.
下图中,push的三个地址,其中两个的地址( 0019F290 , 0019F280 ) +8 即可得到存储着之前计算好的值 和 加密的值.
19F290中的8,经过初步调试,感觉像是用作测试,在程序运行的过程中,8是否改变.
后期经过调试发现,地址19F238在函数中,会取地址+8中的值.