昨日练习了一把如何破解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. express添加权限拦截

    express通过中间件的方式添加权限拦截 示例代码如下 app.get('/logout', checkLogin); app.get('/logout', function(req, res) { ...

  2. 防360TAB页面的样式页面

    今天给朋友做了一个仿照360新tab页面的效果,主要就是一些样式和JQUERY的应用,超级简单,现在把源码放出来 源码下载

  3. React with webpack - part 1

    http://jslog.com/2014/10/02/react-with-webpack-part-1/

  4. 第十四周 P187教材检查

    在IDEA中或命令行中运行P187 Guess.java. 这道题是继承语法抽象类一块的知识点,题目本身其实并不难,但是当时做的时候我找自己原来的代码花了很长时间,刚找到运行完截好图,就到时间了. 当 ...

  5. pwd命令的实现

    pwd 命令描述 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd ...

  6. QTC++监控USB插拔

    #if defined(Q_OS_WIN) #include <qt_windows.h> #include <QtCore/qglobal.h> #include <d ...

  7. svn 安装 配置及同步

    1.环境centos 2.安装svn #yum -y install subversion 3 查看版本 #svnserve --version 4 建立版本库目录 #mkdir /data/svnd ...

  8. Linux权限管理命令

    查询linux命令用法网址:cht.sh 1.chmod——改变文件/目录的权限 用法: ① chmod [{ugoa}{+-=}{rwx}] [文件/目录]   ---给文件的(用户.所属组.其他人 ...

  9. jvm之对象创建过程

    常量池中定位类的符号引用                ↓ 检查符号引用所代表的类是否已被加载,解析和初始化过  →                 ↓                        ...

  10. 多重共性和VIF检验

    图片来源https://wenku.baidu.com/view/7008df8383d049649b66581a.html 和 https://wenku.baidu.com/view/6acdf9 ...