Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Немогу сделать инжект

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 04.06.2013, 13:34   #1
 Разведчик
Аватар для Envy12
 
Envy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личностьEnvy12 определенно авторитетная личность
Регистрация: 11.06.2010
Сообщений: 3
Популярность: 1189
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 1 сообщении
Отправить сообщение для Envy12 с помощью Skype™
 
По умолчанию Немогу сделать инжект

Пробовал пример на дельфи, адреса все заменил на актуальные, да и вообще пробовал инжектить свою функцию, ничего не работает.
Дельфи
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  type
  PParams = ^TParams;
  TParams = packed record
    WID: DWord;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
  aParamsSize: DWord);
var
  hThread: THandle;
  lpNumberOfBytes: DWord;
  ThreadAddr, ParamAddr: Pointer;
begin
  if ProcessID<>0 then
  begin
    // ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Также запишем параметры к ней
    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Создаем поток, в котором все это будет выполняться.
    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);

    // ---- Ожидаем завершения функции
    WaitForSingleObject(hThread, INFINITE);

    // ---- подчищаем за собой
    CloseHandle(hThread);
    VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
  end
end;

procedure TargetCall(aPParams:PParams);Stdcall; //StdCall - обязательно, указывает что аргументы попадают в стек в обратном (стандартном) порядке
var                                         //
  P1: DWord;                                //
begin                                       //
  P1:=aPParams^.WID;                        //
  asm
    MOV EDI, P1                             // Вносим WID моба в регистр EDI
    MOV EBX, $005889B0                      // Вносим в свободный регистр адрес функции
    MOV EAX,DWORD PTR DS:[$526FD4]          //
    PUSH EDI                                // ; /Arg1
    MOV ECX,DWORD PTR DS:[EAX+$20]          // ; |
    ADD ECX,$0EC                            // ; |
    CALL EBX                                // ; \elementc.00606A70
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  aParams: TParams;
  PID, hProcess: DWord;
begin
  GetWindowThreadProcessId( FindWindow('ElementClient Window', nil), @PID);
  hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  aParams.WID:= StrToInt('$' + Edit1.Text);          // WID персонажа\моба\NPC
  InjectFunc(hProcess, @TargetCall, @aParams, SizeOf(aParams ) );  // инжектим функцию
  CloseHandle( hProcess); // закрываем хендл процесса
end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
  Edit1.SelectAll;
end;

end.
Так как мой основной язык это autoit, я решил детально изучить рабочую функцию инжекта в СС. Переписал её, но ничего не инжектится, в памяти инжекты видны, я подозреваю что как-то не так работает CreateRemoteThread.
Autoit
Код:
$PID = ProcessExists("elementclient.exe")
$open = DllCall("Kernel32.dll", "int", "OpenProcess", "int", 0x1F0FFF, "int", 1, "int", $PID)
$code = "56 6A 02 E8 C8 C4 14 00 8B F0 83 C4 04 85 F6 74 1E 66 C7 06 55 00 A1 D4 6F 92 00 6A 02 56 8B 48 20 E8 4A 0F FE FF 56 E8 B4 C4 14 00 83 C4 04 5E C3"
$codestr = DllStructCreate("byte[" & StringLen($code) / 2 & "]")
For $i = 1 To DllStructGetSize($codestr)
DllStructSetData($codestr, 1, Dec(StringMid($code, ($i - 1) * 2 + 1, 2)), $i)
Next
$call = DllCall("Kernel32.dll", "ptr", "VirtualAllocEx", "HANDLE", $open[0], "ptr", 0, "ULONG_PTR", DllStructGetSize($codestr), "DWORD", 0x00001000, "DWORD", 0x40)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $call[0] & @CRLF & $error[0])
$call1 = DllCall("Kernel32.dll", "bool", "WriteProcessMemory", "HANDLE", $open[0], "ptr", $call[0], "int", DllStructGetPtr($codestr), "int", DllStructGetSize($codestr), "int", 0)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $call1[0] & @CRLF & $error[0])
$call1 = DllCall("Kernel32.dll", "int", "CreateRemoteThread", "HANDLE", $open[0], "int", 0, "ULONG_PTR", DllStructGetSize($codestr), "int", $call[0], "ptr", DllStructGetPtr($codestr), "DWORD", 0, "DWORD_PTR", 0)
$error = DllCall("Kernel32.dll", "DWORD", "GetLastError")
MsgBox(0, '', $call1[0] & @CRLF & $error[0])
Здесь инжектится функция смены брони на стиль и обратно.
Я еще думал что когда игра не вылетала после инжекта, то это пакет был опкод был неверный.
Вообщем, как сделать чтобы работало?)
  Ответить с цитированием
Старый 05.06.2013, 00:36   #2
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Немогу сделать инжект

Envy12,
пост №6 в этой теме: http://zhyk.ru/forum/showthread.php?t=697089
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 05.06.2013, 15:05   #3
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Немогу сделать инжект

Цитата:
Сообщение от Envy12Посмотреть сообщение
Так как мой основной язык это autoit, я решил детально изучить рабочую функцию инжекта в СС. Переписал её...

А вот теперь не ясно, ты хочешь добиться того, что бы у тебя на AutoIt всё работало или всё же на Delphi?
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать авто инжект в своём Wallhack? vova945 Общение разработчиков 0 16.02.2012 14:48
[Помогите!] NewAion l2phx немогу сделать dreamzy Общение и обсуждение Aion 8 08.02.2012 23:24

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 00:41.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net