使用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,找到这两个地址。做你该做的事!
后记:本科苦学汇编语言,今天总算发挥了点作用,不知道是欣慰呢,还是无奈!
使用Dede破解Delphi软件实战的更多相关文章
- puppet实现主从部署各种软件实战参考模型
puppet实现主从部署各种软件实战参考模型 实验要求: 1.我将准备三个节点 node2 , node3 , node4 2.我们想让节点node3部署ntp,nginx ;节点node ...
- 没有装delphi软件则须修改程序的Uses单元,去掉QDialogs qtintf.dll
转: 花了几天的功夫,终于完成了一个delphi调用webservice(C#)的任务,发现了好多问题,不过还是解决了,和大家分享一下.首先,就是调用时一个问题,如果你的webservice没有数据库 ...
- 在Windows10中破解一些软件
在Windows10中破解一些软件 一.前言 以前的windows是很好破解的,这里说的windows包含了windows的一些产品,比如说office,visio等等,可是自从到了新版的wind ...
- 关于delphi软件运行出现Invalid floating point operation的错误的解决办法
关于delphi软件运行出现Invalid floating point operation的错误的解决办法 关于delphi软件运行出现Invalid floating point operat ...
- SSH密码暴力破解及防御实战
SSH密码暴力破解及防御实战 一.Hydra(海德拉) 1.1 指定用户破解 二.Medusa(美杜莎) 2.1 语法参数 2.2 破解SSH密码 三.Patator 3.1 破解SSH密码 四.Br ...
- 深入理解.NET程序的原理 谈一谈破解.NET软件的工具和方法
最近一段时间不忙,闲下来的空闲时间,重读了一下CLR的原理,回味一下有关程序集的的知识,顺便练了一下手,学习致用,破解了若干个.NET平台的软件.以此来反观.NET程序开发中,需要注意的一些问题. 基 ...
- 如何破解.net软件
.net sdk中有不少很强大的工具,可以轻易完成对.net程序的破解,只要你懂得一点IL语言就行.现在以一个 M 软件为例,介绍整个破解过程. 第零步:用反编译工具分析软件的可执行文件,制订破解逻辑 ...
- 使用 InstallShield 制作 Delphi 软件安装包
软件版本: InstallShield 12 Delphi 5/7 SQL Server 2005 一.配置软件信息 二.软件安装的需求配置 三.安装架构 四.安装需要的文件 软件的安装路径.可执行文 ...
- delphi软件启动的顺序解密。
运行顺序 1.主窗体的oncreate -- onshow ---- onActivate ---- onResize --- 然后继续走,这个时候主窗体已经显示出来了,猜想delphi的思路是先让主 ...
随机推荐
- 20155213 实验三《敏捷开发与XP实践》实验报告
20155213 实验三<敏捷开发与XP实践>实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)> ...
- 20155338 2016-2017-2《Java程序设计》第1周学习总结
20155338 2016-2017-2<Java程序设计>第1周学习总结 了解成绩构成 成绩构成:100分=翻转课堂考核12次(512 = 60)+ 实验5次(3 5 =15)+ 团队项 ...
- 【LG3230】[HNOI2013]比赛
题面 洛谷 题解 代码 \(50pts\) #include<iostream> #include<cstdio> #include<cstdlib> #inclu ...
- asp.net 问题:Web 服务器上的请求筛选模块被配置为 拒绝包含的查询字符串过长的请求
发现问题: post请求,在发送一个图片base64编码的字符串时,服务端报这个错误. 报错信息中给出了解决办法: 最可能的原因: Web 服务器上的请求筛选被配置为拒绝该请求,因为查询字符串过长. ...
- 后台程序获取JPG/GIF/PNG图片宽度、高度
这是很久之前编写的代码,该代码是读取流数据指定位置的内容,获取图片的宽度.高度值. 由于系统更新,这些代码丢之不用,在这里存个档吧! 1. 获取gif图片宽度.高度.(binary_是图片流数据) ' ...
- 合并SQL 调优
SELECT le.equipcode,sum(case when wo.ordertype=0 then 1 else 0 END) as wxcount,sum(case when wo.orde ...
- Nginx高性能优化
#Nginx配置文件优化 worker_processes ; # nginx进程数,建议按照cpu数目来指定,一般为它的倍数. worker_cpu_affinity ; # 为每个进程分配CPU的 ...
- 基础的Servlet
1.认识Servlet 今天接触了Servlet,我就写了这篇Servlet的文章.首先,我们了解一下Servlet是什么: 这是百度百科的解释,我个人理解是可以用来前后端交互的一个东西,例如可以实现 ...
- Appstate的几种状态及在android 和ios触发
AppState能告诉你当前应用是在前台还是在后台,或者处于切换应用的状态,并且能在状态变化的时候通知你. AppState 通常在处理推送通知的时候用来决定内容和对应的行为 一: App State ...
- Erlang/Elixir: 使用 OpenCV, Python 搭建图片缩略图服务器
这篇文章是在OSX上测试和运行的的, Ubuntu下的安装和配置请移步到这里 应用程序进程树, 默认 Poolboy 中初始化10个用于处理图片的 Python 工作进程(Worker) 首先安装Op ...