Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

Вектор развития

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 17.07.2018, 13:10   #1
 Разведчик
Аватар для HINCO
 
HINCO никому не известный тип
Регистрация: 17.07.2018
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
Exclamation Вектор развития

Доброго времени суток, немного расскажу о себе - я студент вуза, обучаюсь на факультете инженерия ПО ну и любитель MMO, так вот в вузе так таковой практике по программированию нет а писать учебные программы на столько скучно что меня заинтересовала идея написание софта для игр в частности пв так вот опыта в программирования у меня не очень много и хотелось бы разобраться в этой теме, в частности каким образом доставать информацию из клиента игры и естественно редактирование или использование её для софта строения, ну я надеюсь на объёмные ответы или ссылки на темы. Язык (С#)
ЗЫ: хотелось бы еще узнать один момент, пока шарился по ресурсу заметил тот факт что большинство пишут программы на делфи, с чем это связано? надеюсь на вашу лояльность к нубу ^^!
Спасибо за внимание)
  Ответить с цитированием
Старый 17.07.2018, 20:45   #2
Super Moderator
 Маршал
Аватар для Тигрь
 
Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(Тигрь сломал счётчик популярности :(
Регистрация: 05.05.2009
Сообщений: 875
Популярность: 48955
Золото Zhyk.Ru: 850
Сказал(а) спасибо: 155
Поблагодарили 739 раз(а) в 274 сообщениях
 
По умолчанию Re: Вектор развития

вот тут очень много информации можно получить по твоему вопросу https://zhyk.ru/forum/forumdisplay.php?f=343
________________
Продаю приват читы для AION Absolute, desteny 3.5, Legend, Cataclysm, Ru, EU, NA
Продаю многооконку на R2 Пишу читы на заказ под любые игры. Предложения в ЛС.
Все мои читы/программы/статьи тут: http://zhyk.ru/forum/showpost.php?p=38501&postcount=21
  Ответить с цитированием
Старый 17.07.2018, 20:53   #3
 Разведчик
Аватар для Makasas
 
Makasas никому не известный тип
Регистрация: 20.01.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вектор развития

На делфи, как по мне, удобнее писать. Скорее всего потому, что информации по делфи в интернете очень много! Да и вся информация о писании софта для ПВ построена на делфи ( почти вся ). Поэтому и на делфи. На шарпе тебе придется намного больше гуглить.
  Ответить с цитированием
Старый 18.07.2018, 19:33   #4
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Вектор развития

Цитата:
Сообщение от HINCOПосмотреть сообщение
Доброго времени суток, немного расскажу о себе - я студент вуза, обучаюсь на факультете инженерия ПО ну и любитель MMO, так вот в вузе так таковой практике по программированию нет а писать учебные программы на столько скучно что меня заинтересовала идея написание софта для игр в частности пв так вот опыта в программирования у меня не очень много и хотелось бы разобраться в этой теме, в частности каким образом доставать информацию из клиента игры и естественно редактирование или использование её для софта строения, ну я надеюсь на объёмные ответы или ссылки на темы. Язык (С#)
ЗЫ: хотелось бы еще узнать один момент, пока шарился по ресурсу заметил тот факт что большинство пишут программы на делфи, с чем это связано? надеюсь на вашу лояльность к нубу ^^!
Спасибо за внимание)

Добро пожаловать.

Я приведу несколько категорий ПО для пв:
1. Автоматизаторы банальных действий (клавиатурные макросы, кликеры).
2. Автоматизаторы чуть менее банальных действий (например, автоматическое использование предметов лечения, автоматический перезаход в аккаунт после отключения).
3. Боты. Автоматизируют геймплей: перемещение по определённым локациям, сбор ресурсов, убийство монстров, выполнение заданий. Можно разделить на подкатегории:
3.1. In-game - работают при запущенном клиенте игры. Интересны тем, что человек может наглядно видеть работу бота и вмешиваться в неё при необходимости. Сложны в реализации тем, что заставлять персонажа выполнять действия придётся с помощью специальных вставок ассемблерных команд, а вставки эти придётся правильно составлять, основываясь на изучении кода игры.
3.2. Out of game (OOG) - работают без запуска клиента игры. Интересны тем, что практически не расходуют ресурсы компьютера. Сложны в реализации, так как на программиста возлагается работа с сетевым протоколом игры а так же необходимо решить вопрос с информацией о 3D-объектах мира (они будут препятствовать путешествию бота из точки A в точку B).
4. Редакторы и архиваторы для файлов клиента и сервера. Например, позволяют администраторам фришек редактировать предметы, иконки и т.д.
5. Дополнения для клиента и/или сервера. Фактически дополнение существующей игры новым функционалом (подобно плагинам для какого-нибудь Winamp). Имхо, высший пилотаж.
6. Отдельный пласт - вспомогательные инструменты для разработки. Бывает, что в используемом ПО для анализа и поиска данных в исполняемых файлах разработчику не хватает какого-то функционала. Этот функционал часто воплощается в виде небольших отдельных утилиток.

Разумеется, эти категории применимы не только к пв. В зависимости от интересов может потребоваться изучать разные вещи. Предлагаю создателю темы хватать быка за рога и делать простенького бота.
По поводу Delphi, C# и других ЯП. На дельфи много примеров в основном по той причине, что в дельфи удобно делать формочки. По этой же причине в 90% туториалов внедрение кода происходит из таких же приложений с формами (т.е. из полноценных отдельных программ, никак не связанных с игрой), поэтому для работы с адресным пространством игры они полагаются сугубо на функции WinAPI: FindWindow, GetWindowsThreadProcessId, OpenProcess, Read/WriteProcessMemory, VirtualAllocEx, CreateRemoteThread.
Лично я выступаю против этого подхода и предпочитаю реализовывать весь фукционал внутри DLL, тогда отпадает необходимость в вызове перечисленных функций: DLL разделяет память процесса и может напрямую вызывать функции игрового клиента, программисту не нужно заботиться о копировании в адресное пространство игры текстовых строк и т.д.
Поэтому я рекомендовал бы использовать любой компилируемый язык, поддерживающий компиляцию в виде DLL и создание своей функции DllMain (точка входа при подключении DLL к процессу), а именно: C, C++, C#, Delphi и т.д.
Реализация управляющей программы в виде отдельно работающего процесса - геморрой с кучей WinAPI-функций, по умолчанию заниженное быстродействие, сложности с внедрением кода.
В пользу Delphi/C/C++ могу сказать, что они позволяют использовать inline-assembly - ассемблерные вставки кода. Именно эти вставки заставляют персонажа бегать, использовать способности и т.д. Местные называют код для ассемблерных вставок инжектами. Но Delphi я бы не рекомендовал: писать вырвиглазные begin .. end, function, procedure и record быстро надоест. Если хочется делать формочки как Delphi и работать с памятью как в C, то рекомендую попробовать Embarcadero RAD Studio (а именно C++ Builder).
C# не позволяет писать на асме, но внедрять можно и код, сохранённый в переменной в виде массива байтов. При этом полностью нарушается читаемость внедряемого кусочка кода. Вам нужно глянуть пару примеров, чтобы сразу понять разницу и выбрать подход, более близкий к сердцу - рекомендую посмотреть соседние темы.

Если интересуют более простые вещи: кликеры, макросы и т.д., они легко программируются с помощью AutoIt или AutoHotKey.

Если интересуют редакторы игровых файлов - здесь нужно много свободного времени для анализа кода игры и извлечения из него функций, работающих с файлами. Повторив этот код в своей программе на любом ЯП, можно будет извлечь файлы из архивов игры.

Если интересна тема OOG-ботов, то опять же подойдёт любой ЯП, так как программа полагается не на внедрение кода, а на грамотно реализованный сетевой протокол. Главные требования к ЯП - возможность работы с сетевыми сокетами и удобство разработки.

Итак, если цель НЕ включает в себя исследование кода клиента и поиск информации, то скорее всего речь идёт о пункте 1 моей классификации софта для пв.
Во всех остальных случаях вам понадобится определённый инструментарий.
Мой список:
1. Notepad++. Работа с текстовыми документами, ещё можно настроить как простенькую IDE для какого-нибудь скриптового ЯП. Удобно для заметок, тестирования регулярных выражений, быстрого преобразования текста (опять же с помощью регулярок).

2. MS Visual Studio Community. Среда разработки. Удобнее аналогов на MinGW тем, что позволяет удобнее описывать ассемблерные вставки. В остальных случаях Eclipse Oxygen.

3. x64dbg. Отладчик с открытым исходным кодом. Собственно, основной источник данных об исследуемой игре. Вы наверняка слыхали про хвалёный отладчик IDA Pro. У него есть бесплатная версия, но она поставляется без плагина HexRays (пытается восстановить из ассемблера код на ЯП высокого уровня). В полностью бесплатном и открытом x64dbg в качестве подобного плагина выступает Snowman. Аналоги x64dbg: IDA Pro, OllyDbg.

4. Cheat Engine. Приложение для разработки простых тренеров и читов. Основное предназначение для разработчика - поиск адресов памяти и смещений, чтобы получить доступ к нужным значениям в игре (количество хп, координаты персонажа и т.д.).

5. Любой HEX-редактор. Поможет анализировать дампы памяти. Приветствуются функции сравнения файлов и интерпретации выделенных байтов как данных разных типов (идеально подойдёт 010 Editor, только он платный).

Экспериментировать рекомендую на пиратских фришках (а не на руофе или PWI - столкнётесь там с дополнительными трудностями в виде защиты и банов), при этом желательно, чтобы на сервере не было частых существенных обновлений, иначе встрянете с постоянно переезжающими адресами памяти.

Вот вам моя статейка 7-летней давности
https://zhyk.ru/forum/showthread.php?t=274071

Фактически сейчас ничего сильно не поменялось, подходы к внедрению и модификации кода - те же.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 30.07.2018 в 20:28.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Flesher (02.10.2018), qqsda (10.09.2018)
Старый 30.07.2018, 15:48   #5
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Вектор развития

Задали пару вопросов в личку, дополню свой ответ здесь, может, кому ещё пригодится.

Вы решили кодить под пв. Вам потребуется: базовые знания английского, персональный компьютер.

Из литературы могу посоветовать шикарную книгу: Game Hacking. Developing Autonomous Bots for Online Games - гуглится в pdf, на английском. Очень жалею, что не наткнулся на неё раньше. Название говорит за себя. Немного устарело в плане используемого ПО, но суть отражает отлично.
Также рекомендую поискать литературу по выбранному языку программирования (о выборе ЯП чуть ниже). Особое внимание всегда обращайте на год издания. Если книга - перевод на русский, то обязательно смотрите год издания оригинала. Более свежее издание на оригинальном языке наверняка будет информативнее перевода. Если пойдёте в книжный магазин, не вздумайте сразу покупать литературу по программированию, лучше погуглите название и автора. Может быть, PDF уже давно слит и гуляет по сети.

По поводу изучения программирования. Я предлагаю такой путь: найдите какой-нибудь онлайн учебник с задачами по программированию, возрастающими по сложности. Только не наткнитесь на олимпиадные задачи, иначе изломаете себе голову на поиск решения, а не на программирование. И попробуйте прорешать задачки.

Или можете следовать моему методу: попробуйте реализовать консольную программу, которая ожидает ввод пользователя: принимает новые числа, пока не введут 0. После ввода 0 программа сортирует числа и находит среднее арифметическое. Числа следует помещать в двунаправленный кольцевой список собственной реализации, выполненный в виде класса. Т.е. чтобы можно было создать ещё один список и повводить числа в него.
Реализуйте это на C++, не подключая к файлу сторонние библиотеки и файлы algorithm и vector. Этим сразу покроете ООП, работу с памятью, какой-нибудь алгоритм сортировки и важную структуру данных - динамический список.
Когда получится всё это сделать, попробуйте реализовать всё то же самое, используя контейнеры стандартной библиотеки (файлы vector или list заменят ваш класс списка) и алгоритмы (файл algorithm, в нём есть функции для сортировки массивов). Будет гораздо лаконичнее, но теперь вы примерно представляете, как внутренне устроены эти вещи.

После того, как оба варианта будут работать на C++, попробуйте решить эту задачу на интерпретируемом языке Python. В нём нет возможности напрямую работать с указателями (не получится сделать динамический список), зато есть куча стандартных типов и алгоритмов. Скорее всего программа получится очень простой и у вас появится отвращение к C++, но не всё так просто. Дело в том, что Python гораздо проще и лаконичнее, а C++ гораздо быстрее выполняется (в ~300 раз быстрее). Кроме того, на плюсах удобнее работать с адресным пространством процесса (стандартными средствами в своём процессе, средствами WinAPI - в чужом). Писать любые моды, читы, плагины и т.д. - только C++, поскольку требуется модифицировать память "взламываемого" приложения.

После прохождения онлайн-учебников и(или) реализации предложенной мной программы, налетайте на WinAPI, основные функции я перечислял в посте выше. Поставьте клиент какой-нибудь фришки и начните с переименовывания окна PW. Раньше это был основной способ запускать множество окон пв на одном компьютере.
Затем осваивайте Cheat Engine, создавайте таблицу значений персонажа и программируйте какую-нибудь читалку текущих координат персонажа. После этого сделайте читалку имён и координат ближайших NPC, игроков и мобов (выводите всё это в консоль или в файл).
Когда справитесь с "читалками", приступайте к "инжектам". Попробуйте заставить персонажа выделить самого себя и бафнуть. Вы просто обязаны уметь внедрять код как с помощью CreateRemoteThread, так и с помощью DLL. Лишь попробовав оба способа, вы ощутите разницу и сделаете осознанный выбор между этими двумя техниками внедрения кода. Я, как всегда, агитирую за DLL на C++.

Ну и дальше я рекомендую такой план решения любых задач по программированию: вам поступила задача; если нужно решить её как можно быстрее, используйте Python; если одна и та же задача поступает к вам постоянно, задумайтесь о скорости выполнения вашей программы и попробуйте реализовать её на C++. Вообще питон хорош для прототипирования: можно быстро создать каркас приложения, наметить, что с чем будет связано, что от чего зависеть, построить иерархию классов. А затем всё переносится на компилируемый ЯП типа C++.

Также многим нравится использовать для ботов, модов и читов C#. Он на самом деле может стать компромиссом между гибкостью C++ и простотой Python, но всё же шарп сильно ориентирован на энтерпрайз разработку (более заточен для больших проектов). В C# всё слишком объектно-ориентированно и к этому нужно будет привыкнуть. Можно столкнуться с решением каких-то, казалось бы, лишних задач, пытаясь реализовать какую-то мелочь.

Когда немного научитесь кодить на одном-двух языках (всё же рекомендую основным брать C++, второстепенным - Python), вы сможете решать повседневные задачи, такие как решение домашки по линейной алгебре, а со временем сможете без проблем решать задачи с использованием машинного обучения, генетических алгоритмов и т.д.
Но рано или поздно появится сложнейшая задача, перед которой вы бессильны. Например, какой-нибудь особенно сложный бот для пв с заумной логикой принятия решений. Здесь потребуется как-то объединить получение данных из игры, модификацию памяти игры, основной цикл работы вашего приложения, учесть откаты способностей, как-то на ходу строить правильный порядок применения этих способностей и так далее. Наверняка вы попробуете пару раз это реализовать, забрасывая и возвращаясь внось через какое-то время. Проблема будет в том, что вы не знаете, как вообще организовать структуры данных, чтобы всё просто программировалось и эффективно работало.
Здесь я рекомендую поизучать программную инженерию в целом и паттерны проектирования в частности. Программная инженерия - это целая наука, которая расскажет, как должны разрабатываться программные продукты, как над проектами работают целые команды, какой у ПО жизненный цикл и т.д. Паттерны проектирования (их огромнейшее множество) - это своеобразные наборы решений и подходов к программированию. Например, существуют паттерны объектно-ориентированного проектирования, они рассказывают, как следует объединять классы, используя наследование, полиморфизм и аггрегацию (композицию) объектов для того, чтобы эффективно построить решение для поставленной задачи.


Как и всегда, задавайте вопросы здесь или в пм (лучше здесь), постараюсь ответить. Удачи.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 30.07.2018 в 20:26.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
388672 (15.10.2018), вася95 (20.01.2019), Flesher (02.10.2018), qqsda (10.09.2018)
Старый 30.07.2018, 19:12   #6
 Разведчик
Аватар для HINCO
 
HINCO никому не известный тип
Регистрация: 17.07.2018
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вектор развития

Благодарю за столь объемные пояснения, выбрал куда мне двигаться и чего хочу достичь)
  Ответить с цитированием
Старый 10.09.2018, 17:37   #7
 Разведчик
Аватар для qqsda
 
qqsda никому не известный тип
Регистрация: 26.10.2009
Сообщений: 45
Популярность: 10
Сказал(а) спасибо: 122
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Вектор развития

Как понять что я нашел массив данных в СЕ? Например массив данных о луте от которого уже можно найти координаты, тип и тд
  Ответить с цитированием
Старый 11.09.2018, 13:56   #8
 Сержант
Аватар для BritishColonist
 
BritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауруBritishColonist излучает ауру
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
 
По умолчанию Re: Вектор развития

Цитата:
Сообщение от qqsdaПосмотреть сообщение
Как понять что я нашел массив данных в СЕ? Например массив данных о луте от которого уже можно найти координаты, тип и тд

Рекомендую действовать с другого конца: искать пвшные массивы, отталкиваясь от числа элементов.
Приходим в безлюдное место (например, на своём собственном локальном сервере, или в данже), выкидываем предмет на землю, ищем значение 1 (сейчас валяется один предмет), выкидываем ещё предмет - ищем значение 2. Поднимаем все предметы, ищем значение 0. Скорее всего этих шагов будет достаточно, чтобы осталось 1-2 адреса. Далее ставим в CE брейкпоинт на запись по адресу, снова выкидываем предмет - видим строчки кода, осуществляющие запись по адресу. Из этой строки можем легко найти смещение, например, там может оказаться запись по адресу памяти eax+0x18, тогда +0x18 - это смещение. Вычитаем его из адреса, на который ставили брейкпоинт, получаем начало структуры "массив". Ищем в CE это начало структуры как DWORD, немного отсеиваем результаты, затем перебираем их с целью поиска наиболее короткой цепочки смещений от базового адреса.

Мы нашли адрес массива и смещение от этого адреса до кол-ва элементов в массиве, теперь идём в соседнюю тему и смотрим первое сообщение, оно отражает структуру самих массивов (отвечает на вопрос "как перебирать элементы?"): https://zhyk.ru/forum/showthread.php?t=287321 Ищите где-то внутри спойлеров InventoryArray.

Точно так же устроены и находятся в CE другие массивы пв: предметы инвентаря, прогруженные персонажи и монстры, изученные скиллы и т.д. Удачи!
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3

Последний раз редактировалось BritishColonist; 11.09.2018 в 13:58.
  Ответить с цитированием
Пользователь сказал cпасибо:
qqsda (11.09.2018)
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Продам] RU4 для развития и боёв -300р Vitaly1112 Dark Orbit 2 10.01.2015 16:07
[Обсуждение] вектор развития боксибота чпооиньк Общение и обсуждение 16 24.08.2011 16:41
так для развития maxxx Ragnarok Online 5 22.06.2010 11:41
ну так для развития! maxxx DotA Allstars 0 14.11.2008 08:27

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 06:04.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net