p;else
begin
if FileExists(S+''head.exe'') then DeleteFile(S+''head.exe'');
Application.MessageBox(''文件加密失败!'',''信息'',MB_ICONINFORMATION+MB_OK)
end;
end;
其中ExtractRes为自定义函数,它的作用是把head.exe从资源文件中取出来。
Function ExtractRes(ResType, ResName, ResNewName : String):boolean;
var
Res : TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result:=true;
finally
Res.Free;
end;
except
Result:=false;
end;
end;
注意:我们上面的函数只不过是简单的把一个文件添加到另一个文件的尾部。
实际应用中可以改成可以添加多个文件,只要根据实际大小和个数定义好偏移
地址就可以了。比如说文件捆绑机就是把两个或者多个程序添加到一个头文件
里面。那些自解压程序和安装程序的原理也是一样的,不过多了压缩而已。
比如说我们可以引用一个LAH单元,把流压缩后再添加,这样文件就会变的很小。
读出来时先解压就可以了。
另外,文中EXE加密器的例子还有很多不完善的地方,比如说密码固定为
"790617",取出EXE运行后应该等它运行完毕后删除等等,读者可以自行修改。