• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стремитесь принять участие в ежегодном литературном конкурсе от "Ордена Хранителей"! В этот раз темой конкурса являются тайные организации. На днях организатор продлил сроки сдачи работ, вы ещё можете успеть! Ждем именно вас.

    Ссылка на конкурсную тему - тык

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
  • Первое сообщение
  • #1
1767600363729.png

RU EN

 
Последнее редактирование:

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
500
Благодарности
355
Баллы
230
Доступ предоставляется через регистрацию ключа в dll плагине.
Мне кажется сломают всю защиту. Например, через IDA открывается модуль, содержащий ключ, находят его, затем ключ подставляется в приведённую прогу и нужный том дешифруется.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Нафига? Для параноиков и жаб?
защита труда от идиотов. а что ты с таким негативом, уже присматривал что можно стянуть с парочки модов?)

Мне кажется сломают всю защиту. Например, через IDA открывается модуль, содержащий ключ, находят его, затем ключ подставляется в приведённую прогу и нужный том дешифруется.
потому что ключ не должен указываться где-либо явным образом.
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
983
Благодарности
552
Баллы
245
Реализована система шифровки vdf/mod томов
защита труда от идиотов.
*around the head*
Зачем это все? Ну давайте все зашифруем, зальем на диск, положим его в сундук, запрем, закопаем, а ключ выбросим. Кому это все нужно? Пираньи не для этого МДК сделали и опубликовали. Зачем все скрывать? Денег на этом ты не заработаешь, да и пираньи запрещают. Ты много сил и времени не туда потратил. Рано или поздно расшифрованный пи-код окажется в памяти, оттуда его можно слить, вот только даже этим никто не захочет заниматься.
 

Ney

Забанен
Регистрация
2 Ноя 2015
Сообщения
501
Благодарности
171
Баллы
220
@Gor, Жаба, она такая жаба.. ©
 
Последнее редактирование:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.682
Благодарности
7.423
Баллы
1.910
защита труда от идиотов. а что ты с таким негативом, уже присматривал что можно стянуть с парочки модов?)
неее)))
А по поводу защиты от идиотов, тут интересно что?!
В лицензионном соглашении у GDMK написано(дословно не помню)
все что делается с помощью данных программ - все делается бесплатно и в открытом виде.
Вот по этому я и не считаю это нужным.:oops:
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Ты много сил и времени не туда потратил.
сколько, 3.5 часа? :D

Кому это все нужно?
хз, лично мне это не нужно, но есть любители поиграть в шпионов, так пускай играют. кому хуже то? :)

МДК сделали и опубликовали
я не вижу реального вклада пираний и/из-за издателя. почти все чем ты пользуешься заслуга исключительно комьюнити, а точнее небольшой группы людей с этого портала. что-то я не вижу наплыва моддеров с этими вашими мдк

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

В лицензионном соглашении у GDMK написано(дословно не помню) все что делается с помощью данных программ - все делается бесплатно и в открытом виде.
ты это про vdfs32.exe? ну на замену этого хлама я может сегодня-завтра другой напишу, но для х64 томов, ибо лимит в 2гб это не комильфо *wrong*
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
не, не про него. Я где-то это читал, и по моему тут:
shw32.dll и vdfs32g.dll это моя личная интеллектуальная собственность, которая не имеет ничего общего с готикой (использование данного ПО возможно с любым продуктом) и уж тем более не связана с GMDK. Не затронуты ни продукты пираний, ни собственность их авторов, а значит что и все алгоритмы, поставляемые мной, не подпадают под эти правила
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
10.682
Благодарности
7.423
Баллы
1.910

Lorddemonik

★★★★★
Редактор раздела
Регистрация
17 Дек 2011
Сообщения
1.319
Благодарности
782
Баллы
410
Помнится, видел не раз, как люди вставляя лютые функции и расширения в скрипты, при потери исходников больше открыть их не могли. А тут ещё теперь и посеешь папку с проектом и ключ... Аналогичная ситуация будет. Уверен, найдется группа людей
 

Vlad_i_Slav

Участник форума
Регистрация
21 Мар 2013
Сообщения
247
Благодарности
98
Баллы
190
Не понимаю, от чего начался весь этот сыр-бор насчёт шифрования. Как по мне, это хорошая система "защиты от дураков", и автор большой молодец, что её реализовал. Кроме того, это поставит на "нет" все попытки некоторых "авторов" выдавать чужие работы за свои.
Выражения типа "ты потратил время и силы не туда" считаю некорректными. Шифрование томов (как и любых других файлов-исходников) - очень полезная вещь.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.671
Баллы
305
Приветствую. Хотелось бы опробовать ваш пакет, скажите, когда он будет в открытом доступе?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Кому не терпится прошу в лс
 

Phil_Gaba

Участник форума
Регистрация
24 Апр 2016
Сообщения
58
Благодарности
37
Баллы
180
Есть какие-нибудь новости по проекту? Как продвигается разработка?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Есть какие-нибудь новости по проекту? Как продвигается разработка?
Не знаю даже, я наверное месяц-два не притрагивался к проекту. Там у плагинов виртуалки oCMobInter куда-то уехали и я слегка расстроился на неопределенный период времени :) И так эти тонны кода люто высушили, а тут очередной неждан.. Мне просто лень что-то править, хоть там и делов на две копейки....
В общем повторюсь: кому сильно горит - текущее состояние юниона могу дать в лс. Главное сильно не теребить класс oCMobInter и всё.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Так, вернулся в строй. Буду закрывать последние спорные вопросы. Главной проблемой было API на готику.

Кто еще не понял что это: огромный программный интерфейс, полностью дублирующий движок и позволяющий нативно не только переопределять все его действия, но и создавать производные интерфейсы благодаря восстановленной vtable (@awerwe1 отдельное спасибо за парсер таблиц). То есть грубо можно взять класс oCNpc, заколхозить производный oCNpcEx : oCNpc и запихнуть в него пару сотен стековых переменных. На выходе получим собственную реализацию нпс АБСОЛЮТНО легально и БЕЗ костылей. Так что это уже не просто кучка хидеров, а прямое продолжение движка.

Уже где-то неделю ковыряю очередной парсер по созданию этого самого API (да, я решил полностью программным путём переделать всё с нуля), сейчас он генерирует вполне компилябельный код. Это чуть больше 200 файлов на каждый движок (по 600 классов на ~8.5К виртуальных методов). Так что думаю если подводных камней не обнаружится [шутка про статус бар с обратным ходом], то задерживать релиз больше не буду. И даже если интерфейс будет местами кривоват, допатчим уже вместе.

Пример результата парсинга:
upload_2018-9-23_1-4-29.png
upload_2018-9-23_1-5-11.png
upload_2018-9-23_1-5-44.png

Небольшой бонус: по кнопке T преобразуем выделенные модели объектов oCMOB в копию главного персонажа
upload_2018-9-23_1-12-49.png upload_2018-9-23_1-13-17.png
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
625
Итак, пока подводных камней не наблюдаю. Так что могу позволить себе выложить лог репорт проделанной работы по API.

Нулевой этап. На этом этапе просто собираем предварительную полезную информацию. Списки классов, имена, наработки апи со списками свойств (благо еще с того года есть наброски, никогда больше нестану заниматься подобной гадостью *around the head*) и тд. Раскидываем это все по документам и готовимся скормить парсеру.

Этап первый. Приведение структуры и полей к конкретному виду с соблюдением порядка и размеров свойств (в противном случае, даже при отсутствии одного из свойств, весь класс и все его производные можно выкинуть в мусор).
0. Подготовка и создание списка глобальных констант и перечислителей.
upload_2018-9-28_0-4-56.png

1. Поскольку интерфейс постоянно меняется, то я решил, что пусть все данные будут public. Это как минимум сократит вам время на ковыряние и перекомпиляцию заголовков.
upload_2018-9-27_23-17-6.png

2. Взаимодействие классов с движком осуществляется адресацией вызовов в сам движок. Как следствие - отсутствие потерь производительности и маленький выходной вес плагина.
upload_2018-9-27_23-24-17.png

3. Так как конструктор с прямой адресацией получается крайне легким и inline'овым, то было решено привязать к каждому из них по инициализирующей функции. Благодаря этому корректно создается указатель на виртуальную таблицу, если такая предусмотрена.
upload_2018-9-27_23-29-45.png

4. Для максимального удобства и читаемости каждый тип объекта имеет свое место в классе: Макрос интерфейса; перечислители; структуры; свойства; функции; статические функции; виртуальные методы.
upload_2018-9-27_23-36-28.png

4.1 Исключением является group - синоним безымянной структуры, которая втраивается в поля класса, поскольку не имеет своего единственного экземпляра и также не может быть объявленым где-то отдельно.
upload_2018-9-27_23-40-12.png

4.2 Если существует безымянная структура/перечислитель с единственным существующем экземпляром, то такой структуре/перечислителю назначается шаблонное имя, а объект переносится в поля класса. Такое решение было принято чтобы не портить внешний вид и читаемость класса.
upload_2018-9-27_23-43-42.png

4.3 Union никогда не относится к группам или перечислителям и всегда представляет поля класса.
upload_2018-9-27_23-45-51.png

5. Поскольку для реализации статических свойств классов необходимо определять их как ссылки на объекты в движке, я решил просто вынести их в комментарий в конец класса.
upload_2018-9-27_23-49-49.png

6. Распарсил все самые главные глобальные объекты движка и определил все классДефы (где-то 170 штук). Так что можно создавать экземпляры или наследовать классы 'прямо из коробки'.
upload_2018-9-27_23-53-0.png

7. Так как при отсутствии конструктора по умолчанию объявить экземпляр структуры в другой структуре невозможно, парсер добавляет его автоматически. Такой конструктор не гарантирует безопасности, так как не умеет приводить данные к какому-либо начальному значению. Следует внимательно инициализировать данные подобных структур.
upload_2018-9-28_0-10-25.png

Этап второй. Парсинг и внедрение виртуальных методов в классы.
0. Виртуальный метод, если говорить максимально просто, никогда не вызывается явно. Это происходит примерно в таком порядке:
upload_2018-9-28_1-56-29.png
Как можно догадатсья, стоит задача построить таблицу так, чтобы наши смещения совпадали со смещениями готики, в противном случае может быть вызван вообще не тот метод => краш.

1. Первым делом был построен общий список классов и 'грубая' таблица с методами. В принципе тут все ясно, понятно, где какой метод и как из этого извлечь адрес.
upload_2018-9-28_0-36-33.png

2. Казалось бы все хорошо и красиво, но тут в дело вступают абстрактные классы и их волшебные чисто виртуальыне функции (которые не имеют реализации). Чтобы понять, что есть purecall (нет реализации => нет имени, а нам оно крайне важно),
upload_2018-9-28_0-38-29.png
необходимо создать таблицу наследования для всех наших классов. Проще всего работать с такой, заранее определенной.
upload_2018-9-28_1-24-10.png

3. На основе таблицы наследования вычисляем любой неабстрактный класс, имеющий на любом из своих уровней наследования предка с purecall'ами.
upload_2018-9-28_0-42-46.png
Извлекаем из таблицы данные конкретно от предка подставляя только имена самих методов.

4. Класс может иметь множественное наследование как в примере выше. Это тоже следуетучитывать, поскольку чтобы взять имена для purecall важно знать конкретное базовое смещение.

5. Также на выходе могут доставлять неудобства деструкторы, следует их почистить и оставить только один верный экземпляр. Иначе в класс может залезть 2-3 штуки (скалярный и [редко]векторный)
upload_2018-9-28_0-51-12.png

6. Часто классы не имеют своей реализации, по этому в таблице висит адрес родителя, в котором она есть. Такие методы бросаем в игнор, их добавлять повторно не имеет смысла.
upload_2018-9-28_0-55-32.png

7. Мелкие нюансы: Перегруженные виртуальные методы необходимо поменять местами. Порядок виртуалов потомка будет автоматически скорректирован под предка (но у нас все ок и так).

8. На выходе получаем что-то такое (слева абстрактный класс, имена пьюкалов которого были получены из правого):
upload_2018-9-28_0-59-40.png upload_2018-9-28_1-0-6.png

Этап третий. Финальное форматирование.
Документ имеет четку стркутуру и стилизацию. Файлу обязательно назначается защита включений и пространство имен. Исключаются все лишние имена (struct, class, enum ...), форматируются операторы, скобочки, проставляются отступы 'определителей'. Все данные компонуются и выходят в виде множества заголовочных файлов с интерфейсом движка.

Итого на каждый двиг имеем ~ 500 структурных типов (выбрал только те, которые в теории имеет смысл юзать, а так их 600 и больше), 10К методов, из которых 4,5К виртуальных (3,2К с учетом чистки), в общей сложности 30К строк интерфейса и полторы минуты ожидания на компоновку всего этого добра. Так что прошу строго не судить за столь долгую отсрочку, уж очень лениво тащить столько всякой мелочевки в одно хлебало :D За выходные думаю дооформлю плагин, проверю все ли на месте в самом юнионе и там уже возьмусь за инсталлер.
 
Последнее редактирование:

Fabiosek

Участник форума
Регистрация
17 Июн 2017
Сообщения
147
Благодарности
47
Баллы
190
And when it will be possible to encrypt vdf? With the release of Union?
 
Сверху Снизу