spc_cll 发表于 2006-6-18 13:11:32

在VB程序寻找下断点地址的有效方法

因为我常用OllyDBG,因此这里只谈谈在OllyDBG中寻找断点地址的方法。这里随便写写,仅供参考。

1. 通过查找当前模块中的名称(标签),然后查找输入函数参考来定位函数地址。
这是最常用的方法之一,但对于有些压缩过的程序效果可能就不那么高了。就象飘云兄刚发的那个《PiaoYun's CrackMe 004 》就不怎么有效。

2. 通过查找所有字符串来定位断点地址,这也是最最常用的方法之一,对于没有对字符串加密的程序来说特别有效,但对加密的基本上就无能为力了。

3. 通过查找对一个地址的参考来定位断点地址,这也是一个好方法,但对于引用该地址的指令中不直接给该地址值时就无能为力了。对于查找命令序列什么的都是如此。

4. 对某个内存地址下硬件断点(读,写,执行),可以中断任何对该地址的内存操作。但要找到这个地址需要费点功夫的。

***以上4点下断点的方法针对任何程序都有效的***
下面说说对VB程序下断点时特别有效的一个方法:

5. 这里介绍一个在VB程序中定位断点地址特别有效的方法:
    在VB程序中查找二进制字串:81 6C 24(十六进制),可以找到如下形式的指令:
004016A0   .816C24 04 FFFF0000   sub   dword ptr , 0FFFF
004016A8   .E9 D3510000                jmp   00406880
。。。
00401FB8   .816C24 04 63000000sub   dword ptr , 63
00401FC0   .E9 0B260000   jmp004045D0; SN编辑框输入处理函数
其中,0FFFF这个值代表的VB程序内定义的一个函数或着过程,若为其他值(如4B),则代表的是VB程序中某个组件或控件的方法。其下面的JMP指令就跳到该方法的第一条指令上。
那么,在该JMP上下断点,就可直接中断在处理方法的第一条指令上。非常的快捷方便。

大家可以拿飘云兄刚发的那个《PiaoYun's CrackMe 004 》练练。
这个CrackMe是压缩了的。可以在OllyDBG的调试设置的SFX选项卡中选择[块方式跟踪真正入口处]或[字节方式跟踪真正入口处],然后重新Load程序,则OllyDBG会自动跟踪并停在真正的入口处的。

[ 本帖最后由 spc_cll 于 2006-6-18 13:15 编辑 ]

hrbx 发表于 2006-6-19 13:31:56

谢谢兄弟分享,试过可行,赞一个

caterpilla 发表于 2006-6-19 13:35:55

好文,学习。。。。。。。
喜欢这种原理性,有指导性的东西。

西岭秋风 发表于 2006-6-19 16:01:08

学习了,收下!
谢!

hanxiucao 发表于 2006-6-19 20:52:23

挺不错的,值得收藏,谢谢楼主的好东西!

网游难民 发表于 2006-7-20 17:42:39

感觉看不懂,菜鸟一只

lgjxj 发表于 2006-7-20 18:42:31

不错啊,支持呢。。。。。。。。。。。

mojingtai 发表于 2007-1-6 04:39:51

谢谢,知道了因为所以,弄明白了:P

madshime 发表于 2007-1-7 09:45:13

好文。。。。。谢谢LZ

hankaifei 发表于 2007-1-8 20:40:15

学习了 不过别的VB程序也可以这个样吗
页: [1] 2 3
查看完整版本: 在VB程序寻找下断点地址的有效方法