Показать сообщение отдельно

  #6  
Старый 17.02.2010, 12:07
flacs
Познающий
Регистрация: 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;
 
Ответить с цитированием