网上搜索了好多关于 关于进程隐藏问题,实现的方式几乎都是以远程线程注入方式
我依葫芦画瓢的做了一个,但是在目标进程里面请求内存空间的时候老是失败,不知道为什么,请高人指点.
代码如下: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

解决方案 »

  1.   

    你的process没有足够的权限。先用AdjustTokenPrivileges,如果成功了然后再来。而且先要OpenProcess(PROCESS_ALL_ACCESS,...),然后才是你的VirtualAlloc。如果你不明白自己为什么做这些,就不要费劲了,想CreateRemoteThread()?如果又失败了呢?
    如何调试?多看看操作系统和windows系统编程的书,搞清楚一些概念再做。防止別人結束掉我的進程,和隐藏进程,以及远程线程注入,是3个不同的概念。
      

  2.   

    强烈鄙视问题解决后不结贴的人!
    强烈鄙视技术问题解决后把贴子转移到非技术区的人!
    鄙视你们!http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659