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

Walk Inject

-

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

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

Ответ
 
Опции темы
Старый 09.09.2011, 15:13   #1
 Пехотинец
Аватар для DAcorp
 
DAcorp на правильном пути
Регистрация: 27.02.2010
Сообщений: 72
Популярность: 71
Сказал(а) спасибо: 27
Поблагодарили 35 раз(а) в 16 сообщениях
Отправить сообщение для DAcorp с помощью ICQ
 
Question Walk Inject

Начал разбираться с инжектом ходьбы и встал столбом из-за того, что не знаю ASM. Подскажите, пожалуйста, на данном примере, в чём я ошибся и как сделать так чтобы работало? Вопросы в сносках в коде:
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
    x,y,z:single;
    flying:DWORD;
begin
CallAddress1:=Pointer($0043AF60); //правильный ли я нашёл поинтер
CallAddress2:=Pointer($00431FB0); //правильный ли я нашёл поинтер
CallAddress3:=Pointer($00470b6c); //правильный ли я нашёл поинтер
x:=aPParams^.Param4;
y:=aPParams^.Param5;
z:=aPParams^.Param6;
flying:=aPParams^.Param1;
 asm
  pushad 
  mov eax, dword ptr [$A5BFCC]
  mov esi, dword ptr [eax+$20]
  mov ecx, dword ptr [esi+$FE0] //Это оффсет чего?
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$0C]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$FE0]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, dword ptr [$A5BFCC]
  mov eax, dword ptr [eax+$20]
  mov eax, dword ptr [eax+$FE0]
  mov eax, dword ptr [eax+$30]
  mov ecx, dword ptr [eax+$4]
  mov eax, x
  mov dword ptr[ecx+$3C], eax
  mov eax, z
  mov dword ptr[ecx+$40], eax
  mov eax, y
  mov dword ptr[ecx+$44], eax
  popad
 end;
end;

Последний раз редактировалось DAcorp; 09.09.2011 в 15:20.
  Ответить с цитированием
Старый 10.09.2011, 05:05   #2
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: Walk Inject

Код:
type
  PWalkParams = ^TWalkParams;
  TWalkParams = packed record
    Packet: array [0..100] of byte;
    BaseAddr, GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
    x,y,z:  single;
    flying: DWORD;
    Param4: array [1..88] of widechar;
  end;

  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 WalkCall(aPParams: PWalkParams);Stdcall;
var
  GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
  x,y,z:  single;
  flying: DWORD;
begin
 GameAddr := aPParams.GameAddr;
 CallAddress1:=aPParams.CallAddress1; // Pointer($00469F00);
 CallAddress2:=aPParams.CallAddress2; // Pointer($0046E090);
 CallAddress3:=aPParams.CallAddress3 // Pointer($0046A340);
 x:=aPParams.x;
 y:=aPParams.y;
 z:=aPParams.z;
 flying:=aPParams.flying;
 asm
  pushad
  mov eax, GameAddr
  mov eax, dword ptr [eax]
  mov esi, dword ptr [eax+$20]
  mov ecx, dword ptr [esi+$FF4]
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$0C]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$FF4]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, GameAddr
  mov eax, dword ptr [eax]
  mov eax, dword ptr [eax+$20]
  mov eax, dword ptr [eax+$FF4]
  mov eax, dword ptr [eax+$30]
  mov ecx, dword ptr [eax+$4]
  mov eax, x
  mov dword ptr[ecx+$20], eax
  mov eax, z
  mov dword ptr[ecx+$24], eax
  mov eax, y
  mov dword ptr[ecx+$28], eax
  popad
 end;
end;


function Walk(x,y,z: single; flying: byte): Boolean; // flying 0-на земле 1- в полёте
var
  aParams: TWalkParams;
begin
  aParams.flying:=flying;
  aParams.BaseAddr := Pointer($A5B90C);
  aParams.GameAddr := Pointer($A5BFCC);
  aParams.CallAddress1 := Pointer($00469F00);
  aParams.CallAddress2 := Pointer($0046E090);
  aParams.CallAddress3 := Pointer($0046A340);
  aParams.x:=x;
  aParams.y:=y;
  aParams.z:=z;
  InjectFunc(hProcess, @WalkCall, @aParams, SizeOf(aParams));
end;

Последний раз редактировалось gurin; 10.09.2011 в 05:11.
  Ответить с цитированием
Пользователь сказал cпасибо:
DAcorp (14.09.2011)
Старый 14.09.2011, 02:01   #3
 Пехотинец
Аватар для DAcorp
 
DAcorp на правильном пути
Регистрация: 27.02.2010
Сообщений: 72
Популярность: 71
Сказал(а) спасибо: 27
Поблагодарили 35 раз(а) в 16 сообщениях
Отправить сообщение для DAcorp с помощью ICQ
 
По умолчанию Re: Walk Inject

Спасибо, на днях, как лапки дойдут протестирую и посмотрю, в чём ошибся

Добавлено через 22 часа 4 минуты
Хм... Полностью скопировал код... Не работает...
Цитата:
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax

А здесь что значат $20 $24 и $28?

Может эт я что-то накосячил? Выкладываю PAS, только, пожалуйста, объясните что и как там, а не просто выкладывайте готовое решение Я разобраться хочу максимально по возможности

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    eClient: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    eTarget: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    eXYZ: TEdit;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure eClientClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Function GetCharInt(Adress: Integer): Integer;
  end;

type
  PWalkParams = ^TWalkParams;
  TWalkParams = packed record
    Packet: array [0..100] of byte;
    BaseAddr, GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
    x,y,z:  single;
    flying: DWORD;
    Param4: array [1..88] of widechar;
  end;

var
  Form1: TForm1;
  BaseAdress: Integer;

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 WalkCall(aPParams: PWalkParams);Stdcall;
var
  GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
  x,y,z:  single;
  flying: DWORD;
begin
 GameAddr := aPParams.GameAddr;
 CallAddress1:=aPParams.CallAddress1; // Pointer($00469F00);
 CallAddress2:=aPParams.CallAddress2; // Pointer($0046E090);
 CallAddress3:=aPParams.CallAddress3; // Pointer($0046A340);
 x:=aPParams.x;
 y:=aPParams.y;
 z:=aPParams.z;
 flying:=aPParams.flying;
 asm
  pushad
  mov eax, GameAddr
  mov eax, dword ptr [eax]
  mov esi, dword ptr [eax+$20]
  mov ecx, dword ptr [esi+$FF4]
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$0C]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$FF4]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, GameAddr
  mov eax, dword ptr [eax]
  mov eax, dword ptr [eax+$20]
  mov eax, dword ptr [eax+$FF4]
  mov eax, dword ptr [eax+$30]
  mov ecx, dword ptr [eax+$4]
  mov eax, x
  mov dword ptr[ecx+$20], eax
  mov eax, z
  mov dword ptr[ecx+$24], eax
  mov eax, y
  mov dword ptr[ecx+$28], eax
  popad
 end;
end;

function Walk(x,y,z: single; flying: byte; hProcess: HWND): Boolean; // flying 0-на земле 1- в полёте
var
  aParams: TWalkParams;
begin
  aParams.flying:=flying;
  aParams.BaseAddr := Pointer($A5B90C);
  aParams.GameAddr := Pointer($A5BFCC);
  aParams.CallAddress1 := Pointer($00469F00);
  aParams.CallAddress2 := Pointer($0046E090);
  aParams.CallAddress3 := Pointer($0046A340);
  aParams.x:=x;
  aParams.y:=y;
  aParams.z:=z;
  InjectFunc(hProcess, @WalkCall, @aParams, SizeOf(aParams));
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
 eTarget.Text:=IntToStr(GetCharInt(2828));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  Buf, Process: integer;
  wr: cardinal;
  PID: Cardinal;
  X,Y,Z: Single;
begin
 GetWindowThreadProcessId(FindWindow(nil,pChar(eClient.Text)), @PId);
 process:=OpenProcess(PROCESS_ALL_ACCESS, false, PId);
 if process<>0 then begin
  readprocessmemory(process, ptr(BaseAdress), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+$1c), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+$20), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+$3C), @X, sizeof(X), wr);
  readprocessmemory(process, ptr(Buf+$44), @Y, sizeof(Y), wr);
  readprocessmemory(process, ptr(Buf+$40), @Z, sizeof(Z), wr);
  eXYZ.Text:=FloatToStr(X)+':'+FloatToStr(Y)+':'+FloatToStr(Z);
  CloseHandle(process);
 end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 Walk(1,1,700,1,FindWindow(nil,pChar(eClient.Text)));
end;

procedure TForm1.eClientClick(Sender: TObject);
begin
 ShowMessage(IntToStr(FindWindow(nil,pChar(eClient.Text))));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 BaseAdress:=$A5B90C;
end;


Function TForm1.GetCharInt(Adress: Integer): Integer;
var
  Buf, Process: integer;
  wr: cardinal;
  PID: Cardinal;
begin
 GetWindowThreadProcessId(FindWindow(nil,pChar(eClient.Text)), @PId);
 process:=OpenProcess(PROCESS_ALL_ACCESS, false, PId);
 if process<>0 then begin
  readprocessmemory(process, ptr(BaseAdress), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+$1c), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+$20), @Buf, sizeof(Buf), wr);
  readprocessmemory(process, ptr(Buf+Adress), @buf, sizeof(Buf), wr);
  Result:=Buf;
  CloseHandle(process);
 end;
end;



end.

Последний раз редактировалось DAcorp; 15.09.2011 в 00:05. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Программа] Inject Карикатуро Общение и обсуждение S4 League 4 02.08.2011 14:34
[Продам] Inject ВХ nokia03 Point Blank 1 23.01.2011 05:29
Inject DLL in CS 1.6 yg-400 Общение и обсуждение Counter-Strike 2 14.09.2010 21:42
[Обсуждение] inject horderbord Общение и обсуждение Aion 3 26.05.2010 19:42

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

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

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