校验EXE文件防止软件被破解
校验EXE文件防止软件被破解潍坊市职工大学计算机系 刘红军 |
01-7-17 下午 02:30:28
|
软件凝聚的开发者的心血,几乎每个好用的共享软件都被破解过,保护软件免遭破解,是每个软件作者的心愿。无论你限制软件的使用次数还是天数,破解者只需要用反编译软件,直接把exe文件中的次数限制修改成无限,或修改跳转指令,使注册码码无效。 |
如何保护自己的软件免遭破解呢?程序运行时自我校验是比较好的办法。 |
一、原理如下: |
软件开发者要有两个可执行文件,一个是CRC.EXE,负责校验共享软件的EXE文件,获得其校验码,写入文件SYSTEM.DLL(故意取这个名字,迷惑破解者,校验码最好加密,本文未加密)。另一个是SELFCRC.EXE,即我们编写的共享软件,它具有自我进行校验的功能。共享软件发布时,至少要包含两个文件:SELFCRC.EXE和SYSTEM.DLL。 |
共享软件每次运行时,首先进行自我校验,结果跟SYSTEM.DLL中的校验码比较,正确则正常执行,错误则发出警告后删除自己。如果用户删除了SYSTEM.DLL文件,程序也会拒绝执行并删除自己。这样可以保证只要破解者修改了EXE文件,该文件就不能运行了。 |
二、CRC.EXE的界面以及源代码: |
CRC.EXE的设计界面 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
StdCtrls; |
type |
TForm1 = class(TForm) |
Button1: TButton; |
Label1: TLabel; |
OpenDialog1: TOpenDialog; |
Edit1: TEdit; |
procedure Button1Click(Sender: TObject); |
private |
{ Private declarations } |
public |
{ Public de clarations } |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
//定义校验函数 |
function GetCheckSum(FileName : string) : DWORD; |
var |
F : File of DWORD; |
P : Pointer; |
Fsize : DWORD; |
Buffer : Array [0..500] of DWORD; |
begin |
FileMode := 0; |
AssignFile(F,FileName); |
Reset(F); |
Seek(F,FileSize(F) div 2); |
Fsize := FileSize(F) -1 -FilePos(F); |
if Fsize > 500 then Fsize := 500; |
BlockRead(F,Buffer,Fsize); |
Close (F); |
P := @Buffer; |
asm |
xor eax,eax |
xor ecx,ecx |
mov edi,p |
@again: |
add eax,[edi + 4*ecx] |
inc ecx |
cmp ecx,fsize |
jl @again |
mov @result,eax |
end; |
end; |
procedure TForm1.Button1Click(Sender: TObject); |
var |
CRCResult :dword; |
begin |
//打开对话框选择文件 |
if OpenDialog1.Execute then |
begin |
CRCResult:=GetCheckSum(OpenDialog1.FileName); |
if CRCResult<>0 then Edit1.text:=IntToHex(CRCResult,8) |
else ShowMessage('The CRC check failed'); |
end; |
end; |
end. |
三、SELFCRC.EXE的界面以及源程序 |
SELFCRC.EXE的设计界面 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
StdCtrls; |
type |
TForm1 = class(TForm) |
Button1: TButton; |
Label1: TLabel; |
Label2: TLabel; |
procedure FormCreate(Sender: TObject); |
procedure Button1Click(Sender: TObject); |
private |
{ Private declarations } |
public |
{ Public de clarations } |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
//定义删除自己的过程,动态创建并执行批处理文件 |
procedure deleteme(filename:string); |
var |
batfile:textfile; |
begin |
assignfile(batfile,'./delme.bat'); |
rewrite(batfile); |
writeln(batfile,'@echo off'); |
writeln(batfile,':loop'); |
writeln(batfile,'del "'+filename+'"'); |
writeln(batfile,'if exist ./file.exe goto loop'); |
writeln(batfile,'del ./delme.bat'); |
closefile(batfile); |
winexec('./delme.bat',SW_HIDE); |
end; |
//定义校验函数 |
function GetCheckSum(FileName : string) : DWORD; |
//代码同上,省略。 |
procedure TForm1.FormCreate(Sender: TObject); |
var |
OutFile,batfile:Textfile; |
Fname,CRCTrue:string; |
CRCResult :dword; |
begin |
form1.Visible :=false; |
Fname:='System.dll'; |
if not fileexists(Fname) then begin |
application.messagebox('错误:因丢失DLL文件,软件将退出。','系统警告',16); |
//删除自己 |
deleteme(application.exename); |
application.Terminate; |
end |
else begin |
assignfile(outfile,fname); |
reset(outfile); |
//读取正确的校验码到CRCTrue |
readln(outfile,CRCTrue); |
closefile(outfile); |
CRCResult:=getchecksum(application.exename); |
if CRCResult<>0 then begin |
//在实际应用中,以下的提示对话框不要显示 |
showMessage('CRC校验结果是:'+IntToHex(CRCResult,8)); |
//破解后校验结果必然不正确.程序拒绝执行并删除自己 |
if IntToHex(CRCResult,8)<>CRCTrue then |
begin |
ShowMessage('CRC结果错误,程序将退出!'); |
application.Terminate ; |
deleteme(application.exename); |
end |
else begin |
ShowMessage('CRC结果正确!'); |
end; |
end; |
end; |
end; |
procedure TForm1.Button1Click(Sender: TObject); |
begin |
close; |
end; |
end. |
四、在实际应用中,通过文件校验结合限制用户的使用次数和天数,以及只能在一台机器上使用等办法,可以更好地保护你的共享软件免遭破解。以上代码在WIN98,Delphi 5.0中调试通过。 |
校验EXE文件防止软件被破解相关推荐
- OpenCV2.4.X怎样使开发出来的exe文件或软件可独立运行?
OpenCV2.4.X怎样使开发出来的exe文件或软件可独立运行? 设置库文件那里把 D:\Program_Files\opencv2.4.9\opencv\build\x86\vc10\lib 设置 ...
- 再次轻度破解EXE文件
在经历股市多年的大起大落.大赚大赔之后,痛定思痛,深切感到在金融市场拼搏,必须建立健全交易纪律守则,严格执行. 这套完整的纪律守则,就是"交易系统".在许多方面,它与一般的专家系统 ...
- JAVA项目的打包及生成.exe文件或者打包安装软件
总体思路是先打成jar再把jar打成exe.主要看1.3和2.3里的内容就可以了. 1.将项目打成jar: 1.1要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可 ...
- 【软件】 UltraCompare(文件比较工具)中文版破解
ltraCompare是一款文件内容比较工具.著名的ultraedit公司出品的,可进行文本模式,文件夹模式以及二进制模式的比较,并且可以对比较的文件进行合并,同步等操作,支持撤消操作.拥有书签与收藏 ...
- python通过pyinstaller打包软件将GUI项目打包成exe文件
此项目分为两步: GUI编写程序 pyinstaller打包软件 所用到的第三方库: tkinter pyinstaller 具体实现 1. GUI界面 本次主要讲解如何打包,所以在此只是设计一个十分 ...
- java写exe程序实例_2012软考软件设计师辅导:利用JAVA执行本地EXE文件
曾经为了这样一个需求找了很多资料,今天终于学习到了!如何利用java执行exe文件?使用java类Runtime,每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接. ...
- 在没有安装VC软件的电脑上也可以执行的exe文件
在debug 和 release中都有exe文件 ,将Release中.exe文件拷出来才可以用: 在菜单栏上的Build--->Set Active Configration-->Win ...
- 好用的python打包软件_Python打包exe文件方法汇总【4种】
title: Python打包exe文件方法 copyright: true top: 0 date: 2018-08-11 21:08:21 tags: 打包 categories: Python进 ...
- exew文件加密:利用破解版exe文件加密器对exe文件进行加密保护(图文教程)
exew文件加密:利用破解版exe文件加密器对exe文件进行加密保护(图文教程) 目录 加密过程步骤 解密过程步骤 加密过程步骤 解密过程步骤
- python用PyQt5实现一个简单的表白软件(代码实现+py文件打包成exe文件)
1.代码+py文件打包方法 功能说明:除了点击同意按钮外,软件不会关闭,不同意按钮不会被鼠标点击生效,会不断的被鼠标触发移动 2.上代码: 注:使用该程序之前需要安装pyqt5, pip instal ...
最新文章
- Python培训完可以找什么工作
- mysql(五)查询缓存
- synchronized()_这篇文章带你彻底理解synchronized关键字
- NPS的几个技术点(在Win 2003中称为Internet 验证服务)
- 原生ajax如何执行,原生ajax调用数据实例讲解
- Java打印三角形(双层for循环)
- 这不关我的事,别烦我!
- JAVA零碎要点008---tomcat启动的时候报错了严重: End event threw exception java.lang.reflect.InvocationTargetExcepti
- python发明小故事简写_科学发明小故事10字以上
- Quartz定时器实现
- office2010安装过程出错(解决方法整合)
- Result window is too large, from + size must be less than or equal to: [10000]
- 使用CityBuilder搭建智慧城市3D可视化模型
- (一)D3D9渲染原理
- Arturia CZ V(音频合成器)v1.0.0.2695官方版
- Evil Corp 团伙开始使用 LockBit Ransomware 逃避制裁
- 面试题数组L型输出思路
- 买好了虚拟服务器后怎么办,购买虚拟主机后应该怎么操作?
- 非线性控制1.2——LaSalle不变集原理
- 一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
热门文章
- 女程序员写代码被骂,把领导萌死,成功治愈“选择困难症”
- bzoj5145 [Ynoi2018]未来日记 (多校第4场1013 Yuno and Claris)
- 探究“补阶乘大法的本质“——糖水不等式
- 微信小程序实现页面按钮分享,右上角三个点分享禁用分享
- PHP方法,传入的参数前带三个点是什么意思?
- 猫、路由器、交换机的区别
- 软件测试结果分析和质量报告
- 双线服务器托管因时代的发展产生的优势
- 获取6050原始数据
- 领域划分的规则是什么?