[Delphi] Скрыться от Диспетчера задач

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kandi, 15 Aug 2012.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    [Delphi] Скрыться из Диспетчера задач

    Всем добрый день.. Интересует собственно данная тема для Windows Vista | 7. Кто нибудь занимался таким? получалось? Для WinXP нашёл какой-то старый код, пока не проверял, но в инете все пишут что пашет на XP SP1, а на SP2+ уже нет. Дайте совет с чего начать, права на UAC получу без проблем, просто нужно скрыть процесс присутствия брута в диспетчере задач. Может быть кто-то владеет примера по данной теме??? На сколько это вообще реально в Vista | 7? :(
     
    #1 Kandi, 15 Aug 2012
    Last edited: 15 Aug 2012
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    так же как и везде,перехват апи.
     
  3. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Это не тот ответ который бы я хотел услышать конечно. Хотелось бы подробнее. Например какими функциями? Где почитать, что почитать и с чего начать?!
     
    #3 Kandi, 15 Aug 2012
    Last edited: 15 Aug 2012
  4. enzecoder

    enzecoder New Member

    Joined:
    29 Jul 2012
    Messages:
    45
    Likes Received:
    3
    Reputations:
    -1
    где где в интернете где же ещё... хочу не хочу понимаешь ли[​IMG]
     
  5. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Хватить флудить! Нужен slash для нормального ответа я думаю :(
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    инжект, на ассемблере все компактнее и проще для восприятия,как по мне)

    Code:
    program Project2;
    
    
    uses
      windows,TlHelp32,sysutils;
    
    
    type     //создаем тип 
    TMessageBox = function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
    // вся инфа содержится в записи,которую мы копирнем в процесс,передав указатель на нее
    PInject = ^TInject;   // структура в которой инфа по функции( точка входа+параметры)
    TInject = record
    NMessageBox : TMessageBox;
    txt : array [0..255] of Char; //лучше задать статичный массив, что б не париться с ручным выделением памяти и т.п.
    Cap : array [0..255] of Char;
        end;
    
    function inject(inject: PInject): DWORD;stdcall; // внедряемая функа,в нее даем указатель на структуру
    begin
      inject.NMessageBox(0, PChar(@inject^.txt[0]), PChar(@inject^.cap[0]), 0);
      Result := 0;
    end;
    
    procedure Injectcode(PID: Cardinal);   // почти то же что описано у Рихтера по инжекту длл
    var
      RemoteProcess : Cardinal;
      RemoteTId: DWORD;
      Data, Code : Pointer;
      InjRec : TInject;
      hUser32 : Cardinal;
      written : Cardinal;
    begin
      hUser32 := GetModuleHandle('user32.dll'); // подгружаем либу с функой и получаем ее адрес
      InjRec.NMessageBox := GetProcAddress(hUser32, 'MessageBoxA');
      InjRec.Txt := 'I am inside of U!!!';  //ее текст
      InjRec.Cap := 'INJECTED';    // ее кэпшн
    
      RemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);   // открываем процесс с опред. идентификатором
    
      Data := VirtualAllocEx( RemoteProcess, nil, SizeOf(TInject)+128, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE ); // в нем отводим место под код
      Code := Pointer(DWORD(Data) + SizeOf(TInject));
    
      WriteProcessMemory(RemoteProcess, Data, @injrec, SizeOf(TInject), written); // записываем в уч. память столько то байтов
      WriteProcessMemory(RemoteProcess, Code, @inject, 128, written);
    
      CreateRemoteThread(RemoteProcess, nil, 0, Code, Data, 0, RemoteTId); // вызываем в удал. потоке
    
      CloseHandle(RemoteProcess);
    end;
    
    function GetPID(procname: String): integer;    // вспомогательная функа для определения ПИДА по имени процесса
    var
     hSnap: Cardinal;
     ProcessEntry: TProcessEntry32;
     Finding: LongBool;
    begin
     Result := 0;
     procname := AnsiLowerCase(procname);
     hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if hSnap = 0 then
       Exit;
     ProcessEntry.dwSize := SizeOf(ProcessEntry);
     Finding := Process32First(hSnap, ProcessEntry);
     while Finding do
     begin
       if procname = AnsiLowerCase(ExtractFileName(ProcessEntry.szExeFile)) then
       begin
         Result := ProcessEntry.th32ProcessID;
         Break;
       end;
       Finding := Process32Next(hSnap,ProcessEntry);
     end;
     CloseHandle(hSnap);
    end;
    
    var j:integer;
    begin
    j:=getpid('qip.exe');     // инжектимся в квип например,теперь ищи процесс программы :D
    injectcode(j);
    end.
     
  7. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    отлавливай запуск taskmgr.exe и перехватывай ntdll!ZwQuerySystemInformation.
     
  8. D4rkC10ud

    D4rkC10ud New Member

    Joined:
    30 Jul 2012
    Messages:
    27
    Likes Received:
    1
    Reputations:
    0
    wasm.ru тебе в помощь, камрад!