quinta-feira, 22 de novembro de 2012

Ocultar Processo do Gerenciador de Tarefas do Windows

Insira este fonte abaixo dentro de um Timer.
Defina o intervalo do timer para 1.

É uma gambiarra! mas uma boa alternativa para evitar usar DLLs ou criar Hooks

Declare na Uses Commctrl;

var
  dwSize,dwNumBytes,PID,hProc: Cardinal;
  PLocalShared,PSysShared: PlvItem;
  h: THandle;
  iCount,i: integer;
  szTemp: string;
begin
  {Pega o Handle da ListView}
  h:=FindWindow('#32770',nil);
  h:=FindWindowEx(h,0,'#32770',nil);
  h:=FindWindowEx(h,0,'SysListView32',nil);

  {Pega o número de itens da ListView}
  iCount:=SendMessage(h, LVM_GETITEMCOUNT,0,0);
  for i:=0 to iCount-1 do
    begin
    {Define o tamanho de cada item da ListView}
    dwSize:=sizeof(LV_ITEM) + sizeof(CHAR) * MAX_PATH;

    {Abre um espaço na memória do NOSSO programa para o PLocalShared}
    PLocalShared:=VirtualAlloc(nil, dwSize, MEM_RESERVE + MEM_COMMIT, PAGE_READWRITE);

    {Pega o PID do processo taskmgr}
    GetWindowThreadProcessId(h,@PID);

    {Abre o processo taskmgr}
    hProc:=OpenProcess(PROCESS_ALL_ACCESS,false,PID);

    {Abre um espaço na memória do taskmgr para o PSysShared}
    PSysShared:=VirtualAllocEx(hProc, nil, dwSize, MEM_RESERVE OR MEM_COMMIT, PAGE_READWRITE);

    {Define as propriedades do PLocalShared}
    PLocalShared.mask:=LVIF_TEXT;
    PLocalShared.iItem:=0;
    PLocalShared.iSubItem:=0;
    PLocalShared.pszText:=LPTSTR(dword(PSysShared) + sizeof(LV_ITEM));
    PLocalShared.cchTextMax:=20;

    {Escreve PLocalShared no espaço de memória que abriu no taskmgr}
    WriteProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);

    {Pega o texto to item i e passa pro PSysShared}
    SendMessage(h,LVM_GETITEMTEXT,i,LPARAM(PSysShared));

    {Passa o PSysShared para o PLocalShared}
    ReadProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);

    {Passa o texto do Item para szTemp}
    szTemp:=pchar(dword(PLocalShared)+sizeof(LV_ITEM));

    {Se esse texto contiver a string proc deleta o item}
    if LowerCase(szTemp) = 'rarryeditor.exe' then
      ListView_DeleteItem(h,i);

    {Libera os espaços de memória utilizados}
    VirtualFree(pLocalShared, 0, MEM_RELEASE);
    VirtualFreeEx(hProc, pSysShared, 0, MEM_RELEASE);

    {Fecha o handle do processo}
    CloseHandle(hProc);
  end;
end;

Nenhum comentário:

Postar um comentário