Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Perfect World
You last visited: Today at 00:09

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Rus. server

Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.

Reply
 
Old 12/19/2009, 23:45   #1051
 
elite*gold: 0
Join Date: Oct 2008
Posts: 59
Received Thanks: 4
Quote:
Originally Posted by silkytail View Post
лолчитс такой лолчитс
Ты прав

moob1 is offline  
Old 12/20/2009, 01:23   #1052
 
elite*gold: 0
Join Date: Jan 2009
Posts: 45
Received Thanks: 12
FLY_CALL =$0044BE90;

Народ кто нибудь сделал покупку? Структура функции продажи и покупки практически одинаковы, подготовка тоже должна быть похожа - продажа идет покупка нет(. Отличаются ID вещей в рюкзаке и у продавца? Вроде не должны).
Если есть проверенная функция продажи - выложите, пожалуйста)
obiov is offline  
Thanks
1 User
Old 12/20/2009, 03:51   #1053
 
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 403
Quote:
Пацаны прикиньте черти с ач взяли и с моего кряка копирайты убрали и запостили там . )))
Пора уже "копирайты" вешать на каждый байт... или патент оформить на инъекцию и каждый раз продавать базовые адреса и адреса вызываемых функций, а на тех, кто незаконно использует, подавать в суд. Конечно же, еще обязательно на каждом доступном форуме большими буквами указывать "Афтор я"

Quote:
Отличаются ID вещей в рюкзаке и у продавца
нет. функция покупки и продажи работают одинаково
dwar is offline  
Old 12/20/2009, 04:58   #1054
 
elite*gold: 0
Join Date: Jan 2009
Posts: 137
Received Thanks: 19
Повелся, я братцы на китайцу злого... Решил заюзать функцию автоматического поиска офсетов (исходник тут пробегал). И каааааак получил геморою полные штаны... китайёза видать на совсем древнем чем-то пишет. Причем таком древнем, что у него string еще не знает о zero-terminated строках.

Гемороился я со строками всю ночь. Плюнул. И за пару часов сделал поиск по байтам.

Версия переделанная и дополненная мультипоиском (а не токма вывалом по первому найденному).

Code:
type
  TaArrayOfByte = array of Byte;

type
  TaArrayOfCardinal = array of Cardinal;

    function HexStringToBytes(aString: string): TaArrayOfByte;
    function StreamPos(aStream: TStream; aNeedle: array of Byte): TaArrayOfCardinal;
    function HexRead(aStream: TStream; s: DWORD; b: byte): Cardinal;

// ######################################################################
// ### Procedures for getting inject calls addresses
// ### BOF
// ######################################################################

function TaPWT.HexStringToBytes(aString: string): TaArrayOfByte;
var
  i: integer;
begin
  SetLength(Result, Round(Length(aString) / 2));
  for i := 1 to Round(Length(aString) / 2) do
  begin
    Result[i - 1] := StrToInt('0x' + Copy(aString, i * 2 - 1, 2));
  end;
end;

function TaPWT.StreamPos(aStream: TStream; aNeedle: array of Byte): TaArrayOfCardinal;
var
  i, j, aCounter: integer;
  aSource: array of Byte;
  aResults: array[1..1024] of Cardinal;
begin
  SetLength(aSource, aStream.Size);
  aStream.ReadBuffer(Pointer(aSource)^, aStream.Size);
  aCounter := 0;
  for i := 0 to aStream.Size - Length(aNeedle) - 1 do
  begin
    for j := 0 to Length(aNeedle) - 1 do
      if aSource[i + j] <> aNeedle[j] then
        break;
    if j >= Length(aNeedle) then
    begin
      Inc(aCounter);
      aResults[aCounter] := i;
      if aCounter >= 1024  then
        break;
    end;
  end;
  SetLength(Result, aCounter);
  for i := 0 to aCounter - 1 do
  begin
    Result[i] := aResults[i + 1];
  end;
    
  Finalize(aSource);
  aStream.Seek(0, soBeginning);
end;

function TaPWT.HexRead(aStream: TStream; s: DWORD; b: byte): Cardinal;
var
  d: DWORD;
begin
  aStream.Seek(s, soBeginning);
  aStream.Read(d, b);
  Result := d;
  aStream.Seek(0, soBeginning);
end;

// ######################################################################
// ### Procedures for getting inject calls addresses
// ### EOF
// ######################################################################


procedure TMainSettingsForm.Button4Click(Sender: TObject);
var
  aFile: TFileStream;
  aAddresses: TaArrayOfCardinal;
  Code: string;
  i: integer;
begin
  aFile := TFileStream.Create(EditElementClientPath.Text, fmShareDenyNone);
  Code := '81EC0008000033D2568BB4240C0800';

  aAddresses := aPWT.StreamPos(aFile, aPWT.HexStringToBytes(Code));
  if Length(aAddresses) = 0 then
    Memo1.Lines.Add('Not found!')
  else
    for i := 0 to Length(aAddresses) - 1 do
      Memo1.Lines.Add('Found pointer: ' + IntToHex(aPWT.HexRead(aFile, aAddresses[i] - $4, 4), 8) + ' at ' + IntToHex(aAddresses[i], 8));
  aFile.Free;
end;
AlexGD is offline  
Old 12/20/2009, 05:38   #1055
 
elite*gold: 0
Join Date: Jan 2009
Posts: 137
Received Thanks: 19
Глупая и несерьезная...

Просто ты не туда роешь. Все можно и на автоите реализовать. Попробуй с малого - инжектни general_attack. То бишь:
1. Нарисуй на форме бота кнопочку.
2. Навесь на нее инжект.
3. Зайди в игру.
4. Запусти бота.
5. Возьми в игре кого-нить в таргет.
6. Тыркни в боте на кнопку атаки.

Если все пройдет удачно - повторяй с остальными вызовами.

Дык, а если еще вместо плача Ярославны будешь конкретные наводящие вопросы задавать - так есть огромная вероятность, что беде еще и помогут с тем, где именно ты набагал. Ну это так - лирическое отступление
AlexGD is offline  
Old 12/20/2009, 06:45   #1056
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
последняя попытка была такой
Quote:
Func SETCURENTMOBID($ID)
_MemoryWrite($OFFSET_TARGET, $PROCESS, "0x" & hex($ID))
If $ID <> 0 Then
$OPCODE = ""
PUSHAD()
MOV_EDX_DWORD_PTR(10007676)

MOV_ECX_DWORD_PTR_EAX_ADD(32)
$OPCODE &= "81c1ec000000"
PUSH($ID)
MOV_EDX(5995376)
CALL_EDX()
POPAD()
RET()
INJECTCODE($PROCESS)
EndIf
EndFunc
Novohyd is offline  
Old 12/20/2009, 06:58   #1057
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
Изначально был такой вариант
Quote:
Func SETCURENTMOBID($ID)
_MEMORYWRITE($MOB_ID_ADD, $PROCESS, $ID)
If $ID <> 0 Then
$OPCODE = ""
PUSHAD()
MOV_EDX_DWORD_PTR(10007676)
PUSH($ID)
MOV_ECX_DWORD_PTR_EAX_ADD(32)
$OPCODE &= "81c1ec000000"
MOV_EDX(6136896)
CALL_EDX()
POPAD()
RET()
INJECTCODE($PROCESS)
EndIf
EndFunc
ассемблерные функции из autogeo
Novohyd is offline  
Old 12/20/2009, 10:04   #1058
 
elite*gold: 0
Join Date: Oct 2008
Posts: 59
Received Thanks: 4
Quote:
Originally Posted by obiov View Post
FLY_CALL =$0044BE90;

Народ кто нибудь сделал покупку? Структура функции продажи и покупки практически одинаковы, подготовка тоже должна быть похожа - продажа идет покупка нет(. Отличаются ID вещей в рюкзаке и у продавца? Вроде не должны).
Если есть проверенная функция продажи - выложите, пожалуйста)
Это реализуетцо на стороне сервера .
Так что ты не сможешь хакнуть кота ))

Либо npc торговца .

Хотя чем черт не шутит )
moob1 is offline  
Old 12/20/2009, 10:49   #1059
 
elite*gold: 0
Join Date: Jan 2009
Posts: 137
Received Thanks: 19
2Novohyd:

Code:
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ Target inject
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Target(aPParams: PParams); Stdcall;
var
  TargetParam: DWORD;
  Address: Pointer;
begin
  TargetParam := aPParams^.Param1; // target ID PW_Target_Call
  Address := Pointer(PW_Target_Call);
  asm
    pushad
      mov ecx,dword ptr [PW_Base_Call]
      mov ecx,dword ptr [ecx+$20]
      add ecx,$ec
      mov eax, TargetParam
      push eax
      mov edx, Address
      call edx
    popad
  end
end;
Это - работает. Переведи на автоит
AlexGD is offline  
Old 12/20/2009, 10:56   #1060
 
elite*gold: 0
Join Date: Oct 2008
Posts: 59
Received Thanks: 4
Quote:
Originally Posted by AlexGD View Post
2Novohyd:

Code:
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ Target inject
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Target(aPParams: PParams); Stdcall;
var
  TargetParam: DWORD;
  Address: Pointer;
begin
  TargetParam := aPParams^.Param1; // target ID PW_Target_Call
  Address := Pointer(PW_Target_Call);
  asm
    pushad
      mov ecx,dword ptr [PW_Base_Call]
      mov ecx,dword ptr [ecx+$20]
      add ecx,$ec
      mov eax, TargetParam
      push eax
      mov edx, Address
      call edx
    popad
  end
end;
Это - работает. Переведи на автоит
Да лана зачем те авто пиши прям так
moob1 is offline  
Old 12/20/2009, 13:13   #1061
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Quote:
Originally Posted by Novohyd View Post
Код в инжект получается такой: 608B0D620000008B491483C100000000B84043108050BA0500 0000FFD261 для ID $80104340
$OPCODE не правильно формируется попробуй не передавать в параметрах Ассембл. функций - вычисляемое значение (Dec(...)), а вычисли его заранее или пиши сразу Дес.число.
Потом - чеж - не кончается инжектируемый код банальной командой "C3" - RET() а в листинге она у тебя стоит.
origmas is offline  
Old 12/20/2009, 13:25   #1062
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
Quote:
Originally Posted by origmas View Post
$OPCODE не правильно формируется попробуй не передавать в параметрах Ассембл. функций - вычисляемое значение (Dec(...)), а вычисли его заранее или пиши сразу Дес.число.
Потом - чеж - не кончается инжектируемый код банальной командой "C3" - RET() а в листинге она у тебя стоит.
608B0DDCAD98008B492083C1EC000000B84043108050BA707B 5B00FFD261C3
если сразу в десятичной писать, получается такой код.
в какой проге из HEXа в ассемблер перевести можно отдельную строчку?
Novohyd is offline  
Old 12/20/2009, 13:36   #1063
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Quote:
Originally Posted by Novohyd View Post
608B0DDCAD98008B492083C1EC000000B84043108050BA707B 5B00FFD261C3
если сразу в десятичной писать, получается такой код.
в какой проге из HEXа в ассемблер перевести можно отдельную строчку?
дизаассемблером ким-нить или в отладчике где можно вставлять коды а не команды .. щас на вскидку не помню ..

короч тебе теперь надо посмотреть какой Асс-код получится из этих Оп-кодов - если так как ты затеял - то все ОК ..
origmas is offline  
Old 12/20/2009, 13:41   #1064
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
Расписал все по командам как код составляется. Может команды использовать по-другому
Quote:
$OPCODE = ""
PUSHAD()
; $OPCODE = $OPCODE & "60"
MOV_ECX_DWORD_PTR(10005980)
; $OPCODE = $OPCODE & "8B0D" & INT2HEX($I, 8)
MOV_ECX_DWORD_PTR_ECX_ADD(32)
; If $I <= 255 Then
$OPCODE = $OPCODE & "8B49" & INT2HEX($I, 2)
; Else
; $OPCODE = $OPCODE & "8B89" & INT2HEX($I, 8)
ADD_ECX(236)
; $OPCODE = $OPCODE & "83C1" & INT2HEX($I, 8)
MOV_EAX($ID)
; $OPCODE = $OPCODE & "B8" & INT2HEX($I, 8)
PUSH_EAX()
; $OPCODE = $OPCODE & "50"
MOV_EDX(5995376)
; $OPCODE = $OPCODE & "BA" & INT2HEX($I, 8)
CALL_EDX()
;$OPCODE = $OPCODE & "FFD2"
POPAD()
;$OPCODE = $OPCODE & "61"
RET()
;$OPCODE = $OPCODE & "C3"
Novohyd is offline  
Old 12/20/2009, 13:45   #1065
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Quote:
Originally Posted by Novohyd View Post
Расписал все по командам как код составляется. Может команды использовать по-другому
дизассемблируй полученный $OPCODE - поймешь где не так ..

При такой вот записи
MOV_EDX(5995376)
; $OPCODE = $OPCODE & "BA" & INT2HEX($I, 8)

BA - останется, но по практике помнится, что оно должно изменится на BC или как-то, соответственно и параматр приобретет другой вид, потому-что в машинном представлении команда MOVE сливается с параметром, а тут на Автоите компиляция не происходит - просто запись в цепочку. Поэтому и беда .

это одна из причин (а для инжекта - самая 1-я)- почему надо переходить на Дельфи, или на ?С++ - там команда asm - все делает автоматически.

.. конечно можно выкрутиться - записать MOV EDX(5995376) (как на ассемблере) куданить в Дизас или отладчик и посмотреть какой должен быть реальный код машинный - и этот код подставлять в $OPCODE, опять-же лучше так делать со всей группой команд а не отдельно взятой (MOV) так как это влияет на правила компиляции.
НО, ... даже и тогда когда уже Автоид будет компилить ваш листинг с готовым компилированным кодом от другого компилятора - результат может быть другим - необходима одновременная компиляция .. как в нормальных языках
origmas is offline  
Reply




All times are GMT +1. The time now is 00:13.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.