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

[Руоф] Код для инжекта в память.

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы
Старый 08.10.2013, 18:22   #271
 Разведчик
Аватар для =[Rush]=
 
=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен
Регистрация: 28.03.2013
Сообщений: 20
Популярность: 313
Сказал(а) спасибо: 11
Поблагодарили 29 раз(а) в 9 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от GorrilazПосмотреть сообщение
Код:
procedure AutoPathCall(aPParams:PParams); stdcall;
var
  addr:pointer;
  x,y,z:Dword; 
begin            
  x:=548; 
  y:=673;
  z:=50;
  addr := Pointer($006F55E0);
  asm
    pushad
      MOV EDI,y            // есть предположение,
      MOV ESI,x           // что здесь нужно поменять местами X, Z и Y
      MOV EAX,DWORD PTR DS:[$38B6C]  // base_addr
      PUSH 0                          //     ; /Arg7 = 00000000
      PUSH EDI                        //     ; |Arg6
      MOV ECX,DWORD PTR DS:[EAX+$1C]  //     ; |
      PUSH ESI                        //     ; |Arg5
      PUSH 0                          //     ; |Arg4 = 00000000
      PUSH 0                          //     ; |Arg3 = 00000000
      PUSH 0                          //     ; |Arg2 = 00000000
      PUSH $14A                       //     ; |Arg1 = 0000014A
      call addr                       //     ; \elementc.00438770

      
      MOV EDX,DWORD PTR DS:[$38B6C]           //;  elementc.009C14F8
      XOR EAX,EAX
      MOV AL,0
      PUSH 0                                   //; /Arg7 = 00000000
      MOV ECX,DWORD PTR DS:[EDX+$1C]           //; |
      MOV EDX,z                                //; |
      PUSH EAX                                 //; |Arg6 = 00000000
      PUSH EDX                                 //; |Arg5 = Высота полета
      PUSH 1                                   //; |Arg4 = 00000001
      PUSH 0                                   //; |Arg3 = 00000000
      PUSH 0                                   //; |Arg2 = 00000000
      PUSH $14A                                //; |Arg1 = 0000014A
      CALL addr                                //; \elementc.00438770
    popad
  end;
end;
После выполнения кода персонаж стремится улететь ужасно далеко за карту.

На сколько я понял в отличие от WalkCall процедуре AutoPathCall нужны реальные координаты (отображаемые в окне игры).
Код:
procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
...
Но на всякий случай я попробовал перевести значения координат из реальных в те, что считываются (Walk1Adress = $00484690 Walk2Adress = $004889B0; Walk3Adress = $00484B00).

x,y,zword; // здесь менял тип данных на single
x:=548; //пробовал передавать вот так StrToFloat(548-400)*10)) все координаты по соответствующим обратным формулам из реальных.

Полевые испытания не позволили найти ответ на вопрос, что не так.

Для текущей версии руоффа адрес AutoPath=$00447A20.
Координаты в таком виде:
Код:
x:=round(x-400)*10;
y:=round(y-550)*10;
z

Последний раз редактировалось =[Rush]=; 08.10.2013 в 18:24.
  Ответить с цитированием
Старый 09.10.2013, 00:15   #272
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от GorrilazПосмотреть сообщение
После выполнения кода персонаж стремится улететь ужасно далеко за карту.

Перс, скорее всего, летит в нужном направлении, но на карте маршрут рисуется не верный, уходит в правый верхний угол. В моем боте пока тоже самое, позже хочу поправить.
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 09.10.2013, 00:43   #273
 Разведчик
Аватар для Gorrilaz
 
Gorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известен
Регистрация: 23.06.2009
Сообщений: 38
Популярность: 392
Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 2 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от =[Rush]=Посмотреть сообщение
Для текущей версии руоффа адрес AutoPath=$00447A20.
Координаты в таком виде:
Код:
x:=round(x-400)*10;
y:=round(y-550)*10;
z

Пробовал так:

Цитата:
Но на всякий случай я попробовал перевести значения координат из реальных в те, что считываются (Walk1Adress = $00484690 Walk2Adress = $004889B0; Walk3Adress = $00484B00).

x,y,zword; // здесь менял тип данных на single
x:=548; //пробовал передавать вот так StrToFloat(548-400)*10)) все координаты по соответствующим обратным формулам из реальных.

Всё ровно не в ту сторону даже летит.
________________
Три рубля много, спасибо хватит!
Запуск и переименование окон PW

Последний раз редактировалось Gorrilaz; 09.10.2013 в 00:46.
  Ответить с цитированием
Старый 09.10.2013, 01:48   #274
 Разведчик
Аватар для =[Rush]=
 
=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен
Регистрация: 28.03.2013
Сообщений: 20
Популярность: 313
Сказал(а) спасибо: 11
Поблагодарили 29 раз(а) в 9 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от GorrilazПосмотреть сообщение
Всё ровно не в ту сторону даже летит.

Странно, у меня всё норм.
Маршрут на карте и радаре вырисовывается криво, но летит куда надо.
Код:
unit Unit1;

interface

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

type
  PParams = ^TParams;
  TParams = packed record
    Px, Py, Pz: DWORD;
  end;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  BaseAdress = $00C38B6C;
  AutoPathAdress = $00447A20;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure InjectFunc(hProcess: Cardinal; Func, aParams: Pointer; aParamsSize: DWORD);
var
  ThreadAddr, ParamAddr: Pointer;
  lpNumberOfBytes: DWORD;
  hThread: THandle;
begin
  if hProcess<>0 then
    begin
      ThreadAddr:=VirtualAllocEx(hProcess,nil,256,MEM_COMMIT,PAGE_READWRITE);
      WriteProcessMemory(hProcess,ThreadAddr,Func,256,lpNumberOfBytes);
      ParamAddr:=VirtualAllocEx(hProcess,nil,aParamsSize,MEM_COMMIT,PAGE_READWRITE);
      WriteProcessMemory(hProcess,ParamAddr,aParams,aParamsSize,lpNumberOfBytes);
      hThread:=CreateRemoteThread(hProcess,nil,0,ThreadAddr,ParamAddr,0,lpNumberOfBytes);
      WaitForSingleObject(hThread,INFINITE);
      CloseHandle(hThread);
      VirtualFreeEx(hProcess,ParamAddr,0,MEM_RELEASE);
      VirtualFreeEx(hProcess,ThreadAddr,0,MEM_RELEASE);
    end
end;

procedure AutoPathCall(aPParams: PParams); stdcall;
var
  Addr: Pointer;
  x,y,z: DWORD;
begin
  x:=aPParams^.Px;
  y:=aPParams^.Py;
  z:=aPParams^.Pz;
  Addr:=Pointer(AutoPathAdress);
  asm
    pushad
      MOV EDI,y
      MOV ESI,x
      MOV EAX,DWORD PTR DS:[BaseAdress]
      PUSH 0
      PUSH EDI
      MOV ECX,DWORD PTR DS:[EAX+$1C]
      PUSH ESI
      PUSH 0
      PUSH 0
      PUSH 0
      PUSH $14A
      call addr
      MOV EDX,DWORD PTR DS:[BaseAdress]
      XOR EAX,EAX
      MOV AL,0
      PUSH 0
      MOV ECX,DWORD PTR DS:[EDX+$1C]
      MOV EDX,z
      PUSH EAX
      PUSH EDX
      PUSH 1
      PUSH 0
      PUSH 0
      PUSH $14A
      CALL addr
    popad
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  aParams: TParams;
  hProcess, ProcessID: DWORD;
  x, y, z: Extended;
begin
  ProcessID:=0;
  GetWindowThreadProcessId(FindWindow(nil,PChar('Perfect World')),@ProcessID);
  if ProcessID<>0 then
    begin
      hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID);
      x:=552.88;
      y:=653.16;
      z:=79;
      aParams.Px:=Round((x-400)*10);
      aParams.Py:=Round((y-550)*10);
      aParams.Pz:=Round(z);
      InjectFunc(hProcess,@AutoPathCall,@aParams,SizeOf(aParams));
      CloseHandle(hProcess);
    end;
end;

end.
По этим кордам x:=552.88; y:=653.16; z:=79; должен прилететь к тарелке в ГД.
Вложения
Тип файла: rar AutoPathCall.rar (307.6 Кб, 52 просмотров)
  Ответить с цитированием
Пользователь сказал cпасибо:
Gorrilaz (09.10.2013)
Старый 09.10.2013, 05:56   #275
 Разведчик
Аватар для Gorrilaz
 
Gorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известенGorrilaz скоро будет известен
Регистрация: 23.06.2009
Сообщений: 38
Популярность: 392
Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 2 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Вроде разобрался думал round не обязателен... Спасибо.
________________
Три рубля много, спасибо хватит!
Запуск и переименование окон PW
  Ответить с цитированием
Старый 09.10.2013, 06:23   #276
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от =[Rush]=Посмотреть сообщение
aParams.Pz:=Round(z);

А разве не так:

aParams.Pz:=Round(z*10);
________________
MultiXBot
MultiX_POT
  Ответить с цитированием
Старый 09.10.2013, 08:15   #277
 Разведчик
Аватар для =[Rush]=
 
=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен
Регистрация: 28.03.2013
Сообщений: 20
Популярность: 313
Сказал(а) спасибо: 11
Поблагодарили 29 раз(а) в 9 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от fds255Посмотреть сообщение
А разве не так:

aParams.Pz:=Round(z*10);

Не так)

35=$23

aParams.Pz:=Round(z);

  Ответить с цитированием
Старый 09.10.2013, 08:39   #278
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от GorrilazПосмотреть сообщение
Вроде разобрался думал round не обязателен... Спасибо.

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
Если я верно помню то сюда следует писать округленные реальные координаты (тоесть те, что читаются из области памяти игры).

Да это просто цирк какой-то. Ведь не на английском написано же.
  Ответить с цитированием
Старый 09.10.2013, 09:11   #279
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от =[Rush]=Посмотреть сообщение
Не так)


Перевод реальных координат в те, которые ты видишь на экране:

X / 10 + 400
Y / 10 + 550
Z / 10


Соответственно обратный процесс:

x:=round(x-400)*10;
y:=round(y-550)*10;
z:=round(z*10);

)))



Цитата:
Сообщение от =[Rush]=Посмотреть сообщение
35=$23

aParams.Pz:=Round(z);


И причем тут перевод из Dec в Hex ?
________________
MultiXBot
MultiX_POT

Последний раз редактировалось fds255; 09.10.2013 в 09:27.
  Ответить с цитированием
Старый 09.10.2013, 20:50   #280
 Разведчик
Аватар для =[Rush]=
 
=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен=[Rush]= скоро будет известен
Регистрация: 28.03.2013
Сообщений: 20
Популярность: 313
Сказал(а) спасибо: 11
Поблагодарили 29 раз(а) в 9 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от fds255Посмотреть сообщение
Перевод реальных координат в те, которые ты видишь на экране:

X / 10 + 400
Y / 10 + 550
Z / 10


Соответственно обратный процесс:

x:=round(x-400)*10;
y:=round(y-550)*10;
z:=round(z*10);

)))

Вопрос был, в каком виде передавать кординаты в функцию AutoPath.

Дак вот, так всё верно:

Код:
aParams.Px:=Round((x-400)*10); //реальный округленный "x" из памяти клиента
aParams.Py:=Round((y-550)*10); //реальный округленный "y" из памяти клиента
aParams.Pz:=Round(z); //Округленная высота, в таком виде, в котором её видим на экране
  Ответить с цитированием
Старый 09.10.2013, 21:54   #281
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

=[Rush]=

Судя по твоей вырезке из Олли, прописываются Z координаты указанные на экране, при проверке у меня в ECX получилось тоже самое. В общем, данная строка ловится если перетащить ползунок высоты при автопилоте, соответственно далее, скорее всего, данная цифра преобразуется в реальную координату, т.е. умножается на 10. Я же, при написании проги, использую сразу реальные координаты, т.е. Z*10 и все отрабатывает отлично. Фиг знает что там намутили китайцы, но и тот и другой случай приемлемы )))
________________
MultiXBot
MultiX_POT

Последний раз редактировалось fds255; 10.10.2013 в 00:26.
  Ответить с цитированием
Старый 09.02.2014, 02:11   #282
 Разведчик
Аватар для darkwellroad
 
darkwellroad никому не известный тип
Регистрация: 25.10.2012
Сообщений: 19
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 11 раз(а) в 4 сообщениях
Отправить сообщение для darkwellroad с помощью Skype™
 
По умолчанию Re: [Руоф] Код для инжекта в память.

По той же избитой теме с нпс. Просто выкидывает. Может подскажите что?
Код:
unit Unit16;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm16 = class(TForm)
    Button1: TButton;
  procedure InjectFunc(ProcessID: NativeUInt; Func, aParams: Pointer; aParamsSize: NativeUInt);
    procedure TalkToNPC(NPCID:Cardinal);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  PParams = ^TParams;
  TParams = packed record
    Packet: array [0..100] of byte;
    Param1,Param2,Param3: DWord;
    Param4: array [1..100] of widechar;
  end;

const
  PW_BASE_ADDRESS = $00C38B6C;

var
  Form16: TForm16;

implementation

{$R *.dfm}

procedure TForm16.Button1Click(Sender: TObject);
begin
  TalkToNPC($801045de);
end;

procedure TForm16.InjectFunc(ProcessID: size_t; Func, aParams: Pointer; aParamsSize: NativeUInt);
  var
    hThread: THandle;
    lpNumberOfBytes: NativeUInt;
    lpThreadId: Cardinal;
    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, lpThreadId);
      WaitForSingleObject(hThread, INFINITE);
      CloseHandle(hThread);
      VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
      VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
    end
  end;

procedure PacketCall(aPParams:PParams); stdcall;
  var
  CallAddress,pPacket:pointer;
  Len:size_t;
begin
  CallAddress:=Pointer($006F55E0);
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, dword ptr [PW_BASE_ADDRESS]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;

procedure TalkToNPCCall(aPParams:PParams);Stdcall;
var
  NPCID:size_t;
  CallAddress:Pointer;
begin
NPCID:=aPParams^.Param1;
CallAddress:=ptr($006F55E0);
 asm
  pushad
  mov edx, dword ptr [PW_BASE_ADDRESS]
  mov ecx, dword ptr [edx+$20]
  push NPCID
  add ecx, $EC
  call CallAddress
  popad
 end;
end;

procedure TForm16.TalkToNPC(NPCID:Cardinal);
var
  aParams:TParams;
  v:HWND;
  Pid,hProcess:size_t;
begin
v:=FindWindow(nil,Pchar('Perfect World'));
if v <> 0
 then
  begin
  GetWindowThreadProcessId(v,@PId);
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PId);
  aParams.Param1:=NPCID;
  Form16.InjectFunc(hProcess,@TalkToNPCCall,@aParams,4);
end;
end;

end.
________________

Продажа различных аккаунтов с балансом - [Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 18.03.2014, 09:48   #283
 Пехотинец
Аватар для iGesha
 
iGesha скоро будет известенiGesha скоро будет известенiGesha скоро будет известен
Регистрация: 04.12.2013
Сообщений: 66
Популярность: 228
Сказал(а) спасибо: 36
Поблагодарили 43 раз(а) в 24 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Доброго времени суток.
Возникло у меня желание заморочиться с инжектом на AutoIT. Собственно, особой разницы нет, так как, что дельфи, что аутоит используют функции WinAPI. В общем, попытался я сделать инжект кода отправки пакета, руководствуясь этой темой. Т.к. аутоит не поддерживает ассемблер в явном виде, сделал вставку опкодом, сгенерированным CE. Сам код взял из первого поста этой темы. А именно
Код:
    pushad
    mov ecx, dword ptr [PW_BASE_ADDRESS]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
Правда, пришлось поменять прямой вызов на
Код:
mov EDX, 006F55E0
call EDX
Что характерно, инжект вроде даже рабоатет. Для проверки отправлял пакет, меняющий содержимое двух ячеек инвентаря.
Ячейки меняются, но после этого клиент виснет и вылетает с ошибкой. отсюда вопрос: где могут быть грабли?
И ещё, что нужно пушить в качестве Len - длину пакета или указатель но длину пакета? Пытался и то и другое - выбивает в обоих случаях, но работает только если в пуш явно ставить длину пакета, что странно. По логике там должен быть именно указатель...
В общем, помогите кто чем может
Код инжекта на скрипте выглядит так:
<раскрыть>
Упреждая презрительное "с автоитом не работал и знать его не хочу" скажу, что проблема скорее всего не в нём, а либо в ассемблерном коде, либо в вызове API функций. Вообще, первый раз со всем этим сталкиваюсь, так что можно пинать ногами - не обижусь
Upd: да, инжект кода в память происходит нормально. Проверял через CE по адресам, возвращаемым функцией VirtualAllocEx - и код и пакет пишутся по нужным адресам...
Upd2: Инжектируемый пакет даже отлавливается PacketListener'ом. То есть все _почти_ работает, только клиент выбивает почему-то

Последний раз редактировалось iGesha; 18.03.2014 в 10:43.
  Ответить с цитированием
Старый 18.03.2014, 12:54   #284
-= Мастер Света =-
 Рыцарь-лейтенант
Аватар для Smertig
 
Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Отправить сообщение для Smertig с помощью ICQ Отправить сообщение для Smertig с помощью Skype™
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Упреждая презрительное "с автоитом не работал и знать его не хочу"

С автоитом работал, работаю и буду работать.
Я использую следующую функцию инжекта:
жми быстрее
$PID - айди процесса, в $OPCODE должен лежать опкод (неожиданно?).

Как еще проверить правильность кода? Поставь msgbox после строчки, которая выделяет память для кода, запиши адрес, с помощью любого дебаггера перейди по этому адресу в процессе и перед самим выполнением кода поставь брекпоинт туда. Потом просто пошагово выполняй код (F7) и смотри, куда он тебя забросит. Вполне возможно, что стек сдвигается и ret забрасывает не туда. Стоп! А где вообще ret?! Допиши в конец & "C3". Ret = return = jmp на то место, откуда вызвалась функция изначально. А у тебя твой код считается функцией, которую вызывает другой код, который создаётся в новом потоке.
Цитата:
И ещё, что нужно пушить в качестве Len - длину пакета или указатель но длину пакета? Пытался и то и другое - выбивает в обоих случаях, но работает только если в пуш явно ставить длину пакета, что странно. По логике там должен быть именно указатель...

Правильно, пушится именно длина пакета. Это же обычный int, по адресам обычно пушат то, что нужно изменить внутри функции, или строки/массивы всякие.

P.S. Зачем писать велосипед, если есть инжект отправки пакетов?

Цитата:
Upd: да, инжект кода в память происходит нормально. Проверял через CE по адресам, возвращаемым функцией VirtualAllocEx - и код и пакет пишутся по нужным адресам...

Выше написал про бряк.
Цитата:
Т.к. аутоит не поддерживает ассемблер в явном виде, сделал вставку опкодом, сгенерированным CE.

Ну как тааак.. а библиотеки? Я [Ссылки могут видеть только зарегистрированные пользователи. ] использую.
Код:
$Asm = AsmInit()
AsmAdd($Asm, "mov eax, ebx")
..
..
$OPCODE = AsmGetBinary($Asm) ; возвращает с 0x в начале, поэтому
$OPCODE = StringTrimLeft($OPCODE, 2) 
дальше инжектишь
Если будут вопросы по аутоиту, пиши в скайп

Добавлено через 12 минут
Цитата:
$OPCODE=StringReplace($OPCODE,"94939291",DWord2Str ing($PackAddr))
$OPCODE=StringReplace($OPCODE,"84838281",DWord2Str ing(Int(StringLen($PACKET)/2)))

Ну это явное извращенство. Почему изначально нельзя выделить память и сразу прописывать адрес в опкод?
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.

Последний раз редактировалось Smertig; 18.03.2014 в 13:06. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 18.03.2014, 13:20   #285
 Пехотинец
Аватар для iGesha
 
iGesha скоро будет известенiGesha скоро будет известенiGesha скоро будет известен
Регистрация: 04.12.2013
Сообщений: 66
Популярность: 228
Сказал(а) спасибо: 36
Поблагодарили 43 раз(а) в 24 сообщениях
 
По умолчанию Re: [Руоф] Код для инжекта в память.

Цитата:
Сообщение от SmertigПосмотреть сообщение
Стоп! А где вообще ret?! Допиши в конец & "C3". Ret = return = jmp на то место, откуда вызвалась функция изначально. А у тебя твой код считается функцией, которую вызывает другой код, который создаётся в новом потоке.

Застрелите меня
Я раз 5 за всё это время ещё подумал, почему это нет ret'а во всех этих инжектах? Именно в нём, родимом, и была загвоздка. Поставил - всё заработало

Вообще, это моё первое знакомство как с AutoIt'ом, так и с WinAPI вообще. Последний раз кодил на 16-битном асме лет 10 назад и то под DOS. После этого имел дело только с низкоуровневым кодингом - контроллеры там всякие и т.п.
А велосипед изобретаю, ибо нужен не только конечный результат, а и полное понимание того, как это всё работает -)
Спасибо за легкие тычки носом в мою кривопись
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Читерим в CrossFire или методы инжекта Hummel Cross Fire 6 10.11.2010 20:36
[Программа] Память о базе Chipito Базы серверов и брут 2 30.08.2010 17:23
Оперативная память для ПВ. NikelR Общение и обсуждение Perfect World 4 25.05.2010 22:30

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

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

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