新手教程:VB经典编程.exe追码
(完全新手教程,有基础者请略过此文。)
(这是一个什么都不懂的新手,也可以找到注册码的纯新手教程。)
准备工具:Peid+OD
过 程:
1、把程序拖入PEID,提示:
Borland Delphi 4.0 - 5.0[Overlay],无壳。
我们运行看看,
到这里,基本我所需要搜集的程序信息就齐全了。
2、将程序拖入OD,右键-字符串查找-ASCII
Ctrl+F,输入关键字“密码错误”,我们可以看到,有很多密码错误的字符串,
但是我们需要的是“阅读文书密码错误”,这里我们也可以直接搜索“阅读文书密码错误”,我这里直接搜索“密码错误”是想看看还有什么内容。
3、双击“阅读文书密码错误”,我们来到了反汇编窗口。
相对于Borland Delphi写的程序,我们一般知道,在关键字符串的上面,在断首push处下断。我们F2下断。F9运行。
00494CD1 |. 55 push ebp 这里,push压堆处下端
00494CD2 |. 68D5504900 push VB经典编.004950D5
00494CD7 |. 64:FF30 push dword ptrfs:[eax]
00494CDA |. 64:8920 mov dword ptrfs:[eax],esp
00494CDD |. 8D55 F8 lea edx,[local.2]
00494CE0 |. 8B83 90030000 mov eax,dword ptr ds:[ebx+0x390]
00494CE6 |. E8 CDACF9FF call VB经典编.0042F9B8
00494CEB |. 8B45 F8 mov eax,[local.2]
00494CEE |. 50 push eax
00494CEF |. 8D45 F4 lea eax,[local.3]
F9运行:
我们输入密码:随便输入,然后点“确定”,这时程序断在我们刚才下断的地方:
4、接下来,我们F8步过。
在这个过程中,我们可以快点,毕竟是2003年时候的程序,破解难度不大,这个纯粹是初级教程。需要注意的是,我们在往下F8的过程中,要注意我们刚才关键字符串的地方上面是否有跳转。如果有跳转,我们就要在这个跳转前的call上面停下。 继续刚才的F8,到了这里,我们看到,跳过了“打开密码错误”的提示。
我们F8继续。
在这个过程中,我们要注意信息窗口和右边寄存器,和右下面堆栈窗口是否有“可疑”字符串出现。信息窗口下面的是数据窗口,上面就是反汇编窗口了。
一直F8,我们来到这里,发现右边寄存器出现了一个字符串,发现正好是机器码 :YWS2632727938,但是我们看到,这里距离“阅读文书密码错误”的提示,不远了。我们要仔细看下。
继续F8,这里,我们看到有字符串“12345wsy”,这个是不是我们要的注册码呢?我们先记下来,现在继续F8。
接下来,我们在信息窗口和堆栈窗口,看到了刚才我们输入的注册码
按照一般我们编写程序的思路,这个注册码肯定不是程序算出来的,肯定不会通过注册,必然会弹出错误的提示框。而这个时候,距离提示“阅读文书密码错误”也不远了,其中还有jnz和jmp这2个跳转,其中jmp的跳转,如果实现的话,是跳过了密码错误的提示。
我们看:
0049500B |. /75 22 jnz XVB经典编.0049502F
如果这个跳转实现的话,就会跳到了下面的地址
0049502F |> \6A 00 push 0x0
0049502D |. /EB 18 jmp XVB经典编.00495047
如果这个跳转实现的话,就会跳到了下面的地址
00495047 |> \8BC3 mov eax,ebx
我们对比一下,发现Jnz的跳转跳过了jmp。
刚才我们说了编程的思路,我们输入的注册码肯定是不对的啊,没有那么运气好被我们碰上真的注册码吧。。。所以第一个跳转jnz肯定会跳过jmp的跳转,然后继续F8下去的话,会提示密码错误。我们来看看是不是这样。
果然如此。Jnz的跳转跳过了jmp。我们继续F8的话,程序就会弹出密码错误的提示了,接下来看吧。
既然如此,在OD中,一般F8到了某个地址,没有得到我们想要的东西的话,我们就必须在这个地址上面的Call上想办法了。
5、我们重新把程序拖入OD,继续上面步骤。
当我们来到这里:00495003 |. 8B55 FC mov edx,[local.1]
注意看到信息窗口,又出现了奇怪的字符串“@S^]+WhH(”,这里我们就已经有了2个字符串了,刚才的是“12345wsy”
6、其实我们仔细看程序界面的话,就知道“12345wsy”肯定不是注册码,为什么呢?我们可以看到注册窗口,作者的邮箱是什么呢?呵呵。
继续刚才的,我们来到这里,看图:
再继续F8的话,肯定和刚才一样。(其实有经验的话,我们看到右边寄存器窗口,一个是我们输入的注册码,一个“@S^]+WhH(”,我们就知道真假码在比较了。因为这个教程是完全无基础的新手教程,也就是说这是一个什么都不懂的新手,也可以找到注册码的纯新手教程。)
好了,教程到此结束。