Dll injection

Тема в разделе "WASM.BEGINNERS", создана пользователем Napalm, 8 май 2006.

  1. Napalm

    Napalm New Member

    Публикаций:
    0
    Регистрация:
    8 май 2006
    Сообщения:
    6
    Здарова,

    Вот я скачал пример внедрения dll в этого сайта, тема - "перехват API". Все в принципе работает, но только когда перед внедрением создается новый процесс например нотепада, но если я при запуске просто пытаюсь получить id уже работающего процесса, то dll уже не внедряется. Так вот мне бы хотелось знать как можно внедрить dll получив id уже работающего процесса?

    Спасибо
     
  2. Napalm

    Napalm New Member

    Публикаций:
    0
    Регистрация:
    8 май 2006
    Сообщения:
    6
    Уточняю что я имею ввиду. Вот исходник:



    program aInjectDll;



    uses

    Windows,

    advApiHook;



    var

    StartInfo: TStartupInfo;

    ProcInfo: TProcessInformation;



    begin

    //Запускаем процесс

    ZeroMemory(@StartInfo, SizeOf(TStartupInfo));

    StartInfo.cb := SizeOf(TStartupInfo);

    CreateProcess(nil, 'notepad.exe', nil, nil, False, 0,

    nil, nil, StartInfo, ProcInfo);



    Sleep(2000);



    //внедряем dll

    InjectDll(ProcInfo.hProcess, 'TestDll.dll');

    end.



    Мне надо, чтобы он работал не с CreateProcess, а получал id работающего процесса. Я пробовал OpenProcess, но он чтото у меня не работает, может кто нибуть знает как можно модифицировать этот исходник.
     
  3. label

    label New Member

    Публикаций:
    0
    Регистрация:
    8 май 2006
    Сообщения:
    1
    возможно нужны привелегии отладки
     
  4. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    привилегии отладки нужны, если открываешь system процесс.



    в другом случае делаешь так:


    Код (Text):
    1.  
    2. hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, Process);
    3.  


    и пишешь в него.
     
  5. Napalm

    Napalm New Member

    Публикаций:
    0
    Регистрация:
    8 май 2006
    Сообщения:
    6
    OpenProcess(PROCESS_ALL_ACCESS, FALSE, Process);



    a Process это что? как я понял это не название процесса
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Это его идентификатор. PID называется.



    В TaskManager, который всплывает по Ctrl+Alt+Del, можно включить отображение PID.
     
  7. Napalm

    Napalm New Member

    Публикаций:
    0
    Регистрация:
    8 май 2006
    Сообщения:
    6
    Ну правильно, я изменил код вот так:

    program aInjectDll;



    uses

    Windows,

    advApiHook;



    var

    StartInfo: TStartupInfo;

    ProcInfo: TProcessInformation;



    begin

    Proc2 := Getprocessid(PChar('notepad.exe'));

    //Proc := FProcessEntry32.th32ProcessID;

    H := OpenProcess(PROCESS_ALL_ACCESS, true, Proc2);



    Sleep(2000);



    //внедряем dll

    InjectDll(H, 'TestDll.dll');

    end.



    но все равно последняя функция не работает. Кстати когда я сравниваю процесс полученный с помощью createProcess и OpenProcess, значения разные, так что я совсем запутался
     
  8. jecxz

    jecxz New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    75
    Адрес:
    Brazil
    значения разные, так что я совсем запутался

    PID и должен быть разный ;)