Сколько прогеров сделали проекты на основе игр, в которые они играли? Я много думал.
Вам могут говорить, что игра так себе, что не нужно тратить время на бессмысленный проект, она все равно никому не будет полезна, но для вас это не имеет значения, потому что это было круто, и хоть как-то хочется повторить эти эмоции.
В свое время я много играл в «Сказки о пиратах» (далее ТОП) от Moli, а точнее в ее русскую локализацию от Nival — «Пиратство».
На мой взгляд отличная игра.
Да, не ВАУ, но я тоже ничего об этом не знал.
Прошло много лет, Пиратов закрыли, я вырос, но в океане воспоминаний до сих пор плывет забытый покоритель морей на корабле 54 уровня.
После того, как я узнал, что русский сервер закрылся, а я на тот момент не играл уже пару лет, азарт снова проснулся.
Через пару месяцев я немного разобрался в мире фан-серверов, попробовал настроить свой локально и начал разбираться в файловой структуре.
И тут началось.
Сначала я решил научиться работать с моделями.
За пару часов я нашел на Pastebin некоторый код, который после подачи мог открывать модели, хоть и с проблемами.
Но помимо моделей в игре были зашифрованные текстуры.
К счастью, существовала одна программа — Gemini Decompiler, которая могла конвертировать игровые текстуры в нормальные и общепринятые изображения.
Еще повезло, что эта программа была написана на .
Net. После декомпилятора оказалось, что нормальная текстура разделена на 3 блока - первые 44 байта, последние 44 байта и остальное - в зашифрованной текстуре сначала последние 44 байта, потом основная часть, потом первая 44 байта и еще 4 байта по неизвестным причинам.
На основе кода Pastebin и конвертера текстур нам удалось создать просмотрщик моделей.
Ужасно конечно, но все же.
Но он читал только самые простые модели, типа мечей\посохов\кинжалов, персонажей и декоративных элементов без анимации.
А мне хотелось движения.
И я начал искать дизассемблеры, чтобы разобрать по частям ТОПовую библиотеку движка.
Я нашел пиратскую IDA Pro. И начал ломаться.
В целом удобная программа, особенно тем, что она умеет адекватно разыменовывать имена после обработки компилятором и переводит результат дизассемблирования в псевдокод, чрезвычайно похожий на C. В статье про Цезарь 3 об этом вспомнил .
Я работал с переменным успехом около двух месяцев.
Ну я работал и играл.
Нашёл код с математическими операциями, начал вставлять структуры из просмотрщика моделей в базу данных IDA, потом обнаружил, что можно импортировать .
pdb (а он там, видимо для обратной связи, если есть ошибки), правила кода и структуры, которые выдавал конструктор псевдокода.
Но было такое ощущение, что все было не так.
У меня есть .
pdb, и, насколько я знал, там была информация о проекте.
Я нашел кучу разных программ, но все они давали лишь общую информацию.
Затем я начал рассматривать доступ к интерфейсу отладки (далее DIA), если он также поставляется с экспресс-версией Visual Studio. Короче говоря, теперь я пишу в редакции Professional. Скомпилировав пример Dia2dump, я был потрясен.
У меня под рукой была куча секретной информации.
Чуть больше 30 мегабайт текста.
Например, есть список всех .
obj-файлов, которые подаются компоновщику, кроме того, для каждого .
obj-файла есть список источников, которые туда включены.
В общем, за один день был готов код создания файлов из проекта ТОР-движка.
А дальше будет создание структур и подключение incuds через .
pdb. Такие вот дела.
Для начала дополнительный код для Dia2dump. Код для подсчета количества .
obj в проекте, вывода файлов в каждом .
obj и создания папок и файлов проекта с помощью .
pdb. Открыть результат работы кодировщика
Теги: #фанат кодирования #обратная инженерия #пиратство #nival #кодирование #Dia #top #ida #pdb #история любителя #Ненормальное программирование #C++int total=0; bool AQLCreateDirectory(WCHAR * sPathTo) { while(CreateDirectory(sPathTo, NULL) == FALSE) { WCHAR sTemp[MAX_PATH]; int k = wcslen(sPathTo); wcscpy(sTemp, sPathTo); while(CreateDirectory(sTemp, NULL) != TRUE) { while(sTemp[--k] != L'\\')
-
Эйер, Альфред Жюль
19 Oct, 24 -
Маркус, Рудольф
19 Oct, 24 -
Передача «Скрытого» Радиосигнала
19 Oct, 24 -
Секретные Ip-Адреса Немецкой Разведки
19 Oct, 24 -
Синергия Для Родителей И Учителей!
19 Oct, 24 -
Играю Как Взрослый
19 Oct, 24 -
Ретро-Монитор
19 Oct, 24