admin管理员组文章数量:1531661
2024年7月14日发(作者:)
delphi制作EXE文件加密器、捆绑、自解压文件及安装程序
delphi制作EXE 文件加密器、捆绑、自解压文件及安装程序
2007-01-09 13:39:22| 分类: Delphi |字号 订阅
我们先来说一下如何制作一个EXE 文件加密器吧。
EXE 文件加密器的原理:建立两个文件,一个用来添加资源到另
外一个EXE 文件里面,称
为添加程序。另外一个被添加的EXE 文件称为头文件。该程序的
功能是把添加到自己里面的
文件读出来。Windows 下的EXE 文件结构比较复杂,有的程序
还有校验和,当发现自己被改变
后会认为自己被病毒感染而拒绝执行。所以我们把文件添加到自
己的程序里面,这样就不会改
变原来的文件结构了。我们先写一个添加函数,该函数的功能是
把一个文件当作一个流添加到
另外一个文件的尾部。函数如下:
Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean?
var
Target,Source:TFileStream?
MyFileSize:integer?
begin
try
Source:=(SourceFile,fmOpenRead or fmS
hareExclusive)?
Target:=(TargetFile,fmOpenWrite or fmSh
areExclusive)?
try
(0,soFromEnd)?//往尾部添加资源
om(Source,0)?
MyFileSize:=+Sizeof(MyFileSize)?//计算资源大小,
并写入辅程尾部
uffer(MyFileSize,sizeof(MyFileSize))?
finally
?
?
end?
except
Result:=False?
Exit?
end?
Result:=True?
end?
有了上面的基础,我们应该很容易看得懂这个函数。其中参数
SourceFile 是要添加的文件,参数
TargetFile 是被添加到的目标文件。比如说把 添加到
里面可以:
Cjt_AddtoFile('',')?如果添加成功就返回True 否则返
回假。
根据上面的函数我们可以写出相反的读出函数:
Function Cjt_LoadFromFile(SourceFile,TargetFile :string):Bool
ean?
var
Source:TFileStream?
Target:TMemoryStream?
MyFileSize:integer?
begin
try
Target:=?
Source:=(SourceFile,fmOpenRead or fmS
hareDenyNone)?
try
(sizeof(
MyFileSize),soFromEnd)?
ffer(MyFileSize,sizeof(MyFileSize))?//读出资源
大小
(MyFileSize,
soFromEnd)?//定位到资源位置
om(Source,MyFileSizesizeof(
MyFileSize))?//取出资源
File(TargetFile)?//存放到文件
finally
?
?
end?
except
Result:=false?
Exit?
end?
Result:=true?
end?
其中参数SourceFile是已经添加了文件的文件名称,参数
TargetFile是取出文件后保存的目标文
件名。比如说Cjt_LoadFromFile('','')?在 中取出
文件保存为。如果取出成功就
返回True 否则返回假。
打开Delphi,新建一个工程,在窗口上放上一个Edit 控件
Edit1 和两个Button:Button1 和
Button2。Button 的Caption 属性分别设置为“确定”和“取
消”。在Button1 的Click 事件中写代码:
var S:string?
begin
S:=ChangeFileExt(e,'.Cjt')?
if ='790617' then
begin
Cjt_LoadFromFile(e,S)?
{取出文件保存在当前路径下并命名"原文件.Cjt"}
Winexec(pchar(S),SW_Show)?{运行"原文件.Cjt"}
ate?{退出程序}
end
else
eBox('密码不对,请重新输入!','密码错误
',MB_ICONERROR+MB_OK)?
编译这个程序,并把EXE 文件改名为。新建一个文本文
件,内容为: head
exefile ,然后把它们拷贝到Delphi 的BIN 目录下,执行
Dos 命令 ,将产
生一个 的文件,这个文件就是我们要的资源文件,先留
着。
我们的头文件已经建立了,下面我们来建立添加程序。
新建一个工程,放上以下控件:一个Edit,一个Opendialog,两个
Button1 的Caption 属性分别
设置为"选择文件"和"加密"。在源程序中添加一句:{$R }
并把 文件拷贝到程序
当前目录下。这样一来就把刚才的 跟程序一起编译了。
在Button1 的Cilck 事件里面写下代码:
if e then :=
ame?
在Button2 的Cilck 事件里面写下代码:
var S:String?
begin
S:=ExtractFilePath()?
if ExtractRes('exefile','head',S+'') then
if Cjt_AddtoFile(,S+'') then
if DeleteFile() then
if RenameFile(S+'',) then
eBox('文件加密成功!','信息
',MB_ICONINFORMATION+MB_OK)
else
begin
if FileExists(S+'') then DeleteFile(S+'')?
eBox('文件加密失败!','信息
',MB_ICONINFORMATION+MB_OK)
end?
end?
其中ExtractRes 为自定义函数,它的作用是把 从资源
文件中取出来。
Function ExtractRes(ResType, ResName, ResNewName : Stri
ng):boolean?
var
Res : TResourceStream?
begin
try
Res := (Hinstance, Resname, Pchar(
ResType))?
try
File(ResNewName)?
Result:=true?
finally
?
end?
except
Result:=false?
end?
end?
注意:我们上面的函数只不过是简单的把一个文件添加到另一个
文件的尾部。实际应用中
可以改成可以添加多个文件,只要根据实际大小和个数定义好偏
移地址就可以了。比如说文件
捆绑机就是把两个或者多个程序添加到一个头文件里面。那些自
解压程序和安装程序的原理也
是一样的,不过多了压缩而已。比如说我们可以引用一个LAH 单
元,把流压缩后再添加,这
样文件就会变的很小。读出来时先解压就可以了。另外,文中
EXE 加密器的例子还有很多不
完善的地方,比如说密码固定为"790617",取出EXE 运行后应该
等它运行完毕后删除等等,读
者可以自行修改。
版权声明:本文标题:delphi制作EXE文件加密器、捆绑、自解压文件及安装程序 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1720915938a850018.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论