Статей о взломе 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 (они же первые три буквы
п»ї). Если Вы обычному текстовому редактору предпочитаете
Notepad++, просто ставим галочку на
Кодировка->UTF-8 (
не UTF-8 c COM)
Но это еще куда не шло. Есть проблема поинтереснее, а именно
аллергия новеллы на кириллицу. Заменяем одни английские слова другими—все работает; вставляем русское слово—ловим ошибки и глюки. Тут поможет старый добрый прием из области программирования, который носит грозное название «костыль». Суть его в том, что если ошибку нельзя исправить, то под нее можно подстроиться и заставить программу выдавать нужный результат. В переводе на нашу проблему: нужно сделать так, чтобы реплики в самом скрипте были написаны латиницей, но игра отображала их кириллическую версию. Например, чтобы персонаж сказал «Привет», прописываем транслитерацией «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.
- Готово.
Комментарии к записи: 41
(Схороню, пожалуй, вдруг пригодится.)
Да, там обычный txt, но необычная работа с ним.
Хотя... не факт, что так во всееееех играх на Unity.
Буду рад услышать о других форматах скриптов.
В Unity чаще всего процесс занимает те же пять минут. Я описал именно частный случай, где все пошло не так, и где стоит много защиты.
>вытаскивать миллион изображений из разных папок
Все изображения сложены в одном файле assets. Никакого брождения по папкам.
>требуется способ попроще
Вот тут согласен. Если найду чего попроще--обязательно дополню статью.
Сама игра идет на Unity, но ее создавали с помощью программы, которую можно установить из приложения Unity. (Т.е. зайти на сайт программ и приложений и скачать разные инструменты для него). Это все оказалось запутанно, как мой текст второго абзаца, что пора пилить кому-то туториал, как работать и с мелкими программами.
Ну не совсем фиаско--в шестнадцатичном редакторе можно поколдовать с текстом (файл "level 1"), но изображения как-то очень хитро запакованы.
А вообще... Скиньте архив с игрой мне в личку. Попробую в ней покопаться и найти проблему.
В случае с Antares ключевое слово "здесь". Насколько я видел, на рынке мобильных приложений она пользуется спросом. Там перевод может вызвать резонанс.
Чтобы выяснить в каком именно нужно:
- открыть UnityEX;
- в левом нижнем углу ввести небольшой кусок цитаты из игры. Если, например, в текстбоксе персонаж говорит "Hi, there! My name is Paul.", то отрывка "is Paul" вполне достаточно;
- в этом же углу ставим галочку на "Поиск текста";
- Поочередно открываем в UnityEX файлы ресурсов и жмём "Найти следующий".
снова решила попробовать хотя бы распаковать файлы игр Angela He,
потом вообще рандомную игру,
и результат получился опять-таки печальным. Да и в статье не все дописано.
Например, не объяснено, что делать, если установив Texture Tools в Фотошопе и скачав
Unity Studio изображения все равно не открываются? Что делать, если в Notepad++ и HxD все равно непонятные символы вместо текста, а кодировка поставлена нужная?
Распаковывается то все, как нужно, за что спасибо, но остальное - как я уже описала.
Ещё пробовал совсем отчаянный вариант -- перенести все извлечённые данные на Ren'Py-шные рельсы. Даже постарался реализовать фирменный эффект параллакса, но выглядело это слишком, хм... плоско. Да, это подходящее слово. Ренпай в 3D не умеет.
Насчёт взлома других игр -- напишите в личку. Unity-игры отличаются друг от друга, и будет быстрее, если я поковыряюсь в игре на своём компе, а не буду давать длинный список всех вариантов распаковки.
Хорошо. Сначала заведу себе список новелл на Unity, а потом напишу вам.
(Могу его потом полностью скинуть, если вас не испугает)
в панике от того, как можно такое использовать, что делать, если файлы юнити (assets) запакованы в .gobj.Пойду с разработчиком разговривать ради обычных файлов
(если они вообще существуют в виде таблиц или txt...).Но у меня без нюансов не обошлось, конечно. Так, например, UnityEx в одной игре легко достаёт текстуры из архивов, в отличие от Unity Studio, которая их видит, но вытаскивать отказывается. Но при этом, тот же UnityEx наглухо виснет при попытке перепаковать массивный .assets, и для запаковки приходится использовать Assets Bundle Extractor.
Юнити без танцев с бубном, походу, прям совсем не может...
После распаковки я его редактирую, сохраняю под тем же именем (с тем же расширением xml!!!) и жмакаю в UnityEX кнопку "Запаковать все файлы". Но в игре, о чудо, почему-то остаётся старый перевод. А мой файл Russian.xml в архиве почему-то оказывается переименован в Russian.txt. Причем оригинального Russian.xml в архиве уже нет, откуда игра берёт старый перевод, я понятия не имею!
Чё делать? Как жить? (((
В архив resources.assets успешно импортируется мой файл русификации, я его могу потом обратно распаковать, посмотреть - действительно это он!
Вот только одно НО. Игра по-прежнему отображает СТАРЫЙ перевод, как будто я ничего не изменял в resources.assets. Куда копать? Где я заблудился в трёх соснах?
Прошлая часть была на renpy, ничего сложного не было, а эта, зараза, на unity.
Кто-нибудь вскрывал, или знает как вскрывать?
- Извлекаем ВСЕ файлы из архива.
Извлекал все (Извлечь Raw) Всего файлов: 5353
https://disk.yandex.com/i/IIU-TeZjgwn-GA
- Перемещаем оригинальный resources.assets в какую-нибудь папку вне самой игры, а на его месте создаем текстовый документ (*.txt) и переименовуем его в resources.assets (не в resources.assets.txt).
https://disk.yandex.com/i/KdfvPS-tZ0NDYw
https://disk.yandex.com/i/2EkAlJZj1zeT6A
Переместил оригинальный файл на этом каталоге, и создал текстовый документ и переименовал "resources.assets"
- Запаковуем всё в бывший текстовый файл.
Открыл Unity EX и открыл архив (который создал текстовый документ) и попытаюсь запаковать файлы, но не найдено файлы.
https://disk.yandex.com/i/mE4jB9ranZoSlw