|
И ник персонажа - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
16.10.2013, 23:54
|
#1
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
И ник персонажа
Всем здравствуйте.
Решил вспомнить молодость и освоить Delphi. Сейчас пытаюсь заставить работать правильно код, который отображает имя персонажа, но как и многие до меня столкнулся с проблемой.
Вот собственно код, я думаю папки без труда узнают свои наработки ))
Код:
unit New;
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 :DWord;
KlientWindow:HWND; //Handle клиента
i,ProcessId:Integer;
hProcess:Integer; //Идентификатор объекта
str : array [0..255] of char;
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), @str, 32, NoB); // в Cheat Engine тут имя перса
showmessage(str);
end;
end.
Если это имеет значение, у меня Win 7 64x и пишу на Delphi 2010.
Программа сейчас выводит иероглифы. Подозреваю что не правильно вывожу полученный результат. Но может дело в чем то другом. Помогите разобраться. Заранее спасибо.
Добавлено через 4 минуты
http://zhyk.ru/forum/showthread.php?t=331413 эту тему читал, почти все взял из нее, но результат нулевой
Последний раз редактировалось Sirioga; 17.10.2013 в 14:17.
Причина: Добавлено сообщение
|
|
|
17.10.2013, 02:28
|
#2
|
|
|
|
Пехотинец
|
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: И ник персонажа
|
Цитата: |
|
|
|
|
|
|
|
|
|
str : array [0..255] of char;
|
|
|
|
|
|
Замените строку на :
str : WideString[255]; {255- пример, читаете 32, ставте 32....}
зы. Неуверен как у вас(D2010), а в (XE2-XE5) String=WideString, Char=WideChar...
pss ReadProcessMemory (hProcess, Pointer(WHP), @str[1], 32, NoB); << над исправить если переменная обьявлена строкой до такого состояния....
Последний раз редактировалось ToRcH2565; 17.10.2013 в 03:04.
|
|
|
17.10.2013, 09:21
|
#3
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: И ник персонажа
|
|
|
17.10.2013, 09:26
|
#4
|
|
|
|
Рыцарь-лейтенант
|
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: И ник персонажа
Не все оффсеты шестнадцатиричные. Там где-то видел 1С без $.
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
17.10.2013, 09:50
|
#5
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: И ник персонажа
Последний раз редактировалось Forester!; 17.10.2013 в 09:54.
Причина: Добавлено сообщение
|
|
|
17.10.2013, 18:08
|
#6
|
|
|
|
Сержант
|
Регистрация: 16.02.2012
Сообщений: 105
Популярность: 651
Сказал(а) спасибо: 19
Поблагодарили 39 раз(а) в 31 сообщениях
|
Re: И ник персонажа
|
Цитата: |
|
|
|
|
|
|
|
|
|
И что же это за число 1С такое если не шестнадцатитричное?
|
|
|
|
|
|
Литовская еденица - одинс
По теме, мне кажется там не хватат одного ReadProcessMemory, цепочка, если мне память не изменяет $ba+$1c+$34+$688+$0
Код:
ReadProcessMemory (hProcess, Pointer(WHP+$688), @WHP, sizeof(WHP), NoB); // $ba+1c+$34+$688
ReadProcessMemory (hProcess, Pointer(WHP), @WHP, sizeof(WHP), NoB); // $ba+1c+$34+$688+0
ReadProcessMemory (hProcess, Pointer(WHP), @str, 32, NoB); // в Cheat Engine тут имя перса
________________
backup - акт проявления трусости
Последний раз редактировалось pw.assistant; 17.10.2013 в 18:13.
|
|
|
17.10.2013, 18:32
|
#7
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: И ник персонажа
Ну, долго ли коротко ли, методом тыка, проб и ошибок, родил то что хотел )
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 : DWord;
KlientWindow:HWND; //Handle клиента
ProcessId:Integer; // И.П. процесса
hProcess:Integer; //Идентификатор объекта
str : array [0..32] of widechar; //массив в котором будет содержаться имя персонажа
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 читаем из адреса полученного при чтении base adress + смещение $1c (gameadress)
ReadProcessMemory (hProcess, Pointer(WHP+$34), @WHP, sizeof(WHP), NoB); // ba+$1C+$34 читаем из адреса полученного при чтении gameadress + смещение $34 (структура перса)
ReadProcessMemory (hProcess, Pointer(WHP+$688), @WHP, sizeof(WHP), NoB); // $ba+$1c+$34+$688 вот добрались до указателя на адрес расположения имени перса
ReadProcessMemory (hProcess, Pointer(WHP), @str, 32, NoB); // в Cheat Engine и у нас, тут имя перса
showmessage(str);
end;
end.
А теперь как получилось...
При запуске из оболочки delphi 2010 программа не получала прав администратора на win 7, соответственно не могла открыть процесс Perfect World и прочитать нужные значения памяти.
Поэтому для того чтобы программа работала, необходимо компилированный exe-шник запускать через проводник с правами администратора.
Вот и все. Огромное спасибо всем кто принял посильное участие.
Добавлено через 11 минут
|
Цитата: |
|
|
|
|
Сообщение от pw.assistant |
|
|
|
|
|
|
|
По теме, мне кажется там не хватат одного ReadProcessMemory, цепочка, если мне память не изменяет $ba+$1c+$34+$688+$0
|
|
|
|
|
|
Ну на самом деле в Cheat Engine что $ba+$1c+$34+$688+$0, что просто $ba+$1c+$34+$688 - значения одинаковые. Читать нужно именно из адреса, полученного при чтении в $ba+$1c+$34+$688
Последний раз редактировалось Forester!; 17.10.2013 в 18:43.
Причина: Добавлено сообщение
|
|
|
17.10.2013, 20:05
|
#8
|
|
|
|
Фельдмаршал
|
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
|
Re: И ник персонажа
________________
Ни одно доброе дело не остается безнаказанным.
Программы:
PW: Флудобот, Девизхак, OutFocusBot, OutFocusBot ver 3 (freepvp), PWMultiHack ver 3, AutoRespawn.
JD: JDMultiHack, JDFlooder, JDBot.
Статьи: Отключаем UAC, Ищем базовый адрес Perfect World, "Патчер памяти" или "Пишем флайхак", "Патчер памяти 2" или "Пишем Джампхак", "Поиск инжектов" или "Наш код в чужом процессе"
|
|
|
20.10.2013, 00:34
|
#9
|
|
|
|
Пехотинец
|
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: И ник персонажа
|
|
|
20.10.2013, 10:39
|
#10
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: И ник персонажа
А что за привилегия отладчика?
Может быть в 7-ке права администратора это в себя включают.
|
|
|
28.10.2013, 01:06
|
#11
|
|
|
|
Пехотинец
|
Регистрация: 02.08.2009
Сообщений: 57
Популярность: 417
Сказал(а) спасибо: 12
Поблагодарили 1 раз в 1 сообщении
|
Re: И ник персонажа
Может быть и включают, невкурсе как в вин 7... но в хп их нужно получать(там нет запуска под админом), даже когда запускаю от администратора все приложения, чтоб копатся в чужой памяти, приходится сказать системе что айм есть отладчик)
|
|
|
28.10.2013, 09:48
|
#12
|
|
|
|
Разведчик
|
Регистрация: 22.09.2013
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: И ник персонажа
Сейчас уже программа находит все окна PW и выводит ники персов в combobox, а при выборе ника определяет и выводит показатели MP HP CHI, правда с Чи загвоздка, понять не могу считываю максимальные показатели Чи, а там четырехзначное число.
Кто нибудь может подсказать почему?
|
|
|
28.10.2013, 12:12
|
#13
|
|
|
|
Разведчик
|
Регистрация: 28.10.2013
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: И ник персонажа
Как бы банально не збычало, но...
Скорее всего вы ошиблись офсетом.
|
|
|
28.10.2013, 12:13
|
#14
|
|
|
|
Пехотинец
|
Регистрация: 13.08.2013
Сообщений: 68
Популярность: 829
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 25
Поблагодарили 13 раз(а) в 6 сообщениях
|
Re: И ник персонажа
Forester!, четырехзначное, или четырехбайтное?
|
|
|
28.10.2013, 19:52
|
#15
|
|
|
|
Рыцарь-лейтенант
|
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: И ник персонажа
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 11:59.
|
|