關於進程隱藏問題:遠程線程注入方式 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061205213557120.html
網上搜尋了好多關於 關於進程隱藏問題,實現的方式幾乎都是以遠程線程注入方式
我依葫蘆畫瓢的做了一個,但是在目標進程裡面請求記憶體空間的時候老是失敗,不知道為什麼,請高人指點.
代碼如下:
Type
TParam = packed record
fLoadLibrary: DWORD;
fGetProcAddress: DWORD;
sUser: array[0..10] of Char;
sMessage: array[0..11] of Char;
end;
Const
IntoProName='SvcHost.exe';
var
ExeFileName: String;
ContinueLoop: Boolean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
hprocess: DWORD;
param: TParam;
pparam, pfunc: Pointer;
begin
Application.Initialize;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if UpperCase(FProcessEntry32.szExeFile)=UpperCase(IntoProName) then
Begin
hprocess:= FProcessEntry32.th32ProcessID;
Break;
End;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
//找到目標進程
if hprocess = 0 then begin
MessageBox(0, '無法開啟行程', '訊息', MB_OK or MB_ICONWARNING);
Exit;
end;
// 在目標行程內要求參數記憶體
pparam := VirtualAllocEx(hprocess, nil, SizeOf(param), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if pparam = nil then begin
MessageBox(0, '要求參數記憶體失敗', '訊息', MB_OK or MB_ICONWARNING);
CloseHandle(hprocess);
Exit;
end;
Application.Run;
end.
========================================================
運行到 if pparam = nil then begin 這裡時 pparam 總是 Nil
沒人回答,UP一下。
沒人回答,再一下。
沒人回答,還UP一下。
你的問題是需要隱藏進程還是需要遠程線程注入?
有什麼區別麼?
按我的理解這樣也能實現我的需求吧?
我是想在一個系統進程裡面注入我的線程然後運行一個函數。這樣有什麼區別麼?
我的目的只是不讓別人結束掉我的進程而已。
不知道我理解的對不對
你的process沒有足夠的許可權。先用AdjustTokenPrivileges,如果成功瞭然後再來。
而且先要OpenProcess(PROCESS_ALL_ACCESS,...),然後才是你的VirtualAlloc。
如果你不明白自己為什麼做這些,就不要費勁了,想CreateRemoteThread()?如果又失敗了呢?
如何調試?
多看看作業系統和windows系統編程的書,搞清楚一些概念再做。
防止別人結束掉我的進程,和隱藏進程,以及遠程線程注入,是3個不同的概念。
謝謝指點。
馬上翻書 :)。
本人初學還望各位以後多多指教。
UP xuexi
強烈鄙視問題解決後不結貼的人!
強烈鄙視技術問題解決後把貼子轉移到非技術區的人!
鄙視你們!
http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659