使用Dede破解Delphi软件实战

昨日练习了一把如何破解Delphi软件。下面和大家分享一下破解的过程,对初学者,希望有授之以渔的作用。

首先分析我们的目标软件,不要问我破解的是什么软件。保护知识产权,要从娃娃抓取。

目标软件是一个销售系统,它有时间限制,安装完成后可以正常运行,把系统时间调后一年,软件不能正常执行,再把系统时间调回,效果依然一样。

在使用过期软件时,系统依然能够登陆,但是在点击菜单的时候,弹出您使用的软件已经过期的字样。

下手:

1.观察程序的目录结构,程序主要就是一个exe文件,其余有两个ddl,察看属性,是borland公司的。

2.使用UltraEdit打开这个软件的主执行文件,看看头部,没有加壳。看看中间的资源代码,出现TLabel等开头的字符,显然该软件是Delphi开发的

3.使用Dede打开这个软件的exe文件,进行分析和二次详细分析。

4我们知道,在登陆过程中显然没有进行过期验证,而是在菜单的表单弹出来之前验证的,目标明确,我们直奔主Form文件。打开窗体标签,从中发现了TMainForm,在右边的代码中我们看到了工具栏常见的代码

object ToolButton4: TToolButton

Left = 124

Top = 0

Cursor = crHandPoint

Hint = '客户资料管理'

Caption = 'ToolButton4'

ImageIndex = 4

OnClick = ToolButton4Click

end

我们从中选取几个按钮的事件。例如 OnClick = ToolButton4Click 和OnClick = ToolButton5Click

5。进入过程标签,从里面选取MainFormUnit,在右边的事件地址列表中找到我们刚才选取的ToolButton4Click,ToolButton5Click,点击右键,反汇编。生成的代码均包含这样一段

* Reference to : TMainForm.Proc_005FA21C()

|

005FABB4 E863F6FFFF call 005FA21C

005FABB9 84C0 test al, al

005FABBB 0F85B3000000 jnz 005FAC74

在这里,如果jnz跳转了,那么整个过程就结束了,毫无疑问,jnz上面的call就是进行验证的地方。

双击这个call,我们跟踪进去。没有什么特别的地方,但是发现这样的代码

* Possible String Reference to: '当数据备份与恢复窗口打开时,不能打开

| 其它的窗口'

|

005FA24B BA64A25F00 mov edx, $005FA264

也就是说这个全局函数在检验是否过期之后,还进行其他的合法性检查,如果察看其他的click事件,会发现还有一些用户权限的检查。那么我们往上找

* Reference to : THYMain._PROC_00547434()

|

005FA228 E807D2F4FF call 00547434

005FA22D 84C0 test al, al

005FA22F 7404 jz 005FA235

005FA231 B301 mov bl, $01

005FA233 EB22 jmp 005FA257

这个00547434,如果执行后没问题,jz才可以继续执行。可疑,我们继续跟踪进去,双击该函数

奇迹发生了,我们看到了什么?

* Possible String Reference to: '您使用的软件是试用版,试用期限将到?

| 绻绦褂茫肽胛颐橇担?

| 购买软件的使用权限。不然将影响您的?

| ぷ?您已输入的数据不会丢失,注册后?

| 杉绦褂?'

|

00547457 BAA8745400 mov edx, $005474A8

显然,这个函数就是判断过期的地方,一旦过期就会发出警告窗口。

地方找到了,我们仔细分析一下他的结构,有两个地方可以发生检查

00547434 53 push ebx

00547435 56 push esi

00547436 8BF0 mov esi, eax

00547438 33DB xor ebx, ebx

* Reference to field THYMain.OFFS_003C

|

0054743A 837E3C02 cmp dword ptr [esi+$3C], +$02

0054743E 7407 jz 00547447

00547440 8BC6 mov eax, esi

* Reference to: HYMainUnit.Proc_00545E00

|

00547442 E8B9E9FFFF call 00545E00

* Reference to field THYMain.OFFS_003C

|

00547447 837E3C01 cmp dword ptr [esi+$3C], +$01

0054744B 7522 jnz 0054746F

* Reference to TApplication instance

|

0054744D A138316000 mov eax, dword ptr [$00603138]

00547452 8B00 mov eax, [eax]

* Reference to field TApplication.Handle : HWnd

|

00547454 8B4024 mov eax, [eax+$24]

* Possible String Reference to: '您使用的软件是试用版,试用期限将到?

| 绻绦褂茫肽胛颐橇担?

| 购买软件的使用权限。不然将影响您的?

| ぷ?您已输入的数据不会丢失,注册后?

| 杉绦褂?'

|

00547457 BAA8745400 mov edx, $005474A8

* Reference to: Unit_00500794.Proc_00500ED4

|

0054745C E8739AFBFF call 00500ED4

00547461 33D2 xor edx, edx

* Reference to field THYMain.OFFS_00C4

|

00547463 8B86C4000000 mov eax, [esi+$00C4]

* Possible reference to virtual method THYMain.OFFS_00C0

|

00547469 FF96C0000000 call dword ptr [esi+$00C0]

* Reference to field THYMain.OFFS_003C

|

0054746F 837E3C02 cmp dword ptr [esi+$3C], +$02

00547473 7524 jnz 00547499

* Reference to TApplication instance

|

00547475 A138316000 mov eax, dword ptr [$00603138]

0054747A 8B00 mov eax, [eax]

* Reference to field TApplication.Handle : HWnd

|

0054747C 8B4024 mov eax, [eax+$24]

* Possible String Reference to: '您使用的软件是试用版,如果您要继续?

| 褂茫肽胛颐橇担郝蛉砑氖褂?

| 权限(您已输入的数据不会丢失,注册后

| 可继续使用)'

|

0054747F BA48755400 mov edx, $00547548

* Reference to: Unit_00500794.Proc_00500ED4

|

00547484 E84B9AFBFF call 00500ED4

00547489 33D2 xor edx, edx

* Reference to field THYMain.OFFS_00C4

|

0054748B 8B86C4000000 mov eax, [esi+$00C4]

* Possible reference to virtual method THYMain.OFFS_00C0

|

00547491 FF96C0000000 call dword ptr [esi+$00C0]

00547497 B301 mov bl, $01

00547499 8BC3 mov eax, ebx

0054749B 5E pop esi

0054749C 5B pop ebx

0054749D C3 ret

一个是0054744B jnz 0054746F

另一个是00547473 jnz 00547499

显然,下面要做的不用说了吧,就是75->EB的工作了,呵呵。总算舒了一口气,

6.注意哦,这里的地址都是相对地址,Dede提供了一个转到物理地址的工具,在工具菜单里面。我们使用它得到这两句的物理地址是0014684B,00146873

7不用多了,打开UltraEdit,找到这两个地址。做你该做的事!

后记:本科苦学汇编语言,今天总算发挥了点作用,不知道是欣慰呢,还是无奈!