|
Пишем простой Auto-Potter для Perfect World [Delphi 7] - Разработка ПО для Perfect World - Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World |
15.02.2013, 16:49
|
#31
|
|
|
|
Разведчик
|
Регистрация: 23.06.2009
Сообщений: 38
Популярность: 392
Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 2 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Skuka.95 тебе уже ответил, но если хочешь узнать подробнее, то тут тема TBX1n. Оффсеты там старые, но проще понять всё, что касается их.
BA - BaseAddress - Базовый адрес
GA - GameRun - начало игровой структуры
GA = [BA] + $1C
Структура игрока: [GA] +$34
Ну и следовательно значение ХП: [[[GA] + $34] + $490]
|
|
|
|
|
|
Понимаю, что просьба не оригинальная, но всё же, не могли бы Вы подсказать эти значения для текущей версии.
Код в принципе мне понятен, правлю под свои нужды, понемногу раздираюсь, но много вещей специфических на мой взгляд, в которых я пока не сильно ориентируюсь (оффсеты, инжекты).
P.S.
Если есть принципиальные вещи необходимые к изучению по этому поводу, подскажите.
Последний раз редактировалось Gorrilaz; 17.02.2013 в 04:25.
|
|
|
01.08.2013, 02:46
|
#32
|
|
|
|
Разведчик
|
Регистрация: 19.07.2013
Сообщений: 11
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Понимаю, что просьба не оригинальная, но всё же, не могли бы Вы подсказать эти значения для текущей версии.
Код в принципе мне понятен, правлю под свои нужды, понемногу раздираюсь, но много вещей специфических на мой взгляд, в которых я пока не сильно ориентируюсь (оффсеты, инжекты).
P.S.
Если есть принципиальные вещи необходимые к изучению по этому поводу, подскажите.
|
|
|
|
|
|
http://zhyk.ru/forum/showthread.php?t=287321 Дальше поймешь.
У меня вопрос, как заставить "бота" нажимать клавишу, которую он получает из СomboBox?
|
|
|
01.08.2013, 20:08
|
#33
|
|
|
|
Разведчик
|
Регистрация: 01.08.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
Помогите если сможете. Весь интернет облазил но решения не нашел. При выводе числового значения все получаетсяю но при выводе текстового отображаются цифры.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
StdCtrls, ComCtrls, ExtCtrls, Gauges;
type
TForm1 = class(TForm)
Gauge1: TGauge;
Gauge2: TGauge;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
wideChars : array[0..11] of WideChar;
myString : String;
Form1: TForm1;
i,rw Word;
ch:WideChar;
wch:array[0..255] of WideChar;
KlientWindow:HWND; //Handle êëèåíòà
ProcessId:Integer;
hProcess:Integer; //Èäåíòèôèêàòîð îáúåêòà
HPMinValue:Integer; //Ìèíèìàëüíîå çíà÷åíèå ÕÏ (èç Edit1)
MPMinValue:Integer; //Ìèíèìàëüíîå çíà÷åíèå ÌÏ (èç Edit2)
L:Integer; // óðîâ
Nik:string; //íèê
M:Integer; //áàáëî
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Íàõîäèì Handle îêíà
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Ïîëó÷àåì È.Ï.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Îòêðûâàåì ïðîöåññ ñ âîçìîæíîñòüþ çàïèñè
HPMinValue := StrToInt(Edit1.Text);
MPMinValue := StrToInt(Edit2.Text);
Timer1.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var HP,HPMax,MP,MPMax:Integer;
WHP,WHPMax,L,WMP,WMPMax,Lvl,Nikname,Nik,M,Money,No B Word;
begin
try //Íà âñÿêèé ñëó÷àé çàêëþ÷àåì â try...except, äàáû â ñëó÷àé ðåëîãà íå çàñûïàòü ïîëüçîâàòåëÿ îøèáêàìè
ReadProcessMemory (hProcess, Pointer($00B9029C), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+$0494), @WHP, sizeof(WHP), NoB); //×èòàåì çíà÷åíèå HP
HP := Integer(WHP); //Ïåðåâîäèì Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$34), @WHPMax, sizeof(WHPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WHPMax+$04DC), @WHPMax, sizeof(WHPMax), NoB); //×èòàåì çíà÷åíèå MaxHP
HPMax := Integer(WHPMax); //Ïåðåâîäèì Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$34), @WMP, sizeof(WMP), NoB);
ReadProcessMemory (hProcess, Pointer(WMP+$0498), @WMP, sizeof(WMP), NoB); //×èòàåì çíà÷åíèå MP
MP := Integer(WMP); //Ïåðåâîäèì Integer
ReadProcessMemory (hProcess, Pointer($00B9029C), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$34), @WMPMax, sizeof(WMPMax), NoB);
ReadProcessMemory (hProcess, Pointer(WMPMax+$04E0), @WMPMax, sizeof(WMPMax), NoB); //×èòàåì çíà÷åíèå MaxMP
MPMax := Integer(WMPMax); //Ïåðåâîäèì Integer
Gauge1.Progress := round(HP * 100 / HPMax); //Ïðèñâàèâàåì ïðîöåíòíîå çíà÷åíèå HP Gauge1
Gauge2.Progress := round(MP * 100 / MPMax); //Ïðèñâàèâàåì ïðîöåíòíîå çíà÷åíèå MP Gauge2
ReadProcessMemory (hProcess, Pointer($00B9029C), @Lvl, sizeof(Lvl), NoB);
ReadProcessMemory (hProcess, Pointer(Lvl+$34), @Lvl, sizeof(Lvl), NoB);
ReadProcessMemory (hProcess, Pointer(Lvl+$048C), @Lvl, sizeof(Lvl), NoB);
L := Integer(Lvl); //Ïåðåâîäèì Integer
Label1.Caption := IntToStr(L);
ReadProcessMemory (hProcess, Pointer($00B9029C), @Money, sizeof(Money), NoB);
ReadProcessMemory (hProcess, Pointer(Money+$34), @Money, sizeof(Money), NoB);
ReadProcessMemory (hProcess, Pointer(Money+$0560), @Money, sizeof(Money), NoB) ;
M := Integer(Money) ; //Ïåðåâîäèì Integer
Label4.Caption := IntToStr(M);
================================================== ================================
ReadProcessMemory (hProcess, Pointer($00B9029C), @Nikname, sizeof(Nikname), NoB);
ReadProcessMemory (hProcess, Pointer(Nikname+$34), @Nikname, sizeof(Nikname), NoB);
ReadProcessMemory (hProcess, Pointer(Nikname+$0740), @Nikname, sizeof(Nikname), NoB);
//Nik := Nikname=String; //Ïåðåâîäèì Integer
Label2.Caption := IntToStr (Nikname) ;
================================================== ================================= как пологаю ошибка в выводе Label2.Caption := ???? и что далее инет не помог все примеры простые
EXCEPT
end;
end.
в Label2 отображается просто цифра 6 и все.
Последний раз редактировалось foradey83; 01.08.2013 в 20:12.
|
|
|
21.09.2013, 03:52
|
#34
|
|
|
|
Пехотинец
|
Регистрация: 03.02.2013
Сообщений: 60
Популярность: 10
Сказал(а) спасибо: 12
Поблагодарили 25 раз(а) в 12 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
Спасибо! Всё работает. Только оффсеты поменять
|
|
|
15.10.2013, 20:42
|
#35
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
Добрый вечер. Недавно начал изучать Delphi. Перелопатив кучу тем на форуме решил попробовать свои силы, сначала с малого. Пытаюсь прочитать имя персонажа.
procedure TForm1.Button1Click(Sender: TObject);
var HP,HPMax,MP,MPMax:Integer;
WHP,WHPMax,WMP,WMPMax,NoB, NikName Word;
KlientWindow:HWND; //Handle клиента
ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем И.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
ReadProcessMemory (hProcess, Pointer($C38B6C), @WHP, sizeof(WHP), NoB); // base adress
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB); // ba+1c
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB); // ba+1c
ReadProcessMemory (hProcess, Pointer(WHP+$20), @WHP, sizeof(WHP), NoB); // ba+1c+1c+20
ReadProcessMemory (hProcess, Pointer(WHP+$688), @WHP, sizeof(WHP), NoB); //Имя персонажа должно быть здесь?
ShowMessage(Inttostr(WHP));
end;
по итогу получаю просто набор цифр.
Прошу подсказать что я делаю не верно, может считываю не из тех адресов?
Заранее огромное спасибо.
Добавлено через 3 часа 23 минуты
Вот, еще покопался на форуме, в итоге через CheatEngine [[[[[00C38B6C]+$1C]+$34]+$688]+0] увидел имя персонажа. Изменил адреса в коде на верные, но в итоге все равно не выводит ник. В этой тебе говорилось уже о никах http://zhyk.ru/forum/showthread.php?t=116019, в итоге сделал вот так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Gauges, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Gauge1: TGauge;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var WHP,NoB Word;
name : array [0..32] of widechar;
KlientWindow:HWND; //Handle клиента
ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем И.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
ReadProcessMemory (hProcess, Pointer($00C38B6C), @WHP, sizeof(WHP), NoB); // base adress
ReadProcessMemory (hProcess, Pointer(WHP+$1C), @WHP, sizeof(WHP), NoB); // ba+$1c
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB); // ba+$34
ReadProcessMemory (hProcess, Pointer(WHP+$688), @WHP, sizeof(WHP), NoB); // $ba+1c+$34+$688
ReadProcessMemory (hProcess, Pointer(WHP+$0), @name, 32, NoB); //$ba+1c+$34+$688+0 В CheatEngine имя перса
showmessage(name);
end;
end.
Выдает некую букву, которой в имени перса нет. Сам думаю что все сделано верно, кроме вывода полученных данных. Прошу помощи.
Последний раз редактировалось Forester!; 16.10.2013 в 00:06.
Причина: Добавлено сообщение
|
|
|
07.11.2013, 02:24
|
#36
|
|
|
|
Разведчик
|
Регистрация: 07.11.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
|
|
|
11.11.2013, 08:44
|
#37
|
|
|
|
Пехотинец
|
Регистрация: 17.09.2010
Сообщений: 66
Популярность: 701
Сказал(а) спасибо: 32
Поблагодарили 63 раз(а) в 46 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
Дайте совет, по поводу такой ситуации. Персонаж в стане/несогласке и уровень хп ниже граничных, автопот шлет пакет или жмет кнопку на юзание имунки. Но из-за стана/несогл ее использование невозможно. Так вот если в эти секунды персонажа убивают и он ресается, то имунка юзается при респе.. Что не корректно. Как можно правильно обыграть эту ситуацию?
________________
© Mel
|
|
|
27.12.2013, 14:23
|
#38
|
|
|
|
Разведчик
|
Регистрация: 25.01.2013
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
на RAD XE5 компилил кто-либо это?
насколько знаю, с вводом поддержки 64 разрядов, надо NoB описывать как
var
NoB: SIZE_T
Добавлено через 2 часа 37 минут
ради интереса решил запихнуть все в XE5 и...что-то мне ничего не вернулось))) в чем ошибка? не отлаживал правда еще
Код:
Game_Address : integer = $0C392CC;
//Смещение HostPlayerStuct относительно GameRunAddress
host_player_struct_offset : integer = $34;
//Смещение к здоровью персонажа
host_player_hp_offset : integer = $4A8;
hProcess: Integer;
KlientWindow: HWND; //Handle клиента
ProcessId: Integer;
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
KlientWindow := FindWindow(nil, PChar('Perfect World')); //Находим Handle окна
GetWindowThreadProcessId(KlientWindow,@ProcessId); //Получаем Ид.П.
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); //Открываем процесс с полным доступом
Timer1.Enabled := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var HP,HPMax,MP,MPMax:Integer;
WHP,WHPMax,WMP,WMPMax:DWord;
NoB: SIZE_T;
begin
try //заключаем в try...except, дабы не засыпать пользователя ошибками
ReadProcessMemory (hProcess, Pointer(Game_Address), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+host_player_struct_offset), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+host_player_hp_offset), @WHP, sizeof(WHP), NoB);
//Читаем значение HP
HP := Integer(WHP); //Переводим Integer
except
Label1.Caption := IntToStr(HP);
end;
end;
Последний раз редактировалось scitelz; 27.12.2013 в 17:03.
Причина: Добавлено сообщение
|
|
|
28.12.2013, 18:25
|
#39
|
|
|
|
Пехотинец
|
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
scitelz, вы привелегии получили? в рад 2\5 без получения привелегий у меня такие тесты проваливались)
|
|
|
11.01.2014, 03:58
|
#40
|
|
|
|
Разведчик
|
Регистрация: 25.01.2013
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
ну вот, праздники и закончились)) всех с наступившим.
|
Цитата: |
|
|
|
|
|
|
|
|
|
scitelz, вы привелегии получили? в рад 2\5 без получения привелегий у меня такие тесты проваливались)
|
|
|
|
|
|
Да, в XE 5 все получилось. С привилегиями, в принципе, каких-либо проблем не возникло, а в сообщении выше сам сглупил - в блоке try-except вывод не сделан. Спать, видать, надо чаще и больше.
Код:
try //заключаем в try...except, дабы не засыпать пользователя ошибками
ReadProcessMemory (hProcess, Pointer(Game_Address), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+host_player_struct_offset), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+host_player_hp_offset), @WHP, sizeof(WHP), NoB);
//Читаем значение HP
HP := Integer(WHP); //Переводим Integer
Label1.Caption := IntToStr(HP);
except
ShowMessage('капец');
end;
Последний раз редактировалось scitelz; 11.01.2014 в 14:05.
Причина: Добавлено сообщение
|
|
|
05.02.2014, 17:34
|
#41
|
|
|
|
Разведчик
|
Регистрация: 28.02.2012
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
объясните в чем может быть ошибка.
Код:
ReadProcessMemory(hProcess,Pointer(strtoint(Unit2.Form2.edit_game_adress.text)),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$20+$14),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$0494),@buf,SizeOf(buf),BytesCount);
ShowMessage(IntToStr(integer(buf)));
пробовал так, выводит всегда 1 число 6890496
написано по примеру этого исходника
где edit_game_adress.text это game_adress на текущий момент(клиент 1.5.0)
GameAdress=00C392CC
так же пробовал вот так
Код:
ReadProcessMemory(hProcess,ptr(strtoint(Unit2.Form2.edit_base_adress.text)),@buf,4,BytesCount);
ReadProcessMemory(hProcess,ptr(buf+$1C),@buf,4,BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$20+$14),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$0494),@buf,SizeOf(buf),BytesCount);
ShowMessage(IntToStr(integer(buf)));
где собственно edit_base_adress.text это BaseAdress=00C38B6C
вот это выдает 6890496 (тоже самое, но почему!? ведь 00C38B6C+1С <> 00C392CC)
либо я не понимаю как это делается, я конечно первый день пытаюсь писать с офсетами, но перечитал уже кучу материала на жуке(про данный случай).
ХП моего персонажа должно быть 1310
или за этим числом спрятано то что мне нужно? (хотя если хп не фул число показывает тоже)
заранее спасибо.
PS, не трите мои посты, правда хочу понять что тут не так. это не флуд
_____________________
пока ел читал форум нашел вот такую надпись
scitelz:
|
Цитата: |
|
|
|
|
|
|
|
|
|
host_player_hp_offset : integer = $4A8;
|
|
|
|
|
|
спасибо вам добрый человек.
Последний раз редактировалось dlev2; 05.02.2014 в 18:46.
|
|
|
23.07.2014, 21:08
|
#42
|
|
|
|
Пехотинец
|
Регистрация: 06.07.2009
Сообщений: 81
Популярность: 126
Сказал(а) спасибо: 32
Поблагодарили 93 раз(а) в 36 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
|
Цитата: |
|
|
|
|
|
|
|
|
|
объясните в чем может быть ошибка.
Код:
ReadProcessMemory(hProcess,Pointer(strtoint(Unit2.Form2.edit_game_adress.text)),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$20+$14),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$0494),@buf,SizeOf(buf),BytesCount);
ShowMessage(IntToStr(integer(buf)));
пробовал так, выводит всегда 1 число 6890496
написано по примеру этого исходника
где edit_game_adress.text это game_adress на текущий момент(клиент 1.5.0)
GameAdress=00C392CC
так же пробовал вот так
Код:
ReadProcessMemory(hProcess,ptr(strtoint(Unit2.Form2.edit_base_adress.text)),@buf,4,BytesCount);
ReadProcessMemory(hProcess,ptr(buf+$1C),@buf,4,BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$20+$14),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$0494),@buf,SizeOf(buf),BytesCount);
ShowMessage(IntToStr(integer(buf)));
где собственно edit_base_adress.text это BaseAdress=00C38B6C
вот это выдает 6890496 (тоже самое, но почему!? ведь 00C38B6C+1С <> 00C392CC)
либо я не понимаю как это делается, я конечно первый день пытаюсь писать с офсетами, но перечитал уже кучу материала на жуке(про данный случай).
ХП моего персонажа должно быть 1310
или за этим числом спрятано то что мне нужно? (хотя если хп не фул число показывает тоже)
заранее спасибо.
PS, не трите мои посты, правда хочу понять что тут не так. это не флуд
_____________________
пока ел читал форум нашел вот такую надпись
scitelz:
спасибо вам добрый человек.
|
|
|
|
|
|
Не думаю что ответ уже будет полезен вам, но возможно будет полезен другим посетителям темы. Извиняюсь что не смог ответить, в последний раз заходил в тему очень давно.
В первом примере сразу бросается в глаза строка:
Код:
ReadProcessMemory(hProcess,Pointer(buf+$20+$14),@buf,SizeOf(buf),BytesCount);
Тут стоит посмотреть тему TBX1n про определение понятия оффсетов, там вы бы заметили что читать последовательно нужно всегда:
Код:
ReadProcessMemory(hProcess,Pointer(buf+$20),@buf,SizeOf(buf),BytesCount);
ReadProcessMemory(hProcess,Pointer(buf+$14),@buf,SizeOf(buf),BytesCount);
Ну и вторую ошибку вы заметили сами, но её причина скорее невнимательность, нежели незнание. Желаю удачи!)
Надеюсь что, даже если ответ автору уже не нужен, он сможет пригодиться другим пользователям.
Последний раз редактировалось Хакерок:); 23.07.2014 в 21:22.
|
|
|
18.08.2014, 15:39
|
#43
|
|
|
|
Разведчик
|
Регистрация: 25.01.2013
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
а чего такого намудрили, что дельфовый вариант перестал работать? Адреса проверял на C# там нормально читает.
Код:
const
BaseAddress = $0C9DFAC;
GameRun = $0C9E74C;
HostPlayerStruct = $30;
Hp = $4A8;
Код:
var
HP : Integer;
WHP : DWord;
NoB : Size_T;
KlientWindow: HWND;
ProcessId : integer;
begin
KlientWindow := FindWindow(nil, PChar('Perfect World'));
GetWindowThreadProcessId(KlientWindow,@ProcessId);
button1.Caption := inttostr(processid);
hProcess := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
try
ReadProcessMemory (hProcess, Pointer(GameRun), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+hostplayerstruct), @WHP, sizeof(WHP), NoB);
ReadProcessMemory (hProcess, Pointer(WHP+hp), @WHP, sizeof(WHP), NoB);
HP := Integer(WHP); //Переводим Integer
Label2.Caption := IntToStr(HP);
except
end;
end;
ошибки осознаны и исправлены: hostplayerstruct и hp следует заменить на прямые значения ($30 и $4A8 соответственно)
Последний раз редактировалось scitelz; 18.08.2014 в 15:48.
|
|
|
18.08.2014, 17:40
|
#44
|
|
|
|
Пехотинец
|
Регистрация: 04.12.2013
Сообщений: 66
Популярность: 228
Сказал(а) спасибо: 36
Поблагодарили 43 раз(а) в 24 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
|
Цитата: |
|
|
|
|
|
|
|
|
|
ошибки осознаны и исправлены: hostplayerstruct и hp следует заменить на прямые значения ($30 и $4A8 соответственно)
|
|
|
|
|
|
А может компилятор-таки думает, что HostPlayerStruct и hostplayerstruct - это разные вещи? Аналогично с Hp и hp.
Ведь с константой GameRun нет проблем, т.к. она и объявляется и используется в одном и том же написании...
|
|
|
18.08.2014, 18:23
|
#45
|
|
|
|
Разведчик
|
Регистрация: 25.01.2013
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 7
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Пишем простой Auto-Potter для Perfect World [Delphi 7]
del
Последний раз редактировалось scitelz; 20.08.2014 в 17:05.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 20:05.
|
|