LMD控件的破解

LMD控件是DELPHI下功能非常强大的一组套件,包含从界面到系统等各方面对DELPHI自身控件的增强,使用起来非常方便。

LMD控件的下载地址:http://www.lmd.de

 

未注册的版本在脱离DELPHI的IDE环境运行时,会弹出警告对话框,并且程序无法运行。本文就简单说明一下怎么去掉这个弹窗对话框。

首先,我们在DELPHI的开发环境中,随便创建一个Win Form项目,在窗体上随便放一个LMD的控件。

 

 

在DELPHI 的IDE环境中,这个程序是可以运行的。但是我们编译此项目,然后退出DELPHI的IDE环境,运行刚才编译好后的程序,会出现下面的弹出警告窗。

点击OK后,程序退出,无法运行。

运行x64dbg,下载地址在这里:x64dbg

因为我们刚才编译的是win32的程序,所以我们需要运行x32dbg.exe。然后选择文件-打开,选择我们刚才编译完成的文件,然后应该出现如下图:

这时,我们点击一下左上角第四个图标,就是蓝色向右箭头的图标,写着“运行(R)”的那个,会出现下面的图:

注意,地址可能不一样,但是大致命令结构应该是如此的。DELPHI程序的特点就是

push ebp
mov ebp,esp
add esp, FFFFFFF0
mov eax, xxxxxxxx

到这里,我们在第一行push ebp那里,鼠标右键,选择“搜索”-“当前模块”-“字符串”。在弹出的窗口下部的搜索输入框内,输入前面那个弹窗上的文字,比如我输入的是warning!

于是我们发现找到了8处有这个字符串的,而且这8处都是LMD的警告信息,说明这个就是我们要找的。在第一条上鼠标双击,会跳到下面的界面:

这里需要重点说明一下,地址004C6CDF,也就是灰色条的位置,是调用警告字符串的位置。向上看,地址004C6CCC处,是一个判断,判断哪个值是不是2,如果是,那么在地址004C6CD0处就跳转了,这个跳转就正好跳过了警告提示的那一段。如果不是2,那么就会出现警告提示。所以,我们要做的,就是把JE跳转,改为JMP跳转。也就是不管那个值是不是2,都跳过警告提示。

正常的破解就是这个思路,把地址004C6CD0处的,je xxxx改为jmp xxxx。从16进制代码上,也就是把74改为EB。

但是现在我们还不能这样改,因为一共有8处,我们需要一个一个改,很麻烦。而且,即使这样改了,我们破解的也仅仅是我们编译好的那个程序,而不是破解的控件。那怎么办呢?

别急,我们先看一下这段程序代码:

004C6CCC | 807D FB 02               | cmp byte ptr ss:[ebp-5],2               |
004C6CD0 | 74 43                    | je basvz.4C6D15                         |
004C6CD2 | 8D45 FC                  | lea eax,dword ptr ss:[ebp-4]            | [ebp-04]:BaseThreadInitThunk

然后我们回到刚才的字符串搜索那里,双击第二行。

004CE664 | 807D FB 02               | cmp byte ptr ss:[ebp-5],2               |
004CE668 | 74 43                    | je basvz.4CE6AD                         |
004CE66A | 8D45 FC                  | lea eax,dword ptr ss:[ebp-4]            | [ebp-04]:BaseThreadInitThunk

瞧见了吗?虽然地址不同,但是16进制的代码是一样的,807DFB0274438D45FC。

我们再把剩余的6个也点开,发现代码都是一样的。也就是说,在控件文件中查找这个16进制代码,找到后,把74改为EB就可以了。

这里需要注意的是,我们查找的16进制代码要遵循两个原则:

1、尽量不要太短,比如你只查找74 43,那么就会把所有的JE +43的跳转全部改掉,这样就可能把很多不该改的地方都改掉了。

2、尽量也要太长,只保障能找到你要找的最短代码即可,太长的话查找会很慢。

一般而言,三到四行指令即可。也就是你需要从上面8个点里,选择相同的指令,再逐渐缩短查找的长度。这个一般都是凭经验,摸索几次就大概知道了。

好了,现在我们已经知道,要找807DFB0274438D45FC,换成807DFB02EB438D45FC

但是,控件文件那么多,我们怎么知道要改哪个文件,哪个文件里有这个16进制代码?

那么就需要使用我们的一个神器,Swiss File Knife,下载地址在这里:Downloads (stahlworks.com)

然后我们写一个脚本,就是创建一个空白的文本文件,写入以下代码:

::script by board4all.biz kenlewis
: 32bit
sfk replace -dumpall -binary "/807DFB0274438D45FC/807DFB02EB438D45FC/" -dir "%cd%" -yes -file *.dcu 
pause

这里,冒号开头的相当于是注释,方便阅读代码用的,你可以不写,也可以改成你自己的内容。

sfk replace -dumpall -binary "/807DFB0274438D45FC/807DFB02EB438D45FC/" -dir "%cd%" -yes -file *.dcu 

这行就是要把807DFB0274438D45FC,换成807DFB02EB438D45FC,而且是包含子目录的,所有dcu的文件,不需要确认。

然后将这个脚本文件命名为lmd_crack.bat。和上面下载的sfk.exe文件一起复制到LMD控件的安装目录。

然后你双击lmd_crack.bat执行吧,就会出现和我这个界面一样的:

出现这个,就说明破解成功了。

然后,你再去DELPHI中,打开刚才那个工程文件,重新编译,你就发现程序可以脱离DELPHI的IDE环境运行了。你再用LMD写的程序,都不会再有警告弹窗了。说明LMD控件破解完成。

同样的道理,你也可以把64位版的LMD搞定。

这样的破解会存在风险:

1、可能会把不该改的地方也改掉,这个需要实际使用过程中发现哪里不对劲再进行调整。反正目前我还没发现有问题,所以暂时就这样用了;

2、可能会有其他的暗桩没被发现。的确,有网友跟我说还是会有弹窗,不过我还真没遇到过,如果谁发现了,请及时告诉我。

posted on   西点肥牛  阅读(90)  评论(1编辑  收藏  举报

相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示