Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от krukovis
какую проблему ты этим решаешь?
Скажем так, я пока не настолько щедрый, чтоб выкладывать свои наработки в паблик Т.к. в саму либу внедрены функции, которые активно использует мой иксобот, и я не хочу их распространять (там всякие интересные алгоритмы, типа поиска пути в иксах c учетом стен и перепада высот и все такое), то таким образом я получаю, что в тех софтинах, что идут на продажу в либе не будет содержаться тех функций, которые я не хочу никому давать.
Блин, я ща пьяный, надеюсь, что моя мысля понятна
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW. PW Everyday Helper Bot
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Всем доброго времени суток.
У меня возникла небольшая проблема.
На поиск близлежащего лута, есть такой код, вырезка:
Цитата:
int c = memory.ChainReadInt32(0xA571E0, 0x1C, 0x1C, 0x28, 0x14);
string[][] names = new string[c][];
for (int i = 0; i < c; i++)
{
names[i] = new string[2]
{
memory.ChainReadString_Unicode(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i*0x4), 0x4, 0x168, 0x0),
(memory.ChainReadInt32(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i * 0x4), 0x4, 0x110)).ToString()
};
}
Ну вот. Кол-во лута я получаю правильное.
А вот WID и Name по каждому нет. На выходе с именем пустая строка, а с идентификатором нуль.
Офсеты брал с соответствующей темы для руофа.
Пожалуйста, помогите понять, где я ошибся.
Спасибо!
Добавлено через 27 минут
Я понял в чем была моя ошибка.
И малость изменил код.
Но в итоге, получаю в именах пустые значения, а в WID отрицательные значения:
Цитата:
string[][] names = new string[0][];
for (int i = 0; i < 0x300; i++)
{
if (memory.ChainReadInt16(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i * 0x4), 0x4, 0x110) != 0)
{
Array.Resize(ref names, names.Length + 1);
names[names.Length - 1] = new string[2]
{
memory.ChainReadString_Unicode(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i*0x4), 0x4, 0x168, 0x0),
(memory.ChainReadInt32(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i * 0x4), 0x4, 0x110)).ToString()
};
}
}
Последний раз редактировалось half-node; 02.10.2012 в 01:17.
Причина: Добавлено сообщение
Не правильно читаешь строку. Вторым параметром нужно указывать максимальную длину строки.
memory.ChainReadString_Unicode(0xA571E0, 32, 0x1C, 0x1C, 0x28, 0x18, (i*0x4), 0x4, 0x168, 0x0)
Цитата:
Сообщение от half-node
(memory.ChainReadInt32(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i * 0x4), 0x4, 0x110)).ToString()
Отрицательное число на выходе - это нормально для WID лута. Либо читай в UInt, либо выводи в Hex, либо вообще не парься по поводу
"отрицательности".
Я обычно отображаю в Hex:
memory.ChainReadInt32(0xA571E0, 0x1C, 0x1C, 0x28, 0x18, (i * 0x4), 0x4, 0x110)).ToString("X")
Т.к. сами WID смысла не несут. WID нужно только для сравнения.
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 02.10.2012 в 10:17.
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Я когда свой софт писал - делал упор на оптимизацию скорости. Т.к. на ТВ или тиграх и так клиент может притормаживать, а с аналогом "EnemyDetector" всё может вообще отвалиться. Поэтому, например, поля объектов максимально кэшируются, читаются не поштучно (например, MemPtr.Int32) а сразу пачками (например, с помощью структуры с explicit layout). Можно сделать всю такую ООП-шную объектную модель с классами типа PWMob, у которого были бы свойства X, Y, Z, Level, IsAggressive, IsAttacking и т.д. Было бы очень удобно писать боты, но с оптимизацией был бы полный швах... Я думаю, если добить идею инпроцессного режима, то там оптимизация была бы не нужна и такой подход был бы более уместен.
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от whoami
Можно сделать всю такую ООП-шную объектную модель с классами типа PWMob, у которого были бы свойства X, Y, Z, Level, IsAggressive, IsAttacking и т.д.
Ну как видишь в этом направлении я и задал вектор развития проекта. И туда и двигаюсь. Пока наращиваю класс Персонажа. Класс пати описан. Делать софт на порядок удобнее.
Цитата:
Сообщение от whoami
но с оптимизацией был бы полный швах...
Пинг 500-600 мс средний. Время работы программы (чтение памяти и обработка данных) 20-30 мс. Ожидание в потоке 1000 мс. Получается что 90% времени программа просто ничего не делает. Так что вопрос оптимизации, как я считаю, не стои'т.
Основная задача - сделать удобный инструмент для создания софта. И в этом нам поможет ООП.
Цитата:
Сообщение от whoami
Я думаю, если добить идею инпроцессного режима, то там оптимизация была бы не нужна и такой подход был бы более уместен.
Если решить эту задачу, то готовая модель игровых структур легко ляжет на новый способ обращения к памяти. Кстати, где бы почитать по поводу работы с внедренной DLL? Как внедрить DLL код есть и сама длл для внедрения не сложная. А вот что происходит дальше - не очевидно. Как обращаться к памяти из внедренной DLL?
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 04.10.2012 в 07:25.
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
krukovis, ну вот пробежать по сотне персонажей (на ТВ максимум может быть 160 игроков) - получить их координаты, имя, уровень/культавацию, ID, ID клана, жив/мёртв, хирки, привязка каты, для таргета - ещё ХП/МП/бафы, плюс ещё мобов обработать - выбрать петов друлей и мистиков. Тут уже в 20 мс уложиться трудно. и обновляюсь я раз в 500 мс, а пинг чтобы на ТВ играть - лучше иметь не больше 150 мс.
Для внедрения .NET-кода в ПВ у меня код есть, часть - даже в паблик выкладывал. Смысл в том, что там есть используется альтернативная версия ProcessMemory, которая не лезет в память другого процесса, а работает с текущим, потоки создаёт не через CreateRemoteThread, а через CreateThread и т.д.
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от whoami
А у меня вот с таким вариантом после второй отправки пакета падает клиент. Что не так?
Инектится в пустую страницу видимо. А ты в каком варианте используешь? В своем FW или в FW 2.0 ?
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от krukovis
А вот что происходит дальше - не очевидно. Как обращаться к памяти из внедренной DLL?
дальше происходит все то же самое, как и со своим процессом. Поскольку dll находится в адресном пространстве клиента, то обращение к памяти клиента идет через обычную арифметику указателей.
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от silk
дальше происходит все то же самое, как и со своим процессом. Поскольку dll находится в адресном пространстве клиента, то обращение к памяти клиента идет через обычную арифметику указателей.
В теории я это все знаю. В музыке кода бы. В идеале - С#.
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
krukovis, почему не хочешь хранить смещения в отдельном файле (например ini)? чтобы при выходе обновы только изменить адреса, без перекомпиляции проекта?
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от phoenixusa
krukovis, почему не хочешь хранить смещения в отдельном файле (например ini)? чтобы при выходе обновы только изменить адреса, без перекомпиляции проекта?
Почему не хочу? Хочу )), но:
Обновы бывают двух видов:
1) Большие - когда меняются адреса и структуры функций.
2) Маленькие - когда меняются только адреса.
В первом случае ini-файл не спасет, т.к. в ini не опишешь структуру функции. А во втором, ini-файл - не элегантное решение, ведь я выложил исходники, где показываю как использовать Offset Retriever и ini-файл вообще становится не нужным.
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
krukovis, можешь если не затруднит описать принцип работы класса Offset Retriever. из кода класса было понятно, что ты производишь поиск поиск по файлу elementclient.exe или в памяти процесса. Поиск адресов и офсетов выполняешь по шаблону. вот только не понятно что они из себя представляют, и на основании чего составляются?
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Цитата:
Сообщение от Da4Da4
вот только не понятно что они из себя представляют, и на основании чего составляются?
Шаблоны представляют с собой байт-код записанный в виде строки без пробелов и разделенных знаком ?. Знак ? - обозначает адрес или оффсет длинной DWORD = 4 байта.
Разберем поиск оффсета на примере поиска базового адреса.
Базовый адрес мы можем найти с помощью описанного на форуме мануала или посмотреть в этой теме.
Для текущей версии RUOFF он равен 0x00B8FBCC
1. Для начала открываем elementclient.exe в [Ссылки могут видеть только зарегистрированные пользователи. ]
2. Дальше находим первое вхождение константы 0x00B8FBCC. Делается это так:
Тыкаем в свободное пространство правой кнопкой мыши
Выбираем поиск
Константы
3. Нажимаем ОК и находим первое вхождение:
4. Эта константа применяется в очень многих функциях, т.к. это базовый адрес. Но наша задача - найти такую функцию, которая с большой вероятностью не будет изменяться долгое время. Я потыкал дальше еще несколько раз Ctrl+L - это сочетание значит "Искать тоже самое дальше". И нашел вот такой кусок кода, который с большой вероятностью будет оставаться таким же очень долгое время. Я так думаю, потому что там используется только один базовый регистр EAX и несколько PUSH 0 в исключительной конфигурации:
5. Дальше мы можем использовать эту *с большой долей вероятности* постоянную часть функции и сделать из нее МАСКУ. Для этого нам нужно скопировать этот кусок кода как байт-код:
6. Дальше откроем блокнот и вставим туда то, что находится в буфере и увидим вот такой байт-код:
"A1 CC FB B8 00 6A 00 6A 00 6A 00 8B 48 1C 6A 00
6A 00"
Красным выделил BA.
Нам он нужен для поиска Базового адреса, поэтому мы заменяем базовый адрес на ? и удаляем пробелы.
Получаем: "A1?6A006A006A008B481C6A006A00"
Теперь мы можем использовать эту маску для поиска Базового адреса в автоматическом режиме.
По поводу поиска адресов функций я расскажу как нибудь в другой раз.
Добавлено через 8 минут
Чтобы убедиться, что это уникальное сочетание можно проверить на клиенте 1.3.4-1.3.6
С этого времени это сочетание не менялось:
И скорей всего уже не поменяется.
И мы можем увидеть, что на Cerera.org 1.3.4-1.3.6 базовый адрес 926FD4.
А посмотрим что нам говорит эта тема:
Цитата:
Flugel PW, клиент 1.3.4 версии, сборка 2265, версия обновления 50
BaseAdress=00926FD4
GameAdress=0092764C
________________
-------------------------------------------- PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
-------------------------------------------- [for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
-------------------------------------------- InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 15.02.2013 в 20:21.
Причина: Добавлено сообщение
Re: PW FrameWork 2.0 - новый взгляд на инструмент для ботостроения
Большое спасибо за подробное объяснение.
В принципе мои предположения были верными, но все же не было полной уверенности.
Я так предполагаю, что с адресами функций сложностей не много больше, так как они имеют большею вероятность изменения, пускай и незначительно. Стало быть в силу этого подходить к выбору шаблона для поиска нужно более ответственно.