Взлом новелл, написанных на Unity
Статей о взломе Ren'Py и Kiri-Kiri написано уже немало, но когда речь заходит о Unity—приходится не одну бессонную ночь провести в поисках информации по всей Сети. И чтобы Вы не тратили на это свое время, поделюсь результатом своих скитаний. Обычно много сил и времени тратить на взлом не нужно, но бывают всяческие подводные камни, так что считаю нужным охватить как можно больше из них и в этом нам поможет настоящий кладезь всевозможных палок в колеса--"A Light in the Dark". Итак, поехали!

Распаковка\Запаковка архивов


Текст, графика и звук находятся в файлах с разрешением ASSETS, и для их извлечения нам понадобиться программа UnityEX:
- Нажимаем [Открыть архив Unity] и находим файл resources.assets.
- Из показанного списка выделяем файлы под перевод и щелкаем ПКМ->Извлечь выделенное. После таких манипуляций в директории <Название игры>/<Название игры>_Data появится папка Unity_Assets_Files со всеми извлеченными данными. Дело сделано, и теперь можно хорошенько поглумиться заняться редактированием файлов.
С запаковкой данных обратно также нет особых сложностей, главное чтобы папка Unity_Assets_Files лежала там же, где и resources.assets. Открываем в UnityEX архив и нажимаем [Запаковать все файлы]. Обычно этих манипуляций хватает чтобы увидеть в игре плоды своих стараний, но иногда все оказывается далеко не так просто…

Обход защиты

Если при попытке запаковать файлы Вы получили сообщение «Cannot open file <…> resources.assets Отказано в доступе», значит на архиве стоит защита и подправить файл не получиться даже через Hex-редактор. Иностранные разработчики всеми силами постарались уберечь свое творение от чужих рук, но малость недооценили суровость русских переводчиков. Как же обмануть защиту?
- Извлекаем ВСЕ файлы из архива.
- Перемещаем оригинальный resources.assets в какую-нибудь папку вне самой игры, а на его месте создаем текстовый документ (*.txt) и переименовуем его в resources.assets (не в resources.assets.txt).
- Запаковуем всё в бывший текстовый файл. Теперь UnityEX не ругается и процесс проходит гладко. Казалось бы все должно работать, но нет—у архива-самозванца отсутствует заголовок. Чтобы исправить эту ситуацию нужно поработать с файлом в «голом виде»:
- Открываем оригинальный и фальшивый архивы в шестнадцатичном редакторе (например HxD). Как видим, начало архива-самозванца пустует, так что заменяем нули на данные с подлинного файла.
- Запускаем игру и любуемся проделанной работой.


Перевод текста

Здесь всё просто: скрипты записаны в обычных текстовых файлах; вытащил из архива, перевел реплики, запаковал обратно. Но, бывает, все идет немного не по плану.
Например, проблема такая: в какой бы кодировке не сохранялся файл скриптов, игра принимать его не хочет (виснет, показывает черный экран, пустой текстбокс). В таком случае после всех изменений сохраняем файл в кодировке UTF-8 и в шестнадцатичном редакторе (вспоминаем HxD) удаляем так называемый заголовок--первые 6 "цифр" файла EF BB BF (они же первые три буквы п»ї).
Но это еще куда не шло. Есть проблема поинтереснее, а именно аллергия новеллы на кириллицу. Заменяем одни английские слова другими—все работает; вставляем русское слово—ловим ошибки и глюки. Тут поможет старый добрый прием из области программирования, который носит грозное название «костыль». Суть его в том, что если ошибку нельзя исправить, то под нее можно подстроиться и заставить программу выдавать нужный результат. В переводе на нашу проблему: нужно сделать так, чтобы реплики в самом скрипте были написаны латиницей, но игра отображала их кириллическую версию. Например, чтобы персонаж сказал «Привет», прописываем транслитерацией «Privet» (ну или, если владеете техникой слепой печати, «Ghbdtn»). Для такой затеи вооружаемся редактором шрифтов Font Creator и в нем:
- Открываем извлеченный из игры файл шрифта.
- Выделяем кириллическую букву ПКМ->Cliph Properties

- В появившемся окошке видим строку Codepoints. Меняем четырехзначный код каждого кириллического глифа на двухзначный латинский и нажимаем [Apply]. Например, код русской буквы А $0410 заменяем кодом английской А--$41. Если выбрали писать не транслитом, а методом слепой печати, учтите, что большие буквы Х,Э и Ъ соответствуют знакам { } », а они зарезервированы игрой как часть программного кода, так что лучше назначить на них другие знаки. Вот расклад для слепой печати:

А $46 Б $3C В $44 Г $55 Д $4C Е $54 Ж $3A З $50 И $42 Й $51
К $52 Л $4B М $56 Н $59 О $4A П $47 Р $48 С $43 Т $4E У $45
Ф $41 Х(-) $2D Ц $57 Ч $58 Ш $49 Щ $4F Ы $53 Ь $4D
Э(=) $3D Ю $3E Я $5A

а $66 б $2C в $64 г $75 д $6C е $74 ж $3B з $70 и $62 й $71
к $72 л $6B м $76 н $79 о $6A п $67 р $68 с $63 т $6E у $65
ф $61 х $5B ц $77 ч $78 ш $69 щ $6F ъ $5D ы $73 ь $6D э $27
ю $2E я $7A

. $2F , $3F ? $26


- Осталось запаковать шрифт обратно в игру.


Редактирование изображений

Здесь тоже придется извернуться. Дело в том, что все изображения хранятся в формате TEX, недоступном для привычных нам редакторов. Что же делать?

Способ №1
- В UnityEX открываем resources.assets.
- Выделяем файл изображения, затем ПКМ->Извлечь с конвертацией, и получаем текстуру в формате DDS.
- Для редактирования подойдет либо Panit.net, либо Photoshop с установленным плагином Texture Tools.
-Запаковуем новую текстуру так же, как было описано в примере с текстовыми файлами.
Учтите: если новелла написана на современной версии движка, данный способ не сработает, поскольку хитрые разработчики стали «делить» текстуры. По сему архив resources.assets содержит в себе крохотную часть изображения, остальное же хранится в resources.assets.resS. В таком случае UnityEX нам не поможет, но выход из положения есть.

Способ №2
Нам понадобиться сразу две программы: Unity Studio и Assets Bundle Extractor. (Вообще можно обойтись и без Unity Studio, но в ней есть архиудобная функция предпросмотра)
Через Unity Studio экспортируем *.tex в *.png:
- Открываем resources.assets (File->Open File).
- Выделяем изображение
- После Export->Selected Assets получаем текстуру в формате PNG.

Редактировать такой файл можно без проблем. Если есть прозрачность—не забывайте о ней при сохранении (В Photoshop за это отвечает опция «Сохранить для Web и устройств» )
После внесенных изменений переходим к импорту через Assets Bundle Extractor :
- Открываем resources.assets.
- Выделяем текстуру и нажимаем [Plugins]->Edit.
- В появившемся окошке загружаем отредактированную текстуру нажатием кнопки [Load].
- Сохраняем (File->Save). Если Assets Bundle Extractor выдает ошибку—ничего страшного. Достаточно вместо перезаписи *.assets, сохранить его отдельным файлом и перенести в папку с новеллой.

Дело сделано. Запускаем новеллу, и любуемся проделанной работой.


Редактирование строк меню

Бывает, не все пукнты меню хранятся в виде изображений. Некоторые представлены в виде скриптового текста, но вот беда--среди извлеченных TXT их не видно. А все дело в том, что прячутся они в файлах типа MonoBehaviaour, и ковырятся в них шестнадцатичным редактором невероятно сложно, а текстовым--невозможно вовсе. На выручку приходит программа UnityText 2, но о всем по порядку. Сначала нужно найти нужный файл: в нижнем левом углу UnityEX прописываем строку меню и ставим галочку на "Поиск текста", затем командуем софтине искать и она показываем нам нужный элемент (в нашем случае это resources 003-11). Извлекаем его и вот теперь уже переходим к UnityText_2.

- Чтобы открыть файл жмем маленькую кнопку csv, а тип файла меняем с *.csv на *.*
- После открытия все строки меню красуются перед нами. Можем всячески их видоизменять.
- Проделав свое темное дело, жмем Pack.
- Обновленный файл появиться в директории <Название игры>\<Название игры>_Data\Unity_Assets_Files\resources_new.
- Осталось переместить его в <Название игры>\<Название игры>_Data\Unity_Assets_Files\resources и запаковать уже привычным UnityEX.
- Готово.


Автор материала: Lisper
Материал от пользователя сайта.



Translate 03 Февраля 2019 641 Lisper хакинг, Unity, перевод, взлом, распаковка, экспорт, импорт, реверс инжиниринг 4.3/13

Комментарии (11):
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
-4
svsasha
202

03 Февраля 2019 14:08
Зачем я это прочитал ?

5
NV
59810

03 Февраля 2019 14:53
Мимокрокодил, хакать ничего не планирую, но как же доставляет читать подробные, читабельные, няшно оформленные инструкции. Всегда приятно видеть, что человеку не плевать на то, что он делает. Keep up the good work!
(Схороню, пожалуй, вдруг пригодится.)

0
KnYaZ
5229

03 Февраля 2019 23:10
А какого формата должны быть текстовые файлы? Что-то сомневаюсь, что простой txt...

-1
Lisper
87222

03 Февраля 2019 23:16
Я тоже сомневался, пока не распаковал.
Да, там обычный txt, но необычная работа с ним.
Хотя... не факт, что так во всееееех играх на Unity.
Буду рад услышать о других форматах скриптов.

0
KnYaZ
5229

04 Февраля 2019 01:08
Ну, есть в некоторых ВН текст в формате .pac

0
pumpkinofhell
39598

04 Февраля 2019 03:55
Слишком топорно и слишком сложно. Легче попросить создателя предоставить материалы, нежели менять кодировку каждой отдельной фразы по сто раз или вытаскивать миллион изображений из разных папок. Спасибо большое за инструкцию, безусловно, но требуется способ попроще - в Ренпи это делается за пару минут.

0
Lisper
87222

04 Февраля 2019 16:48
> в Ренпи это делается за пару минут
В Unity чаще всего процесс занимает те же пять минут. Я описал именно частный случай, где все пошло не так, и где стоит много защиты.

>вытаскивать миллион изображений из разных папок
Все изображения сложены в одном файле assets. Никакого брождения по папкам.

>требуется способ попроще
Вот тут согласен. Если найду чего попроще--обязательно дополню статью.

0
Flashback
2598

04 Февраля 2019 15:53
Если файлы зашиты обфускатором, что статья не имеет смысла. Шифровать можно как ресурсные файлы, так и в процессе рантайма. Лично я придерживаюсь политики DRM-free, как показала практика, это быстрее и шире реализуется.

2
bizDICK
10383

06 Февраля 2019 21:19
О, я как-то столкнулась с проблемой при переводе YOU LEFT ME (Как можно 'увидеть', что на сайте ее нет, у меня не получилось), но там всю куда сложнее оказалось, чем тут.
Сама игра идет на Unity, но ее создавали с помощью программы, которую можно установить из приложения Unity. (Т.е. зайти на сайт программ и приложений и скачать разные инструменты для него). Это все оказалось запутанно, как мой текст второго абзаца, что пора пилить кому-то туториал, как работать и с мелкими программами.

2
Lisper
87222

06 Февраля 2019 21:38
Ох, так значит не я один пытался вскрыть эту знатную вещицу и потерпел фиаско)
Ну не совсем фиаско--в шестнадцатичном редакторе можно поколдовать с текстом (файл "level 1"), но изображения как-то очень хитро запакованы.

0
bizDICK
10383

06 Февраля 2019 22:47
Да уж. Если вы не смогли вскрыть изображения, хотя являетесь знатоком различных программ, то я тем более не смогу. Жаль, очень жаль. Кто-то обязан узнать, как вскрыть ее и перевести, потому что эта игра требует внимания.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]