昨日练习了一把如何破解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,找到这两个地址。做你该做的事!

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

使用Dede破解Delphi软件实战的更多相关文章

  1. puppet实现主从部署各种软件实战参考模型

    puppet实现主从部署各种软件实战参考模型   实验要求:     1.我将准备三个节点 node2 , node3 , node4 2.我们想让节点node3部署ntp,nginx ;节点node ...

  2. 没有装delphi软件则须修改程序的Uses单元,去掉QDialogs qtintf.dll

    转: 花了几天的功夫,终于完成了一个delphi调用webservice(C#)的任务,发现了好多问题,不过还是解决了,和大家分享一下.首先,就是调用时一个问题,如果你的webservice没有数据库 ...

  3. 在Windows10中破解一些软件

    在Windows10中破解一些软件 一.前言   以前的windows是很好破解的,这里说的windows包含了windows的一些产品,比如说office,visio等等,可是自从到了新版的wind ...

  4. 关于delphi软件运行出现Invalid floating point operation的错误的解决办法

    关于delphi软件运行出现Invalid floating point operation的错误的解决办法   关于delphi软件运行出现Invalid floating point operat ...

  5. SSH密码暴力破解及防御实战

    SSH密码暴力破解及防御实战 一.Hydra(海德拉) 1.1 指定用户破解 二.Medusa(美杜莎) 2.1 语法参数 2.2 破解SSH密码 三.Patator 3.1 破解SSH密码 四.Br ...

  6. 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法

    最近一段时间不忙,闲下来的空闲时间,重读了一下CLR的原理,回味一下有关程序集的的知识,顺便练了一下手,学习致用,破解了若干个.NET平台的软件.以此来反观.NET程序开发中,需要注意的一些问题. 基 ...

  7. 如何破解.net软件

    .net sdk中有不少很强大的工具,可以轻易完成对.net程序的破解,只要你懂得一点IL语言就行.现在以一个 M 软件为例,介绍整个破解过程. 第零步:用反编译工具分析软件的可执行文件,制订破解逻辑 ...

  8. 使用 InstallShield 制作 Delphi 软件安装包

    软件版本: InstallShield 12 Delphi 5/7 SQL Server 2005 一.配置软件信息 二.软件安装的需求配置 三.安装架构 四.安装需要的文件 软件的安装路径.可执行文 ...

  9. delphi软件启动的顺序解密。

    运行顺序 1.主窗体的oncreate -- onshow ---- onActivate ---- onResize --- 然后继续走,这个时候主窗体已经显示出来了,猜想delphi的思路是先让主 ...

随机推荐

  1. [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]

    Description Solution 神仙操作orz. 首先看数据范围,显然不可能是O(n2)的.(即绝对不是枚举那么简单的),我们考虑dp. 定义f(x,k)为以x为根的子树中与x距离为k的节点 ...

  2. cdh中hdfs非ha环境迁移Namenode与secondaryNamenode,从uc机器到阿里;

    1.停掉外部接入服务: 2 NameNode Metadata备份: 2.1 备份fsimage数据,(该操作适用HA和非HA的NameNode),使用如下命令进行备份: [root@cdh01 df ...

  3. Java中如何创建一个确保唯一的名字,文件名

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客要讲的有,如何创建一个唯一的文件名,创建一个唯一的String字符串 为什么要创建唯一呢?再很多情况下 ...

  4. DSP6748学习笔记-190116

    1. PSC是什么?电源和睡眠控制器.一个PSC模块由一个全局PSC和一组本地PSC组成,那么又是什么? PSCModuleControl(SOC_PSC_0_REGS, , PSC_POWERDOM ...

  5. 转:后台管理UI的选择

    注:文中缺少了ZUI和LAYUI两个. 目录 一.EasyUI 二.DWZ JUI 三.HUI 四.BUI 五.Ace Admin 六.Metronic 七.H+ UI 八.Admin LTE 九.I ...

  6. Mac OS 上 VIM 8.0 安装体验

    VIM 8.0 赶在中秋前发布 The best way to install Vim on Unix is to use the sources. This requires a compiler ...

  7. 深入解析QML引擎, 第1部分:QML文件加载

    译者注:这个解析QML引擎的文章共4篇,分析非常透彻,在国内几乎没有找到类似的分析,为了便于国内的QT/QML爱好者和工作者也能更好的学习和理解QML引擎,故将这个系列的4篇文章翻译过来.翻译并不是完 ...

  8. IIS解决上传文件大小限制

    目的:通过配置文件和IIS来解决服务器对上传文件大小的限制 1:修改配置文件(默认为4M 值的大小根据自己情况进行修改) <httpRuntime  maxRequestLength=" ...

  9. selenium+python 搭建自动化环境

    一.以搭建windows平台为例 准备工具如下: 1)下载Python 2)安装,配置环境变量 3)安装selenium,通过pip安装,命令如下:  pip install selenium 方式二 ...

  10. Unity中StopCoroutine不起作用怎么办

    1,只有StartCoroutine使用一个字符串方法名时才能用StopCoroutine(string CoroutineName)停用. 2, public Coroutine coroutine ...