Jok3r666
02.02.2012, 10:28
Просто подумал что тема имеет место быть.
Когда только пришел в этот раздел даже не знал с чего начать, что читать, куда рыть и т.д.
Давайте будем выкладывать ссылки на интересные материалы, кому что помогло в усвоении чего либо и т.д.
Надеюсь что получится неплохой мануал "Помощь в создании бота с ноля"
Что бы понять о чем речь, нужно узнать как читать информацию из памяти клиента.
Не помню откуда именно я это выхватил по этому напишу сам.
Во первых нам пригодится список текущих офсетов руофа [Ссылки могут видеть только зарегистрированные и активированные пользователи] и
function ConnectToPw: dword; //функция возвращает handle окна пв
var
WndHndl:Thandle;
PID,hprocess : dword;
begin
WndHndl:=findwindow(nil, pchar('Perfect World')); //Вписываем название окна клиента
GetWindowThreadProcessId(WndHndl, @PID);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if hprocess<>0 then Result:=hprocess
else Result:=0; //Возвращаем 0 так как подключение не удалось.
end;
Для примера разберем структуру персонажа, будем искать текущее ХП перса.
Берем из статьи цепочку BaseAdress +0x1C +0x34 - это структура перса
+0x0490 HP, dword /Жизненная сила/ - это оффсет текущего значения ХП
0x - обозначает что значение в HEX
Как же нам прочитать эту цепочку и получить значение ХП в какую нибудь переменную?
Принцип получения информации в том, что нужно прочитать значение по первому адресу (BA так как он статичен), записать в переменную.
Потом к полученному значению прибавить оффсет, прочитать и снова записать в переменную, так мы и будем продолжать до конца цепочки.
BA сейчас = 00B27A04;
Пример на Delphi:
Procedure GetCurHp;
var
PwHandle : Dword;
BytesCount, ipbuf : Dword;
Hp:integer;
begin
//Поехали читать:
PwHandle:=ConnectToPW; //Получили Handle PW через функцию подключения
ReadProcessMemory(PwHandle, ptr($B27A04), @ipbuf, sizeof(ipbuf), BytesCount); //BaseAdress
ReadProcessMemory(PwHandle, ptr(ipbuf+$1c), @ipbuf, sizeof(ipbuf), BytesCount); //+0x1C
ReadProcessMemory(PwHandle, ptr(ipbuf+$34), @ipbuf, sizeof(ipbuf), BytesCount); // +0x34
ReadProcessMemory(PwHandle, ptr(ipbuf+$490), @HP, sizeof(HP), BytesCount); //+0x490
... //Делаем что нибудь с переменной (выводим, записываем и т.д.)
ShowMessage(inttostr(HP)); //Проверяем))
CloseHandle(PwHandle); //Закрываем Handle
Теперь в переменной HP лежит текущее значение ХП Персонажа
Поиск BA(можно искать любые офсеты по этой схеме): [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Патчер памяти" или "Пишем флайхак" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Патчер памяти 2" или "Пишем Джампхак" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Поиск инжектов" или "Наш код в чужом процессе" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Инжекты: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Если все это изучить и понять, то можно уже написать простенького бота, а дальше лучше.)
---------------------------------------------------------
ЗЫ По стандарту: Тапками не кидать/problem
ЗЫЫ Приму любую адекватную критику
ЗЫЫЫ Надеюсь вы мне поможете с добавлениями материалов в эту тему:z:
Добавлено через 21 минуту
Может кто знает где найти статью по виртуальной памяти приложения, растолкованную на пальцах? Где, что, куда, как все устроено и т.д.
Когда только пришел в этот раздел даже не знал с чего начать, что читать, куда рыть и т.д.
Давайте будем выкладывать ссылки на интересные материалы, кому что помогло в усвоении чего либо и т.д.
Надеюсь что получится неплохой мануал "Помощь в создании бота с ноля"
Что бы понять о чем речь, нужно узнать как читать информацию из памяти клиента.
Не помню откуда именно я это выхватил по этому напишу сам.
Во первых нам пригодится список текущих офсетов руофа [Ссылки могут видеть только зарегистрированные и активированные пользователи] и
function ConnectToPw: dword; //функция возвращает handle окна пв
var
WndHndl:Thandle;
PID,hprocess : dword;
begin
WndHndl:=findwindow(nil, pchar('Perfect World')); //Вписываем название окна клиента
GetWindowThreadProcessId(WndHndl, @PID);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if hprocess<>0 then Result:=hprocess
else Result:=0; //Возвращаем 0 так как подключение не удалось.
end;
Для примера разберем структуру персонажа, будем искать текущее ХП перса.
Берем из статьи цепочку BaseAdress +0x1C +0x34 - это структура перса
+0x0490 HP, dword /Жизненная сила/ - это оффсет текущего значения ХП
0x - обозначает что значение в HEX
Как же нам прочитать эту цепочку и получить значение ХП в какую нибудь переменную?
Принцип получения информации в том, что нужно прочитать значение по первому адресу (BA так как он статичен), записать в переменную.
Потом к полученному значению прибавить оффсет, прочитать и снова записать в переменную, так мы и будем продолжать до конца цепочки.
BA сейчас = 00B27A04;
Пример на Delphi:
Procedure GetCurHp;
var
PwHandle : Dword;
BytesCount, ipbuf : Dword;
Hp:integer;
begin
//Поехали читать:
PwHandle:=ConnectToPW; //Получили Handle PW через функцию подключения
ReadProcessMemory(PwHandle, ptr($B27A04), @ipbuf, sizeof(ipbuf), BytesCount); //BaseAdress
ReadProcessMemory(PwHandle, ptr(ipbuf+$1c), @ipbuf, sizeof(ipbuf), BytesCount); //+0x1C
ReadProcessMemory(PwHandle, ptr(ipbuf+$34), @ipbuf, sizeof(ipbuf), BytesCount); // +0x34
ReadProcessMemory(PwHandle, ptr(ipbuf+$490), @HP, sizeof(HP), BytesCount); //+0x490
... //Делаем что нибудь с переменной (выводим, записываем и т.д.)
ShowMessage(inttostr(HP)); //Проверяем))
CloseHandle(PwHandle); //Закрываем Handle
Теперь в переменной HP лежит текущее значение ХП Персонажа
Поиск BA(можно искать любые офсеты по этой схеме): [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Патчер памяти" или "Пишем флайхак" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Патчер памяти 2" или "Пишем Джампхак" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
"Поиск инжектов" или "Наш код в чужом процессе" [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Инжекты: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Если все это изучить и понять, то можно уже написать простенького бота, а дальше лучше.)
---------------------------------------------------------
ЗЫ По стандарту: Тапками не кидать/problem
ЗЫЫ Приму любую адекватную критику
ЗЫЫЫ Надеюсь вы мне поможете с добавлениями материалов в эту тему:z:
Добавлено через 21 минуту
Может кто знает где найти статью по виртуальной памяти приложения, растолкованную на пальцах? Где, что, куда, как все устроено и т.д.