Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых) |
eXeL@B —› Программирование —› Крайне необычный формат файлов - печальная история, прошу о помощи: пропадает долгий труд. |
Посл.ответ | Сообщение |
|
Создано: 23 февраля 2006 13:58 · Поправил: Bak · Личное сообщение · #1 Данный пост напрямую относится к теме "Взлом программ, снятие защиты", однако очень персонален и содержит описание моих долгих экспериментов. Поэтому пишу в этот подфорум. Тем более что для взлома в моем случае требуется не взлом как таковой, а написание вспомогательной утилитки. Бывают короткие посты, а этот - очень длинный. Потому что хочу максимально точно изложить свою проблему. Вкратце: для взлома защиты на одной игре требуется написать запаковщик файлов в один экзотический формат, имеется только распаковщик без исходников и примерное описание форматов. Господа! Вы - моя последняя надежда. Гибнет четверо суток напряженного труда и надежды многих геймеров. Решил сюда написать, т.к. мой вопрос напрямую имеет отношение к взлому защиты. В данном случае - на злосчастной русской лицензии всенародно любимой стратегии Armies of Exigo. Моя задача - сделать русификатор на английскую Armies of Exigo и отвязку от диска на русскую лицензию от "Нового Диска", оба вопроса упираются в одну и ту же заподлянку. Не стал писать в тему про запросы креков, т.к. игра уже фактически сломана. Остается лишь одна техническая проблема, из-за которой крек неправильно работает. Попробую изложить все по порядку. Как все начиналось (преамбула) Имелся крек на английскую Armies of Exigo версии 1.4. Крек состоял из вылеченных Exigo.exe и Editor.exe. Работать на русской лицензии отказался - вылезала ошибка fesl.dll. Господа из "Нового Диска" зашили эту библиотеку внутрь protect.dll. Решение было найдено незамедлительно: fesl.dll был взят от английской игры версии 1.4, длл-ка следовательно идеально подошла к взломанному английскому .ехе. Запустил. Удивился - игра запустилась на английском и без звука. Немного поковырялся с пираткой и выяснил, что в версии от Нового Диска отсутвтует пара важных ключей реестра - Language и Locale, хотя в пиратке они присутствовали. Добавил эти ключи. Открыл потом в редакторе взломанный Exigo.exe и принялся долго и упорно читать его, как газету. Где-то на половине чтения наткнулся на открытый текст вида english {409}, german {407}. Ба! Да игра похоже использует Microsoft XML! Стал читать .ехе дальше и нашел ключи локализации: en_US, en_UK и все в том же духе. Нашел и ru-RU. Пошел в реестр, изменил Language с 409 на 419 (русский в классификации XML), Locale с en_US на ru-RU. Запустил игру. О чудо, оно запустилось без диска - на русском и со всеми звуками. Только вместо буковок - квадратики. Первая мысль была: английский .exe накосячил с выбором кодировки. Пошел в .exe, нашел там ссылки на некие внутриигровые ресурсы типа fonts_unicode_eng.xml, fonts_unicode_eur.xml, fonts_unicode_hpc.xml. Они оказались зашитыми в игровой архив data.ork. Поменял внутри .ехе "fonts_unicode_eng.xml" на "fonts_unicode_hpc.xml" (в стандарт HPC имхо и кириллица включена), запустил игру. Длина .ехе не изменилась, все заработало. Получил те же квадратики, только уже перечеркнутые. А именно взятые из другого шрифта. Поменял внутри .ехе на "fonts_unicode_eur.xml". Снова квадратики, только опять же из другого шрифта В душу стали закрадываться смутные подозрения. XML использует кодировку Unicode для ВСЕХ языков, стало быть неправильно выбрать кодировку .ехе не мог, т.к. она одна-единственная. Вышеперечисленные .xml файлы похоже просто задают какие шрифты грузятся игрой для разных языков. И у всех этих шрифтов, похоже, отсутствует кириллица, - подумал я. Родилась идея: расковырять data.ork, найти там имя кириллической таблицы от Нового Диска и засунуть его в .ехе. Если таблица самостоятельно задает пути и спецификации шрифтов, то все должно заработать. Нашел описание формата .ork и ахнул. Файлы формата .ork представляют собой склеенные между собой цепочки файлов, упакованных по алгоритму ZIP. Все файлы зашифрованы, в качестве пароля на каждый файл использовано его имя + путь до этого файла внутри игрового архива. Например файл внутри игрового архива defaultprofile\config.con зашифрован по паролю "defaultprofile\config.con". При запуске игры она в оперативной памяти воссоздает всю виртуальную структуру папок игрового архива и лежащих в нём файлов, а внутри самого .ork они хранятся как сельди в бочке Да, забыл совсем сказать - имена файлов не хранятся в .ork, откуда их берёт .exe игры - науке неизвестно. Вместо имен в .ork лежат md5 хеши файлов. Вывод: не зная пути до файла и его имени внутри игрового архива, невозможно этот файл извлечь! На помощь пришла все та же пиратка игры. Ее битый .ехе версии 1.0, заботливо мной сохраненный в банке с рассолом, имел странное свойство вести в корневой директории игры лог всех файлов, которые .ехе достает из архива. Уж не знаю что пираты сделали с .ехе, но поиграв с полчаса в английскую версию без звука, я получил на руки лист на свыше чем 3000 имен. Включая имена и пути до шрифтов. (Кстати, любые другие .ехе остальных версий не ведут никаких логов) Осталось теперь их извлечь. Поискал в интернете. Нашел ork extractor, написанный человеком angel_death с сайта extractor.ru. Автор проги проделал точно такой же умственный путь что и я. Экстрактор работал по принципу - скармливаешь ему файл-лист, он пытается это вытянуть из архива. Ну я и скормил экстрактору свой файл-лист, созданный пираткой. Экстрактор все прекрасно распаковал. Первым делом я взялся за шрифты - открыл их все поочередно в программе font expert. Как и следовало ожидать, в регистре cyrillic у этих шрифтов стояли одни квадратики. Все стало ясно. Заглянул и в пресловутые fonts_unicode_***.xml - там действительно лежали ссылки на эти фонты. Русской таблицы я не получил, т.к. имя ее неизвестно и английский .ехе ее не вызывает, потому имя это не уходит в лог. Пробовал вслепую по аналогии копнуть в том же месте на предмет fonts_unicode_rus.xml, fonts_unicode_cyr.xml. Ничего не получил. Нет имени - нет файла Ох уж это шифрование. Игра изначально сделана с поддержкой множества языков (теоретически, если ее на эти языки переведут) Тексты и звуки хранятся на каждый язык отдельно, какую локализацию грузить - .ехе смотрит по ключам реестра, помимо того у .ехе есть свой default language, который по большому счету ничего не решает (игра грузит default language если в реестре не найдены нужные ключи, вот и все). А вот таблицы шрифтов работают хитрее. При запуске игра смотрит к какой языковой группе принадлежит запускаемый язык - eng, eur, hpc и грузит соответствующую таблицу шрифтов. А в таблице - ссылки на шрифты, ЛИШЁННЫЕ кириллицы. И игра покорно грузит русский текст, русский звук и русскую раскладку, вместо которой в шрифтах - квадраты. Предполагалось, что при переводе игры на какой-либо язык локализаторы изменят/добавят шрифты и отредактируют нужные таблицы. Изначально шрифты держат только английский, французский, немецкий, итальянский, чешский, польский и еще пару языков. Родился вопрос: а как же оригинальный .ехе запускает игру на русском? Скачал из интернета мини-образ лицензионного диска, поставил Daemon Tools 4.03, отключил сидиром. Через два часа мучительных ковыряний удалось сэмулировать новомодный StarForce 3.7.10. Глянул в игру. Ужаснулся. Шрифт вместо трех грузился только один и не слишком похожий на шрифты оригинала. Судя по всему, никакой кириллической таблицы в архиве игровом и нет, либо она лежит по неизвестному адресу в крайне убогом виде и содержит ссылку на один-единственный шрифт, лежащий по неизвестному адресу в крайне убогом виде. Не зная имен, файлов не извлечь. Русский .ехе логов не ведет. К тому же он шибко зашифрован, открытым тестом там имя таблицы не хранится... Что мне оставалось делать? На русский .ехе и русскую таблицу я решительно плюнул. Родилась идея - если английский шрифт при запуске русской версии работает исправно - латиница-то отображается верно - то может просто заменить этот шрифт на аналог, где в регистре cyrillic есть русские буквы? Кодировка-то - юникод, загрузиться должны исправно. Ведь английский .ехе исправно кушает ключи 0x419 и ru-RU и по идее грузит буковки именно из пустого регистра cyrillic. Полазал в инете. Нашел похожий шрифт ttf с полноценной кириллицей. Полез в реестр, там был ключ DATA с путем до несуществующей папки Data. "Оверрайд," - подумал я, - "Вот сейчас положу свой шрифт в оверрайд и все запашет". В следующие 2 часа я занимался поклажей разных шрифтов, измененных файлов в папку DATA с сохранением их внутренних путей, т.к. собственно вместе с путями они и были успешно извлечены; это ни к чему не привело. Игра не реагирует принципиально ни на какую информацию, лежащую за пределами data.ork. Зачем в реестре ключ DATA, я так и не понял. Далее я вспомнил, что пиратка версии 1.0 успешно патчится, а лицензия от Нового Диска уже вышла в последней версии 1.4. И в пропатченной пиратке есть файлики data1.ork и data2.ork. В версии Нового Диска их нет, видимо игра была собрана одним куском т.к. патчей уже не требовала. "Вот он, оверрайд!" - подумал я, - "Взломанный английский .ехе 1.4 наверняка тоже попытается из них брать данные, осталось только запихать в data3.ork нужный шрифт!" Ну прежде всего я решил доказать на практике, что data1.ork и data2.ork - это оверрайд. Положил их в отдельную папку, и прогнал через ork extractor. Data1.ork оказался пустышкой длиной в несколько десятков байт, которая состояла из заголовка архива и открытого текста "good luck!". Data2.ork успешно распаковалась - все ее содержимое, 475 файлов, уже засветилось в моем файл-листе. Поглядел на распакованное - действительно оверрайд, все имена, естественно, совпадают с уже имеющимися в Data.ork. |
|
Создано: 23 февраля 2006 13:59 · Поправил: Bak · Личное сообщение · #2 Так что единственный способ создать No-CD на игру от Нового Диска - запаковать шрифт с кириллицей в ork под старым именем английского шрифта. Стало быть нужен запаковщик, созданный по аналогии с распаковщиком. Я сам не программист, а написать прогу позарез надо. О чем я вас всех слёзно прошу. Автор ork экстрактора отказался чем-либо заниматься по причине "очень занят". Может быть, кто-то из вас поможет. Буду ОЧЕНЬ признателен. Нужен просто запаковщик в .ork, всю остальную канитель с .dll, .ехе и прочим я беру на себя т.к. полностью разобрался и никого не хочу утруждать вторичной ненужной работой. Со своей стороны предоставляю следующие материалы: Data1.ork - маленький файл от патча, содержит только заголовок и слова Good Luck! Его исследование и сравнение с Data2.ork помогут вычленить специфические заголовок и концовку файлов .ork Data2.ork - большой (28 Мб) файл от патча, в нем лежит 475 файлов, все имена которых известны. Filelist.log - лог использования файлов от пиратки 1.0. Прошу заметить, там только 3000 имен, которые .ехе затронул за час игры, а в оригинальном data.ork их свыше 16.000 но это, в сущности, неважно. Ork extractor.exe - ему скармливается Filelist.log, по которому прочесывается data2.ork и в результате все его содержимое выходит наружу Синтаксис: ork_extractor.exe data2.ork filelist.log из корня где все это лежит. Всё это выложено по адресу: http://www.sendspace.com/file/mwj0xt http://www.sendspace.com/file/mwj0xt Основной признак того, что созданный вами запаковщик работает исправно - тот факт, что распаковщик его распаковывает Вся надежда на вас, господа! |
|
Создано: 23 февраля 2006 14:22 · Личное сообщение · #3 |
|
Создано: 23 февраля 2006 14:26 · Личное сообщение · #4 |
|
Создано: 23 февраля 2006 14:32 · Личное сообщение · #5 Все это можно было написать 2-4 предложениями. 1. Есть игра использующая формат .ork 2. Для этотго формата есть extractor. 3. Необходимо написать обратный упаковщик в этот формат. 4. Твои контакты + сколько платишь (там качать только 30mb ). А свои размышления и действия можно было не писать, это только отталкивает от твоего топика. |
|
Создано: 23 февраля 2006 14:42 · Личное сообщение · #6 |
|
Создано: 23 февраля 2006 19:40 · Личное сообщение · #7 |
|
Создано: 25 марта 2006 20:09 · Личное сообщение · #8 |
|
Создано: 26 марта 2006 19:17 · Личное сообщение · #9 |
|
Создано: 26 марта 2006 21:39 · Личное сообщение · #10 |
|
Создано: 22 мая 2006 06:38 · Личное сообщение · #11 Перечитывал несколько раз... плохо понял. Я понял так: 1. Есть русская лицензия. Она вам нравится, но нет no-cd. А вы хотите no-cd. 2. Есть английская пиратка. Вы хотите русскую. Ставите exe от английской в русскую и ничего не работает. Т.е. нужен no-cd для русской версии, так? ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 22 мая 2006 09:52 · Личное сообщение · #12 |
|
Создано: 22 мая 2006 13:53 · Личное сообщение · #13 |
|
Создано: 22 мая 2006 14:59 · Личное сообщение · #14 Bak пишет: Заглянул и в пресловутые fonts_unicode_***.xml - там действительно лежали ссылки на эти фонты. Русской таблицы я не получил, т.к. имя ее неизвестно и английский .ехе ее не вызывает, потому имя это не уходит в лог. Пробовал вслепую по аналогии копнуть в том же месте на предмет fonts_unicode_rus.xml, fonts_unicode_cyr.xml. Ничего не получил. Нет имени - нет файла Ох уж это шифрование. поподбирай еще. может умельцы с нового диска запихнули русский в fonts_unicode_ger.xml и т.д.. |
eXeL@B —› Программирование —› Крайне необычный формат файлов - печальная история, прошу о помощи: пропадает долгий труд. |