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

Считать оффсеты с файла

-

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

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

Ответ
 
Опции темы
Старый 01.08.2012, 22:35   #16
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Цитата:
Сообщение от krukovisПосмотреть сообщение
Если это функция вызова пакета - то ошибка тут - должно быть +$20

нет это инжект движения в заданную точку

в общем все получилось

Код:
 type
  PParams = ^TParams;
  TParams = packed record
  buf:array[0..6]of integer;
  Param1,Param2:dword;
  Param3:pointer;
  end;

procedure AutoRouteCall(aPParams:PParams); stdcall;
var
 cmd,addr,araddr: Pointer;
begin
araddr:=aPParams^.Param3;
cmd:=@aPParams^.buf;
addr :=araddr;
  asm
    pushad
    mov eax, dword ptr [$00A571E0]
    mov eax, dword ptr [eax +$001c]
    mov ecx, dword ptr [eax +$0034]
    push cmd
    call addr
    popad
  end;
 end;

ПРОЦЕДУРА ВЫЗОВА:

procedure AutoRouteStart(x, y : integer);
var
 aParams:TParams;
begin
  aParams.buf[0] := $14A;
  aParams.buf[1] := 0;
  aParams.buf[2] := 0;
  aParams.buf[3] := 0;
  aParams.buf[4] := x;
  aParams.buf[5] := y;
  aParams.buf[6] := 0;
  aParams.Param3:=pointer(AutoRouteAddress);
   InjectFunc(hProcess,@AutoRouteCall, @aParams,sizeof(aParams));
end;

procedure TForm1.FormCreate(Sender: TObject);
........
AutoRouteAddress:=StrToInt64Def('$'+f.Readstring('Params','AutoRouteAddress',IntToHex($00478ED0,8)),Default);
........
Да простят меня гуру программирования если что не так

Ну пара строк в коде конечно лишние, потом уберу

Последний раз редактировалось fds255; 01.08.2012 в 22:37.
  Ответить с цитированием
Старый 02.08.2012, 09:22   #17
Заблокирован
 Сержант
Аватар для STIL23
 
STIL23 на правильном пути
Регистрация: 19.12.2009
Сообщений: 130
Популярность: 34
Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Цитата:
Сообщение от fds255Посмотреть сообщение
нет это инжект движения в заданную точку

в общем все получилось

Код:
 type
  PParams = ^TParams;
  TParams = packed record
  buf:array[0..6]of integer;
  Param1,Param2:dword;
  Param3:pointer;
  end;

procedure AutoRouteCall(aPParams:PParams); stdcall;
var
 cmd,addr,araddr: Pointer;
begin
araddr:=aPParams^.Param3;
cmd:=@aPParams^.buf;
addr :=araddr;
  asm
    pushad
    mov eax, dword ptr [$00A571E0]
    mov eax, dword ptr [eax +$001c]
    mov ecx, dword ptr [eax +$0034]
    push cmd
    call addr
    popad
  end;
 end;

ПРОЦЕДУРА ВЫЗОВА:

procedure AutoRouteStart(x, y : integer);
var
 aParams:TParams;
begin
  aParams.buf[0] := $14A;
  aParams.buf[1] := 0;
  aParams.buf[2] := 0;
  aParams.buf[3] := 0;
  aParams.buf[4] := x;
  aParams.buf[5] := y;
  aParams.buf[6] := 0;
  aParams.Param3:=pointer(AutoRouteAddress);
   InjectFunc(hProcess,@AutoRouteCall, @aParams,sizeof(aParams));
end;

procedure TForm1.FormCreate(Sender: TObject);
........
AutoRouteAddress:=StrToInt64Def('$'+f.Readstring('Params','AutoRouteAddress',IntToHex($00478ED0,8)),Default);
........
Да простят меня гуру программирования если что не так

Ну пара строк в коде конечно лишние, потом уберу

Слушай тут другая тема для разговора не лезь со своим движением .

Я вот нашел исходники бота там чтение из файла такое же , но суют они вот так :
Код:
procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses: DWord;
  PacketAddr: DWord;
  Len:DWord;
begin
  PacketAddr := aPParams^.Param3;
  CallAddress:=Pointer(PacketAddr);
  BaseAddresses:=aPParams^.Param2;
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;
Код:
procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := PacketAddr;
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;
Что опять же не работает у меня по не понятным причинам . Опять пв вылетает
  Ответить с цитированием
Старый 02.08.2012, 10:18   #18
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

тема то другая, а принцип передачи переменных тотже

попробуй сделать так:

Код:
 type
  PParams = ^TParams;
  TParams = packed record
.........................//здесь другие твои переменные
 Param3:pointer;
........................//здесь тоже
  end;





procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses: DWord;
 // PacketAddr: DWord;
  Len:DWord;
begin
 // PacketAddr := aPParams^.Param3;// это не нужно
  CallAddress:=aPParams^.Param3;     //Pointer(PacketAddr);
  BaseAddresses:=aPParams^.Param2;  
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;


procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := pointer(PacketAddr);
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;

так по крайней мере call CallAddress будет срабатывать правильно.

Последний раз редактировалось fds255; 02.08.2012 в 10:46.
  Ответить с цитированием
Старый 02.08.2012, 15:50   #19
-= Мастер Света =-
 Рыцарь-капитан
Аватар для krukovis
 
krukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нацииkrukovis гордость нации
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Цитата:
Сообщение от STIL23Посмотреть сообщение
Что опять же не работает у меня по не понятным причинам . Опять пв вылетает

Попробуй отловить баг таким образом: Заменяй по очереди каждый из параметров, которые ты передаешь в функцию на константу и смотри когда перестанет выбивать клиент. Ну еще посмотри корректно ли читается из ini-файла этот параметр/параметры. Я подозреваю, что у тебя м.б. еще и в чтении из файла проблема.
________________
--------------------------------------------

Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
- Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------

Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
- Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------

Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
- патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
  Ответить с цитированием
Старый 02.08.2012, 19:20   #20
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

В общем проблема решена!

1) ПРОВЕРЬ:

Код:
procedure TForm1.FormCreate(Sender: TObject);
 var
   ini: TIniFile;
   Path:String;
   function ReadAddr(Section, Ident: string; Default: DWORD): DWORD;
  begin
    Result := StrToInt64Def('$' + ini.ReadString(Section, Ident, IntToHex(Default, 8)), Default);
    // запись на случай если значение не описано в файле
    ini.WriteString(Section, Ident, IntToHex(Result, 8));
  end;
begin
       Path:=Application.ExeName;
  Path:=ExtractFileDir(Path);
  if Path[Length(Path)]<>'\' then Path:=Path+'\';
  ini:=TIniFile.Create(Path+'offset.ini');
  base_addr := ReadAddr('Offset', 'BaseAdress',$A571E0);
  PK_addr := ReadAddr('Offset', 'BaseAdress',$63DB70);
   BaseAdress:=base_addr;
   SendPacket:=PK_addr;
ты считываешь
base_addr := ReadAddr('Offset', 'BaseAdress',$A571E0);
PK_addr := ReadAddr('Offset', 'BaseAdress',$63DB70);

разве base_addr у тебя должен равняться PK_addr??? тогда зачем считываешь из файла одно и то же значение?


2) Если сделаешь так:

Код:
type
  PParams = ^TParams;
  TParams = packed record
.........................//здесь другие твои переменные
Param1,Param2:DWORD
Param3:Pointer;
........................//здесь тоже
  end;


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


procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := pointer(PacketAddr);
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;
то все должно сработать на 100%

3) Скажу даже больше.
Если захочешь $20 тоже считать с файла, тогда делай так:

Код:
type
  PParams = ^TParams;
  TParams = packed record
.........................//здесь другие твои переменные
Param1,Param2,Param4:DWORD
Param3:Pointer;
........................//здесь тоже
  end;


procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses, Offset1, Len: DWord;
begin
  CallAddress:=aPParams^.Param3;    
  BaseAddresses:=aPParams^.Param2;  
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;

Offset1:=aPParams^.Param4; //передаешь значение Offset1  

 asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    add ecx, Offset1          
    mov ecx, dword ptr [ecx]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;


procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := pointer(PacketAddr);
  aParams.Param4 := off1 //off1 тип dword - считаешь из файла как обычно
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;
И будет тебе счастье!!!

Последний раз редактировалось fds255; 02.08.2012 в 21:46.
  Ответить с цитированием
Пользователь сказал cпасибо:
STIL23 (03.08.2012)
Старый 02.08.2012, 21:44   #21
Заблокирован
 Сержант
Аватар для STIL23
 
STIL23 на правильном пути
Регистрация: 19.12.2009
Сообщений: 130
Популярность: 34
Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Ты сам код проверял ? После него на каждый пакет такая надпись : E2010 Incompatible types: 'Cardinal' and 'string'
  Ответить с цитированием
Старый 02.08.2012, 22:04   #22
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Посмотри это у тебя так?

Код:
type
  PParams = ^TParams;
  TParams = packed record
.........................//здесь другие твои переменные
Packet: array [0..100] of byte;
Param1,Param2:DWORD
Param3:Pointer;
........................//здесь тоже
  end;


Код:
procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := pointer(PacketAddr);
  aParams.Param4 := off1 //off1 тип dword - считаешь из файла как обычно
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;
Переменная off1 должна быть Dword если ты ее используешь конечно, проверь

Возможно косяк в процедуре StrToByte

да и еще возможный косяк, если ты брал код из 3 пункта моего предыдущего сообщения то попробуй так:

Код:
type
  PParams = ^TParams;
  TParams = packed record
Packet: array [0..100] of byte;
Param1,Param2,Param5:DWORD
Param3:Pointer;
Param4: array [1..100] of widechar;
  end;


procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses, Offset1, Len: DWord;
begin
  CallAddress:=aPParams^.Param3;    
  BaseAddresses:=aPParams^.Param2;  
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;

Offset1:=aPParams^.Param5; //передаешь значение Offset1  

 asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    add ecx, Offset1          
    mov ecx, dword ptr [ecx]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;


procedure Packet(BaseAddr: dword; PacketAddr: dword; Packet: string);
var
  aParams: TParams;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAddr;
  aParams.Param3 := pointer(PacketAddr);
  aParams.Param5 := off1 //off1 тип dword - считаешь из файла как обычно
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;

Последний раз редактировалось fds255; 02.08.2012 в 22:58.
  Ответить с цитированием
Старый 02.08.2012, 22:54   #23
 Разведчик
Аватар для vogel
 
vogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личностьvogel определенно авторитетная личность
Регистрация: 17.09.2009
Сообщений: 46
Популярность: 1187
Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Цитата:
Сообщение от STIL23Посмотреть сообщение
base_addr := ReadAddr('Offset', 'BaseAdress',$A571E0);
PK_addr := ReadAddr('Offset', 'BaseAdress',$63DB70);
BaseAdress:=base_addr;
SendPacket:=PK_addr;

Копипаст, ****, опасный !!!
Внимательнее надо быть, дружище, внимательнее...
  Ответить с цитированием
Старый 03.08.2012, 09:49   #24
Заблокирован
 Сержант
Аватар для STIL23
 
STIL23 на правильном пути
Регистрация: 19.12.2009
Сообщений: 130
Популярность: 34
Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Вот функции
Код:
TForm1.FormCreate(Sender: TObject);
 var
   ini: TIniFile;
   Path:String;
   function ReadAddr(Section, Ident: string; Default: DWORD): DWORD;
  begin
    Result := StrToInt64Def('$' + ini.ReadString(Section, Ident, IntToHex(Default, 8)), Default);
    // запись на случай если значение не описано в файле
    ini.WriteString(Section, Ident, IntToHex(Result, 8));
  end;
begin
       Path:=Application.ExeName;
  Path:=ExtractFileDir(Path);
  if Path[Length(Path)]<>'\' then Path:=Path+'\';
  ini:=TIniFile.Create(Path+'offset.ini');
  base_addr := ReadAddr('Offset', 'BaseAdress',$A571E0);
  PK_addr := ReadAddr('Offset', 'SendPacket',$63DB70);
   BaseAdress:=base_addr;
   SendPacket:=PK_addr;
end;
Код:
procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses: DWord;
  PacketAddr: DWord;
  Len:DWord;
begin
  Packet_addr:= aPParams^.Param3;
  CallAddress:=Pointer(Packet_addr);
  BaseAddresses:=aPParams^.Param2;
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;
Код:
procedure StrToByte(Packet:string; var aParams:TParams);
var
  i, cnt: integer;
begin
  cnt:=((length(Packet)+1) div 3);
  aParams.Param1 := cnt;
  for i:=0 to cnt-1 do
    aParams.Packet[i]:=strtoint('$'+Packet[i*3+1]+Packet[i*3+2]);
end;
Код:
procedure Packet(BaseAdress: dword; SendPacket: dword; Packet: string);
var
  aParams: TParams;
  hprocess:dword;
begin
  StrToByte(Packet,aParams);
  aParams.Param2 := BaseAdress;
  aParams.Param3 := SendPacket;
  InjectFunc(hProcess, @PacketCall, @aParams,sizeof(aParams));
end;
Вот все функции где ошибка не пойму , но все равно высвечивается Incompatible types: 'Cardinal' and 'string' На каждый пакет после функции

Последний раз редактировалось STIL23; 03.08.2012 в 09:54.
  Ответить с цитированием
Старый 03.08.2012, 10:21   #25
 Разведчик
Аватар для fds255
 
fds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известенfds255 скоро будет известен
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

ВОТ ЭТО ЧТО ЗА ПЕРЕМЕННАЯ, ГДЕ ОНА ОБЪЯВЛЕНА И КАКОГО ТИПА???
В VAR процедуры ее нет!!!

Код:
procedure PacketCall(aPParams:PParams); stdcall;
var
  CallAddress,pPacket:pointer;
  BaseAddresses: DWord;
  PacketAddr: DWord;
  Len:DWord;
begin
  Packet_addr:= aPParams^.Param3;
  CallAddress:=Pointer(Packet_addr);
  BaseAddresses:=aPParams^.Param2;
  Len:=aPParams^.Param1;
  pPacket:=@aPParams^.Packet;
  asm
    pushad
    mov ecx, BaseAddresses
    mov ecx, dword ptr [ecx]
    mov ecx, dword ptr [ecx+$20]
    push Len
    push pPacket
    call CallAddress
    popad
  end;
end;
  Ответить с цитированием
Старый 03.08.2012, 10:48   #26
Заблокирован
 Сержант
Аватар для STIL23
 
STIL23 на правильном пути
Регистрация: 19.12.2009
Сообщений: 130
Популярность: 34
Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
 
По умолчанию Re: Считать оффсеты с файла

Все решил проблему было в другом дело , всем спс
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оффсеты maloia Cross Fire 13 30.04.2012 11:29
[Помогите!] Оффсеты firuzikh10 Общение разработчиков 1 21.04.2012 17:03
оффсеты саня питерский Вопросы и ответы, обсуждения 3 25.01.2012 08:29

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

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

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net