 |
Конструктор класса в памяти - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
20.06.2013, 17:43
|
#1
|
|
|
|
Сержант
|
 Регистрация: 11.12.2010
 Сообщений: 110
 Популярность: 541
 Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Конструктор класса в памяти
Привет, ребята.
Вопрос простой: как со стопроцентной уверенностью локализовать конструктор класса (скажем, игрока) в памяти процесса Perfect World?
Ответ на данный вопрос позволит существенно оптимизировать ботов, работающих с мобами/игроками/лутом, а так же вычислить с абсолютной точностью настоящие размеры всех структур в PW.
Короче, кто понял суть вопроса, тот должен понимать, что это было бы ну очень круто.
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
20.06.2013, 20:27
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 31.05.2013
 Сообщений: 5
 Популярность: -356
 Сказал(а) спасибо: 0
Поблагодарили 12 раз(а) в 11 сообщениях
|
Re: Конструктор класса в памяти
Мне кажется что этого никто не скажет)
|
|
|
25.06.2013, 14:50
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: Конструктор класса в памяти
Подсказка - посмотреть как это делает плагин ClassInformer для IDA =)
+ В конструкторе ты на найдёшь размер экземпляра класса, там только инициализация полей. Размер экземпляра явным числом указан в операторе New, который идёт непосредственно перед вызовом конструктора.
N.B. - Не совсем понял, как это должно оптимизировать работу. Пояснишь ?
|
|
|
27.06.2013, 00:17
|
#4
|
|
|
|
Сержант
|
 Регистрация: 11.12.2010
 Сообщений: 110
 Популярность: 541
 Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Конструктор класса в памяти
vogel, всё именно так. Размер явно задаётся в new. Но new и вызывает конструктор, так что там всё будет рядом.
Способ оптимизации крайне прост. Вот любой типичный ingame-бот мутит огромнейшие циклы по "страницам структур" в памяти клиента игры, либо перебирает циклами "хеш ближайших игроков/монстров" с целью найти структуры игроков/мобов/лута и т.д.
Но если перехватить управление из конструктора, то можно заставить игру работать на бота - сразу сохранять адреса структур в каких-нибудь там динамических списках типа vector.
И никаких циклов! Игра всё будет делать сама. А удалять структуры из списка можно будет с помощью деструкторов соответствующих классов.
Я честно до сих пор не понимаю, почему люди продолжают писать ботов в виде отдельных программ с использованием всяких там OpenProcess, ReadProcessMemory, VirtualAllocEx и CreateRemoteThread (вероятно потому, что гораздо проще копирнуть с форума то, что выложено предшественниками, нежели пошевелить немного извилинами), когда можно внедрить DLL и избавить себя от всех этих функций раз и навсегда, пользуясь адресным пространством PW как своим.
И я также до сих пор не понимаю, почему раньше фишку с конструкторами-деструкторами ещё никто не реализовал (или не рассказал общественности :3).
Это как перехват пакетов - как два пальца. Трабл только в том, чтоб найти это место. И к тому же, если узнать точный размер структуры, не нужно будет копаться в памяти наугад, выходя за пределы структуры в поисках скрытого смысла найденной там каши из левых байтов; можно будет вообще описать полную структуру в виде struct/class(/record для delphi), а оттуда уже шагнуть вперёд - найти и полностью описать как можно больше методов этого класса.
Такую фишку уже проворачивали с другими игрушками, например GTA: San Andreas, где некоторые участки кода игры восстановлены тупо до исходников на C++ (причём участки не малые).
Тут же пойдут всякие там фреймворки и прочая лабуда, что позволит ЗНАЧИТЕЛЬНО облегчить разработку ботов, плагинов, программ для Perfect World и игр на том же движке.
Так что я реквестирую БОЛЬШЕ ЛЮДЕЙ в эту тему. Спасибо. ;)
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
Последний раз редактировалось BritishColonist; 27.06.2013 в 00:21.
|
|
|
27.06.2013, 18:19
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: Конструктор класса в памяти
Про внедрение DLL и "разгуливанию" по памяти ПВ как по своей - согласен, сам так делаю.
Про создание SDK на основе разгаданных классов - поддерживаю, надо заниматься. Вон братюни, которые по шутерам угорают - уже давно всё сделали и для BF и для СoD и даже для всяких варфэйсов с APB.
Про "перехватить управление из конструктора" - весьма и весьма спорно. Гораздо выгоднее перехватить диспетчер распакованных пакетов в клиенте - тогда ты будешь своевременно получать свежую инфу от сервера и сможешь сам держать себе списки мобов/игроков/чего захочешь без периодического поллинга и итерирования памяти клиента. Опять же своевременное уведомление о событиях - кто что кастанул, кто где издох... ну ты понял, я уверен =)
P.S. Если что - пиши в скайп, он у меня в подписи на пвид'е.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 23:33.
|
 |