李沉舟 发表于 2017-12-29 11:45

详解VB6按钮事件,摆脱特征码


微机课,学校里的机器有Visual Studio 6.0全套,不玩点什么真真是有负机房之造化。没事来仔细研究一下VB6的按钮事件。
我这篇文章一半是在学校微机课写的,一半是在家里写的。两个系统装的VB6运行库版本不一样,所以分发代码的地址也不一样。我以家里的版本号较高的版本完成后面写的一个VB6事件监控程序。




编译出来,打开OD调试之。

按工具栏上面的W,在按钮上面下消息断点。

按确定,切换到程序,点击按钮,成功中断在此处。

我们在头部写下断点,按F9运行。

等Windows处理这个左键消息后,发回WM_COMMAND消息。也就是看堆栈窗口,我选中的那一项,出现111。

现在我们在VB6的运行库里面,找到程序的代码段下一个访问断点试试看(删除之前写入的F2断点)。

F9运行起来,中断在这里。

我们来到它访问的地址看看。
按Ctrl+G,输入

熟悉的跳转地址,我们跟踪这个JMP。

这里就是事件地址了,我们记录下
6605218C|.FF3418      |push    dword ptr              ;!!!!!
这里应该就是所有事件执行的经过了,记录一下RVA地址。


基址是0x66000000,RVA是0x5218C。以后调试的时候,只要转到这个基址加RVA的VA地址下断点就可以监控所有事件了。
值得注意的是
6605218C|.FF3418      |push    dword ptr              ;!!!!!
我发现,很多时候都会经过这里,判断是否为需要事件的方法就是,看看dword ptr的值是否为0。

如果在OD里面调试,加条件断点dword ptr!=0就可以了。

我写代码的思路是这样的。




------------------------------分割线------------------------------此乃上半段------------------------------


现在,家里电脑上装的VB6运行库,MSVBVM6.0的版本是6.00.9802,比学校的版本号要高,而且那句push指令(分发代码)的RVA地址不同。后半段的地址是0x51EBC!!!!!!
**** Hidden Message *****

syzh802618 发表于 2017-12-30 08:30

感谢楼主分享

Anewbie 发表于 2017-12-30 09:30

没看懂上面的,回复一下看看下面的

破匣求禅 发表于 2018-1-2 18:37

一点都看不懂,但是我就是喜爱楼主的作品,如此的闪闪发光,照亮了我人生的道路{:6_205:}

Lnairan 发表于 2018-1-2 19:31

看一下下半段的内容

byh3025 发表于 2018-1-2 20:53

虽然很详细,但还是不太懂,基础太差

lisa1986 发表于 2018-1-5 08:42

看一下下半段的内容

湛西哥 发表于 2018-1-7 16:33

感谢分享{:5_117:}

wumian6e 发表于 2018-1-19 09:01

分享精神,是最值得尊敬的

salang 发表于 2018-1-20 15:57

写得很详细,膜拜
页: [1] 2 3 4 5 6 7 8
查看完整版本: 详解VB6按钮事件,摆脱特征码