本帖最后由 姐又寡闻了 于 2019-6-6 22:28 编辑
【翻译】XXXX破解教程全文翻译(For新手):第十七章(上)
翻译都是我理解的方式进行描述,可能和原文不一致。 正文开始了
本次教程中,我们将讨论用Delphi写的程序是怎么工作的。Delphi写出的程序和其他语言写出的程序有很大不同。你会说有很多个调用(不仅仅是一个经典程序)我们将讨论其他技术。
本教程需要下载逆向的两个软件,一个是DeDe,一个是ExeinfoPE,均可在本教程中下载。
当然还是需要用到OD的,请自行下载。
Delphi 大多数程序都包含许多窗体,基本的窗口和对话框。你使用窗体进行绘制,如添加一个按钮,对话框等,这是你喜欢的方式。你唯一要做的就是告诉Delphi编译器你希望程序做什么样的动作,例如:当你按下按钮后,希望打开一个打开文件的对话框。被教程中你就是要告诉Delphi编译器通过你的代码打开一个对话框,只是简单的代码就可以做到。
这些窗体,以及他们所关联的一切(字串,大小,颜色)都保持到资源中,看上去像C++程序,但是实际上有很大不同。一个有趣的现象是,Delphi通过名称来控制这些资源,也就是说你所调用的特定资源的名称被硬编码编译到可执行文件中的名称。名称看上去就是资源。这样有好处也有坏处,好处是你可以很容易的找到这些名称与资源的管理,坏处是他们都存在同一个地方,在逻辑上看不到正常的代码。所以要找到按钮关联的资源会比较麻烦。
多数程序以分析你就知道,这是C++的,Delphi写的程序在幕后有很多不同,代码看上去就和以前的不同,这就是麻烦的一个原因。
第一个目标 你的第一个问题会问,我们怎么知道这是一个Delphi编译的程序?多数的解释都只说了大概,这是我们就需要使用软件来确认了。打开ExeInfoPE。这个程序可以查看程序是否带壳,带来什么壳,如果不带壳我们就知道是用什么语言来写的了。当你第一次使用ExeInfoPE时,会出现下面的图像: 然后打开我们要查看的程序,DelphiCrackme.exe,然后就可以看见如下图: 我们看到了该程序是由Delphi写的。也可以看到这个程序是没有加壳的。把这个放一边,使用OD加载该程序,你会看到: 你会发现这和我们以往的程序不太一样。
查看Delphi程序的资源 资源是一个最大的区别,作为一个逆向工程师,这时就把程序使用Resource hacker打开看看吧。这时就发现和以前的不同,多了一个叫RCDATA的新文件夹,点开看看 一般来说,最重要的子文件夹(资源部分)是TFORM段。在Delphi程序中。这些是窗口和对话框,在这个特殊的Crackme中,只有一个TFORM。在Resource Hacker打开TFORM1下面带小花图样,里面的信息告诉我们这个程序的所有数据。比如尺寸,颜色和位置,标题,办好多少个按钮等等。
通常情况下我们先看到标题栏,它告诉我们在窗口中显示的信息。在本教程中,“Delphi-MsgBosxes”是最要的,在程序中可能会调用TFORM1、TFORM2…很难知道哪一个窗体调用TFORM1.看着文字进行分析,例如,标题会告诉我们是否已经注册,关于则给出关于信息。
最后,对我们来说,最重要的在底部的按钮对象。重要的原因是按钮被按下后使用我们的用户名和序列号进行注册,并确认是否注册成功。当按钮被按下时,我们要知道程序做了什么动作。本例中,按钮是“Button1Click”。像前面说的一样,Delphi是通过ASCII与按钮进行关联的,因此当程序按下这个按钮后就会按照“Button1Click”的方法进行动作。
通过Resource hacker得到的信息中,我们知道这个程序只有一个按钮,标题是“Delphi-MsgBoxex”,按钮的句柄为“Button1Click‘。
让我们使用一个对于Delphi程序很重要的软件。
使用DeDe
DeDe打开一个Delphi编译后的程序,然后完整的呈现出来。显示出所有我们已经知道的资源信息和所有的调用,实现方法的地址,实现方法的名称,如果你愿意它还可以反编译,当然也可以修改它。让我们打开DeDe,然后加载Crackme。 首先,我要打开我们要逆向的程序。有两种方式,一个是通过程序的按钮找到我们要逆向的程序,另外就是直接把程序拖进DeDe,然后选择“YES“开始反编译程序。此时DeDe会弹出信息框询问是否已经加载。 同时我们的程序也跑起来啦 有时,DeDe会弹出一个信息框询问程序是否已经完全加载完成,然后继续进行分析。本例中只需要点击OK按钮,允许DeDe进行分析。DeDe将会关闭程序,然后询问是否使用更多的方式进行分析。 我通常选择yes,然后不再弹窗。然后DeDe分析完程序: DeDe默认显示类信息,我们通过“ClassInfo“表格可以看到,如果需要可以进行排序,但是我们需要的”FORMS“表: 这里,我们看到的和Resource Hacker一样。我这样做是为了以后可以直接略过Resource Hacker,直接使用DeDe。现在点击“Procedures”表。这在DeDe中是很重要的。 这里DeDe显示了TFORM1的实现方法和地址。这是一个简单的程序,只有一个按钮,因此只有一个CallBack。现在我们记住这个地址“457F0C”,显示用OD打开程序,看看我们能做什么。
找到补丁位置
如果进行字串搜索能看见: (译者注:其实我刚开始使用字串搜索能找到,也可以打补丁,运行正常,不明白作者什么意思) 找到的Call在Delphi中都是无用的。(译者注:不明白) 然后看到一大堆的Call
通常情况下,我们停在错误的地方,然后打补丁使程序进入到对的地方,而在Delphi中则不容易找到,需要进入大慨15个call之后来到真正代码的地方。
但是如果我们直接去到DeDe中的Call的位置,我们可以看到 哈哈,这里就是我们要的地方啊,让我们设断点跑起来看看。 注意,这个程序提示我们没注册,标题为“Delphi-MsgBoxes”。只有一个按钮,与我们之前的分析一致。来到我们的断点处看看 现在只需要改一下就可以来到正确的地方。
(译者注:这次程序实际不需要用到DeDe和ExeInfoPE,直接用查找字串参考就可以高低,只是作者希望我们使用DeDe和ExeInfoPE来分析Delphi程序) 第二个程序也是一样的方法,主要是使用DeDe和ExeInfoPE来处理Delphi程序。后面的等有时间再进行翻译。 未完待续
|