【翻译】R4ndom 破解教程全文翻译(For 新手):第二十章(上) 翻译都是我理解的方式进行描述,可能和原文不一致。 正文开始 本章主要讲解VB编写的程序要怎么破解,因为这是一个大工程,所以我分为两个章节进行说明。 我们来看下我所提供的两个VB程序,被教程中的所有文件都会提供下载。 介绍VB编程语言与其他编程语言的区别,这个大家自行百度。 主要说明VB语言可以转换为p_code,这个语言可以跨平台移植,在Mac、Linux上都可以正常调用(如果是VB写的Dll)。 教程开始: 当你第一次使用OD打开一个VB编写的程序时,你会马上看到VB调用(MSVBVM50)DLL的Call,然后停在这里等待事件响应,因此这样就会让逆向程序员感觉有所不同。第一件事是你会发现call的栈中信息很少;因为多数程序的运行时间都是放在DLL中,而我们不关心DLL,只关心程序的callback、方法、时间。 另一个不同是字串表是查不到有用的东西的,因为多数的消息窗口和其他windows控件都是放在资源文件中,OD不会显示出来,不像逆向C\C++程序时可用查找字串参考。 另外一个比较麻烦的地方是,VB调用RegisterWindowEx和MessageBox是在自己的DLL中调用,我们不能下API断点。 通过点击这些方法,能看到VB和我们之前遇到的程序不一样的地方 你可看到,这里没有有用的API,没有有用的字串。 在看代码前,我们把用p-code编译CrackmeVB1.exe加载到OD,然后把代码窗口拉到最上面,看看VB程序的架构。我们可以看到DLL的很多功能 这就是运行领空中所有用到的API call了。 代码窗口往下拉一点点,我们可以看到跳转表。这和多数windows程序的一样。 然后我们往下拉,来到VB程序的资源信息中,这里有包含按键、回调。一个比较值得注意的地方是,这里是直接使用回调名称进行回调的,比如程序上有个MyCallBackButton,在代码中可以直接看到这个名字。这样就可以在代码中找到callback的地方。 继续往下拉,就能发现callback的处理代码了。这里使用了常规的callback,和你看到的一样,这里没有说明是什么的callback,我们可以通过改变映射文件进行调用。 最后,我们来到导入表或者IAT。我们能得到更多有用的信息。 当然上面的信息并不能完成这次的破解。我们需要使用其他工具 VB Decompiler Lite 这个软件有两个版本,一个是Lite,一个是Pro。Lite版本是免费的,所以我们有附带该软件。VB Decompiler可以把p-code编译的VB程序进行反编译,反编译为VB语言。这样我们就可以看到VB程序的资源文件。好,现在打开VB Decompiler程序。 打开 CrackmeVB1.exe程序,然后点击Decompile按钮 然后可以看到许多信息了,注意左边的Forms文件夹,这里有两个,所有的资源文件都在这里面,我们一个一个看,一个是主窗口,一个是关于窗口。 你启动程序的时候已经发现这里点击的About按钮后出现的是其他信息,而且about窗口上的OK按钮是不可点击的。如果你跟着我的教程走,你就会知道怎么来进行破解了。 双击Form2后,我们可以看到资源信息了 这里我们可以看到一个按钮的字串是OK,另外一个信息的是这里的callback被叫做Command1。 双击Form1,我们来到主窗口 现在我们在破解前知道了许多信息。一个重要的按钮叫 Check!,他的callback叫Command2,接着往下看,你可以看到Code中有对应的callback,而且知道偏移地址(Command2_Click_402FD0),如果你双击后就可以看到VB代码 现在我们知道Check按钮的偏移地址了,然后使用OD打开程序,来到402FD0处 如果你在这里设了断点,运行程序,输入用户名和序列号,点击Check后就会停在这里了,后面的破解就很简单了。不再进行详细教程。 VB Decompiler Pro 我想告诉你们使用p-code进行查找callback,这样就必须使用VB Decompiler Pro,当然这个不是免费软件,所以不附带(译者注:我在52Pojie中找到,并附上),使用VB Decompiler Pro 打开CrackmeVB1,然后反编译。 这里我们就能看到p-code方法和callback了,所有地址都显示了要做什么东西。 现在进行补丁 使用OD打开程序并来到402FD0处 设置断点,然后跑起来,来到4030AA处,背景颜色变了,这是从p-code中知道的。 在4030E3处,弹窗坏消息。 我们看这里的代码可以发现有比较跳转的代码 把断点设在4030E1处,重启程序,点击Check后,OD断下来,改变0标志位。这里不会跳出坏消息。这样来看就是4030C0这个Call中进行了判断和处理坏消息。我们把断点设在4030C0处,重启程序,然后一步一步调试。 我们慢慢看,就能看到Call VB DLL的方法,下拉代码窗口可以看到4033644处 vbaVarTstEq看上去像strcmp。然后前面传来2个参数。然后在40364F处还有一个call,点进去看看 现在我们必须要跳转到403644处。这样就能得到好消息。所以我们修改40344F的JE跳转 这就是我们希望代码走到的地方 现在把断点设到40344F,跑程序,修改0标志位,强制跳转到40361E处 然后来到40364D处后,我们得到了好消息,这就是破解这个程序的方法 有兴趣的可以去找到VB 调用API的部分与C/C++的API对比,其实很容易找到相同的东西。 附件其他VB程序请自己练习,这里就不在进行讲解了
附上使用到的软件和破解程序
译者注: 由于前段时间忙工作的的事情,和老家房子拆迁的事情,所以没进行翻译。
后续章节会持续进行翻译并更新上来的,只是要时间,目前工作内容比较繁重,周末有时间就进行翻译和整理。
觉得好的,请给点热心值,谢谢!
未完待续
|