Сейчас на форуме: bartolomeo, tyns777 (+6 невидимых)

 eXeL@B —› Программирование —› Loader + WriteProcessMemory в Windows7 x64
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 7.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 февраля 2011 17:44 · Поправил: Sumeru
· Личное сообщение · #1

Привет всем, помогите, пожалуйста:

Нужно выполнить стандартную процедуру:
1. Запустить ехе файл и подменить пару байт в нем
За основу был взят код:
Code:
  1. program loader;
  2. uses
  3. Windows, Messages;
  4. {$R Loader.RES}
  5. var
  6.  si : Startupinfo;
  7.  pi : Process_Information;
  8.  NewData : array[0..1] of byte = ($90,$90);
  9.  NewDataSize : DWORD;
  10.  Bytesread : DWORD;
  11.  Olddata : array[0..1] of byte;
  12. Begin
  13.  ZeroMemory(@si,sizeof(si));
  14.  ZeroMemory(@pi,sizeof(pi));
  15.  FillChar(Si,Sizeof(si),0);
  16.  Si.cb:=Sizeof(si);
  17.  
  18.  NewDataSize := sizeof(newdata);
  19.  IF CreateProcess(nil,'Example.exe',nil,nil,FALSE,Create_Suspended,nil,nil  ,si,pi) = true then
  20.   begin
  21.    ReadProcessMemory(pi.hprocess,Pointer($403CEA),@olddata,2,bytesread);
  22.  if (olddata[0] = $75) and (olddata[1] = $19) then
  23.   begin
  24.    WriteProcessMemory(pi.hProcess, Pointer($403CEA), @NewData, NewDataSize, bytesread);
  25.    ResumeThread(pi.hThread);
  26.    CloseHandle(pi.hProcess);
  27.    CloseHandle(PI.hThread);
  28.   end else
  29.   begin
  30.    Messagebox(0,pchar('Bytes not found! Wrong version?...'),pchar('Error'),mb_iconinformation);
  31.    TerminateProcess(PI.hProcess,0);
  32.    CloseHandle(PI.hProcess);
  33.    CloseHandle(PI.hThread);
  34.   end;
  35. end;
  36. end.


Под х32 все замечательно работает, под х64 процесс стартует, но замены не происходит.
При этом VirtualProtect возвращает под х32 STATUS_OK, а под х64 - 0
А вот чтение/запись - ошибка.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 01 марта 2011 17:53 · Поправил: Clerk
· Личное сообщение · #2

Alchemistry
> Ахтунг. Мало того что она недокументированная так по функционалу все что она делает это смотрит первый модуль из Peb->Ldr->InLoadOrderModuleList.
Сам ты ахтунг. Эта функция ищет описатель модуля по произвольному адресу, тоетсь ищет модуль в проекции которого находится ссылка. Понятие недокумментированности нам не понятно, функа есть в экспорте и активно юзается.

> Весь ее пэйлоад это вызов в локе NtHeaders = RtlImageNtHeader(Base);
Эта функа ищет проекцию по ссылке в неё. Учите матчасть.

> Системным функам место в ntdll.dll и в натив приложениях в нормальных программах в импорте их быть не должно.
Вот это полный ахтунг. Ты еба что архитектор.. Спасибо поржали.


<< . 1 . 2 .
 eXeL@B —› Программирование —› Loader + WriteProcessMemory в Windows7 x64
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати