|
#1
|
|||
|
|||
DLL Injection
Собвственно это и интересует
Нагугли тысячи примеров ... но они ни 1 не работают... Проверялось просто ) вписывалась ДЛЛ в AppInit_DLLs в реестре, работает, через нагугленные примеры - НЕТ П.с нужен только метод программного инжекта в определенный процесс.. |
#2
|
||||
|
||||
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Код:
function InjectLib(process_id: DWORD; lib_name: PChar): Integer; var pfnRemote, premote_mem: Pointer; hProcess, hThread: THandle; mem_size: Integer; ret: LongBool; BytesWritten: DWORD; ThreadId: DWORD; begin pfnRemote:= GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA'); if (pfnRemote = nil) then begin Result:= -1; Exit; end; hProcess:= OpenProcess(MAXIMUM_ALLOWED, False, process_id); if hProcess = 0 then begin Result:= -1; Exit; end; mem_size:= strlen(lib_name) + 1; premote_mem:= VirtualAllocEx(hProcess, nil, mem_size, MEM_COMMIT, PAGE_READWRITE); if (premote_mem = nil) then begin CloseHandle(hProcess); Result:= -1; Exit; end; BytesWritten:= 0; ret:= WriteProcessMemory(hProcess, premote_mem, lib_name, mem_size, BytesWritten); if (ret = false) then begin VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE); CloseHandle(hProcess); Result:= -1; Exit; end; ThreadId:= 0; hThread:= CreateRemoteThread(hProcess, nil, 0, pfnRemote, premote_mem, 0, ThreadId); if (hThread = 0) then begin VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE); CloseHandle(hProcess); Result:= -1; Exit; end; WaitForSingleObject(hThread, INFINITE); VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE); CloseHandle(hProcess); CloseHandle(hThread); Result:= 0; end; В Windows XP и ниже работает и для пользовательских процессов и для системных, в Windows Vista и выше мелкософт ограничил CreateRemoteThread только для пользовательских процессов |