
17.02.2010, 12:07
|
|
Познающий
Регистрация: 28.01.2009
Сообщений: 90
С нами:
9096406
Репутация:
80
|
|
Address = $01B40C64;
PokeValue = $FFFFFFFF;
Откуда берутся эти значения?
Address - Виртуальный адрес в памяти, по которому нужно изменить значение.
PokeValue - Число (размер 4 байта).
т.е. через WriteProcessMemory() по этому адресу записывается значение размером в 4 байта.
Каким софтом пользоваться?
Artmoney, OllyDbg, IDA и подобными.
Есть у кого нибудь примеры с комментариями по:
CreateRemoteThread
Код:
{Level 0}
function InjectLibraryAPI(lpProcessID: Cardinal; lpDllname: String): LongBool;
var
hProc: Cardinal;
oAlloc: Pointer;
cWPM: Cardinal;
hRemThread: Cardinal;
begin
result := false;
SetLastError(ERROR_SUCCESS);
hProc := OpenProcess(PROCESS_ALL_ACCESS, false, lpProcessID); // открываем процесс
if hProc <> 0 then begin
oAlloc := VirtualAllocEx(hProc, 0, length(lpDllname), MEM_COMMIT, PAGE_EXECUTE_READWRITE); // если существует выделяем память в процессе
if oAlloc <> nil then begin
if WriteProcessMemory(hProc, oAlloc, PChar(lpDllName), length(lpDllName), cWPM) = true then begin // если получилось выделить, то копируем туда содержимое своей DLL
CreateRemoteThread(hProc, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), oAlloc, 0, hRemThread); // создаем удаленный поток, по адресу kernel32.dll -> LoadLibraryA, чтобы подгрузить DLL средствами WinAPI, в чужом процессе
if GetLastError = ERROR_SUCCESS then result := true;
end;
end;
end;
CloseHandle(hProc); // закрываем Handle процесса
end;
|
|
|