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

 eXeL@B —› Вопросы новичков —› Трейнер с инъекцией кода
Посл.ответ Сообщение

Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 14 ноября 2011 13:43
· Личное сообщение · #1

есть такой код:

Code:
  1. function InjectLibraryAPI(lpProcessID: Cardinal; lpDllname: String): LongBool;
  2. var
  3.  hProc: Cardinal;
  4.  oAlloc: Pointer;
  5.  cWPM: Cardinal;
  6.  hRemThread: Cardinal;
  7.  
  8. begin
  9.  result := false;
  10.  SetLastError(ERROR_SUCCESS);
  11.  hProc := OpenProcess(PROCESS_ALL_ACCESS, false, lpProcessID); // открываем процесс
  12.  if hProc <> 0 then begin
  13.     oAlloc := VirtualAllocEx(hProc, 0, length(lpDllname), MEM_COMMIT, PAGE_EXECUTE_READWRITE); // если существует выделяем память в процессе
  14.  if oAlloc <> nil then begin
  15.  if WriteProcessMemory(hProc, oAlloc, PChar(lpDllName), length(lpDllName), cWPM) = true then begin // если получилось выделить, то копируем туда содержимое своей DLL
  16.     CreateRemoteThread(hProc, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA'), oAlloc, 0, hRemThread); // создаем удаленный поток, по адресу kernel32.dll -> LoadLibraryA, чтобы подгрузить DLL средствами WinAPI, в чужом процессе
  17.    if GetLastError = ERROR_SUCCESS then result := true;
  18.    end;
  19. end;
  20. end;
  21. CloseHandle(hProc); // закрываем Handle процесса
  22. end;


Все теперь получилось, вопрос другой теперь, как мне можно вызывать функции игры из программы? Допустим есть адрес функции которая дает игроку деньги, как мне ее вызвать из чужого пространства, ну и что-бы игрок получил оружие. Вот как вызвать?



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 14 ноября 2011 14:11
· Личное сообщение · #2

VintProg
нужен прототип функции, то есть с какими параметрами она вызывается, что передается. Может лучше изменить функцию, так, чтобы она давала много денег или не убирала. Копай Cheat Engine, ее исходники есть полностью, бери не хочу....



Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 14 ноября 2011 15:22
· Личное сообщение · #3

Можно все по подробней, так как это все таки чужой процесс...



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 14 ноября 2011 15:50
· Личное сообщение · #4

VintProg
http://www.wasm.ru/series.php?sid=8




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 ноября 2011 19:33
· Личное сообщение · #5

VintProg пишет:
Вот как вызвать?

--> Вот так <-- А если серьёзно - код, который вы привели - базовый для простейшего инжекта. Далее у вас внутри чужого процесса либа, которая может вызывать всё, что душе угодно, потому что этот чужой для вас процесс теперь для неё свой. А вот как вызвать - это надо реверсить игру.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 14 ноября 2011 23:57
· Личное сообщение · #6

Если ты знаешь адрес нужной тебе функции, принимаемые и возвращаемы значения, то простейший пример вызова чужой функции из своей длл будет таким

typedef DWORD (WINAPI *ProtoFun)( DWORD a, DWORD b, DWORD c);

ProtoFun f = (ProtoFun)0x401000;

DWORD result = f( 0, 1, 2 );

но придется правильно подобрать прототип функции, а так же учесть кто выравнивает стек.


 eXeL@B —› Вопросы новичков —› Трейнер с инъекцией кода
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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