Сайт Anivisual.net закрыт

Он продолжит функционировать в виде архива. Новые материалы добавлять нельзя.

Взлом новелл, написанных на Unity

Взлом новелл, написанных на 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 (они же первые три буквы п»ї). Если Вы обычному текстовому редактору предпочитаете 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.
- Готово.
18
Декабрь
41
4.7
20940
Добавлять комментарии могут только зарегистрированные пользователи.

Комментарии к записи: 41

avatar
#1 svsasha
202
в 13:08 (03/Фев/2019)
-5
Зачем я это прочитал ?
avatar
#2 NV
59810
в 13:53 (03/Фев/2019)
5
Мимокрокодил, хакать ничего не планирую, но как же доставляет читать подробные, читабельные, няшно оформленные инструкции. Всегда приятно видеть, что человеку не плевать на то, что он делает. Keep up the good work!
(Схороню, пожалуй, вдруг пригодится.)
avatar
#3 KnYaZ
5229
в 22:10 (03/Фев/2019)
0
А какого формата должны быть текстовые файлы? Что-то сомневаюсь, что простой txt...
avatar
#4 Lisper
87222
в 22:16 (03/Фев/2019)
0
Я тоже сомневался, пока не распаковал.
Да, там обычный txt, но необычная работа с ним.
Хотя... не факт, что так во всееееех играх на Unity.
Буду рад услышать о других форматах скриптов.
avatar
#5 KnYaZ
5229
в 00:08 (04/Фев/2019)
0
Ну, есть в некоторых ВН текст в формате .pac
avatar
#6 pumpkinofhell
39598
в 02:55 (04/Фев/2019)
0
Слишком топорно и слишком сложно. Легче попросить создателя предоставить материалы, нежели менять кодировку каждой отдельной фразы по сто раз или вытаскивать миллион изображений из разных папок. Спасибо большое за инструкцию, безусловно, но требуется способ попроще - в Ренпи это делается за пару минут.
avatar
#8 Lisper
87222
в 15:48 (04/Фев/2019)
1
> в Ренпи это делается за пару минут
В Unity чаще всего процесс занимает те же пять минут. Я описал именно частный случай, где все пошло не так, и где стоит много защиты.

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

>требуется способ попроще
Вот тут согласен. Если найду чего попроще--обязательно дополню статью.
avatar
#7 Flashback
2598
в 14:53 (04/Фев/2019)
0
Если файлы зашиты обфускатором, что статья не имеет смысла. Шифровать можно как ресурсные файлы, так и в процессе рантайма. Лично я придерживаюсь политики DRM-free, как показала практика, это быстрее и шире реализуется.
avatar
#9 bizDICK
10383
в 20:19 (06/Фев/2019)
2
О, я как-то столкнулась с проблемой при переводе YOU LEFT ME (Как можно 'увидеть', что на сайте ее нет, у меня не получилось), но там всю куда сложнее оказалось, чем тут.
Сама игра идет на Unity, но ее создавали с помощью программы, которую можно установить из приложения Unity. (Т.е. зайти на сайт программ и приложений и скачать разные инструменты для него). Это все оказалось запутанно, как мой текст второго абзаца, что пора пилить кому-то туториал, как работать и с мелкими программами.
avatar
#10 Lisper
87222
в 20:38 (06/Фев/2019)
2
Ох, так значит не я один пытался вскрыть эту знатную вещицу и потерпел фиаско)
Ну не совсем фиаско--в шестнадцатичном редакторе можно поколдовать с текстом (файл "level 1"), но изображения как-то очень хитро запакованы.
avatar
#11 bizDICK
10383
в 21:47 (06/Фев/2019)
0
Да уж. Если вы не смогли вскрыть изображения, хотя являетесь знатоком различных программ, то я тем более не смогу. Жаль, очень жаль. Кто-то обязан узнать, как вскрыть ее и перевести, потому что эта игра требует внимания.
avatar
#27 Tacuco
131168
в 08:18 (04/Ноя/2019)
0
Да,  новелла занятная. Тоже пыталась перевести её.
avatar
#26 Tacuco
131168
в 08:18 (04/Ноя/2019)
0
Мне удалось найти файлы с текстом и даже перевести несколько. Но обратно запаковать не получается. В игре в этих местах просто пустой текстовой блок. smile_76
avatar
#28 Lisper
87222
в 08:26 (04/Ноя/2019)
0
Скорее всего шрифт не поддерживает кирилицу.
А вообще... Скиньте архив с игрой мне в личку. Попробую в ней покопаться и найти проблему.
avatar
#12 citycat4
158119
в 10:49 (01/Июл/2019)
1
Отличная статья, я как раз задался вопросом - чем распотрошить Guilty Summer Kisses?
avatar
#13 MatveySS
66593
в 01:37 (19/Июл/2019)
0
Спасибо за статью, пошел с новыми знаниями вскрывать FoxHime   madness
avatar
#14 BenjaminFR
105994
в 21:46 (25/Сен/2019)
0
Таки в каком формате может храниться текст?  Есть файлы .AMC, .AMGC, .CGP, .GOBJ, .MAT, .SHADER, .SPRITE,  .TEX и еще куча файлов с какими-то цифровыми расширениями (1,3, 100 и т.д)
avatar
#15 Lisper
87222
в 22:46 (25/Сен/2019)
2
С момента написания статьи прошло уже некоторое время. Накопилась информация и я собираюсь обновить статейку, подробно рассказав в том числе и о текстовых форматах. Если вкратце, то текстовка может быть в форматах TXT, MonoBehaviour или числовых (типа <Название файла>.20). Первый лучше всего править в Notepad++ с кодировкой UTF 8, второй -- через UnitiText 2, а третий -- через Hex-редактор.
avatar
#16 Хемуль
87473
в 23:20 (25/Сен/2019)
-1
Когда вы обновите статью, то могли бы вы добавить информацию про Юнити-новеллы на андроид? Совпадают ли методы взлома с приведёнными в этом списке? И можно ли как-то просто запустить их на ПК (без эмулятора)? Просто мне захотелось перевести, например, вот это https://vndb.org/v21781 , но как взломать я, к сожалению, не знаю (и если как-то просто запустить на ПК нельзя, то тогда и смысла, боюсь, нет, так как тогда перевод здесь не будет никому интересен).
avatar
#20 Lisper
87222
в 08:39 (26/Сен/2019)
1
По взлому андроид-новелл (хоть от Unity, хоть от другого движка) нужно писать отдельную статью -- там другая специфика. Да и запустить мобильную версию на ПК просто вряд ли выйдет: один чёрт придется повозиться со сторонними программами (эмуляторы, виртуальные машины, плагины для браузера).

Цитата
тогда перевод здесь не будет никому интересен


В случае с Antares  ключевое слово  "здесь". Насколько я видел, на рынке мобильных приложений она пользуется спросом. Там перевод может вызвать резонанс.
avatar
#25 Хемуль
87473
в 17:57 (26/Сен/2019)
0
Ну, как минимум, в случае с андроид-версиями РПГ-мейкера, Тиранобилдера и Ренпи всё было достаточно не сложно (в первом случае поменять название файлов, во втором - расширение музыки, а в третьем - запуститть пиратской версией движка). А о какой-либо крупной площадке с пиратскими переводами андроид-новелл мне, к сожалению, неизвестно. Ладно, в любом случае, спасибо за ответ.
avatar
#18 BenjaminFR
105994
в 08:29 (26/Сен/2019)
0
Так как чистых текстовых файлов в resources.asset не существует, может ли текст быть зашифрован в .CGP? Или же текст может храниться в другом ассете?
avatar
#22 Lisper
87222
в 09:04 (26/Сен/2019)
1
Да, текст игры может хранится и в другом ассете (sharedassets0.assets, level1 и т.д.)
Чтобы выяснить в каком именно нужно:
- открыть UnityEX;
- в левом нижнем углу ввести небольшой кусок цитаты из игры. Если, например, в текстбоксе персонаж говорит "Hi, there! My name is Paul.", то отрывка "is Paul" вполне достаточно;
- в этом же углу ставим галочку на "Поиск текста";
- Поочередно открываем в UnityEX файлы ресурсов и жмём "Найти следующий".
avatar
#19 BenjaminFR
105994
в 08:30 (26/Сен/2019)
2
А, в числовых. прошу прощения, не заметил. Ну что же, ждем обновления статьи. Спасибо за ответ. bad
avatar
#17 bizDICK
10383
в 02:29 (26/Сен/2019)
1
Прошло полгода с моих последних комментариев. Я чуть поднабралась ума (:D),
снова решила попробовать хотя бы распаковать файлы игр Angela He,
потом вообще рандомную игру,
и результат получился опять-таки печальным. Да и в статье не все дописано.
Например, не объяснено, что делать, если установив Texture Tools в Фотошопе и скачав
Unity Studio изображения все равно не открываются? Что делать, если в Notepad++ и HxD все равно непонятные символы вместо текста, а кодировка поставлена нужная?
Распаковывается то все, как нужно, за что спасибо, но остальное - как я уже описала.
avatar
#21 Lisper
87222
в 08:56 (26/Сен/2019)
2
За эти полгода я уже пять раз возвращался к YOU LEFT ME, думая: "ну вот теперь-то я знаю новую фишку, теперь-то ты у меня заговоришь по-русски". Но эта строптивая игрушка всё равно давала отпор. (Будь проклят Fungus) Хотя извлечь графику вышло вполне нормально.
Ещё пробовал совсем отчаянный вариант -- перенести все извлечённые данные на Ren'Py-шные рельсы. Даже постарался реализовать фирменный эффект параллакса, но выглядело это слишком, хм... плоско. Да, это подходящее слово. Ренпай в 3D не умеет.
Насчёт взлома других игр -- напишите в личку. Unity-игры отличаются друг от друга, и будет быстрее, если я поковыряюсь в игре на своём компе, а не буду давать длинный список всех вариантов распаковки.
avatar
#23 bizDICK
10383
в 14:10 (26/Сен/2019)
2
Эх. Почему слишком прекрасные игры так сложно перевести?  joke 
Хорошо. Сначала заведу себе список новелл на Unity, а потом напишу вам.
(Могу его потом полностью скинуть, если вас не испугает)
avatar
#24 bizDICK
10383
в 14:17 (26/Сен/2019)
1
Шучу. (Список оказался слишком мал. Найти подобные игры сложно.)
avatar
#29 Asaga_di_Ryuvia
109837
в 15:29 (25/Мар/2020)
2
Статья роскошная. Однако я сосвем не понимаю в панике от того, как можно такое использовать, что делать, если файлы юнити (assets) запакованы в .gobj.

Пойду с разработчиком разговривать ради обычных файлов (если они вообще существуют в виде таблиц или txt...).
avatar
#31 Spectralniy
269526
в 12:19 (04/Июл/2020)
1
Таж самая проблема. Пол интернета облазил, но ничего не нашёл. Я в отчаянии :(
avatar
#30 A_lone
309029
в 21:41 (29/Апр/2020)
3
Отличная инструкция, во многом помогла, спасибо.
Но у меня без нюансов не обошлось, конечно. Так, например, UnityEx в одной игре легко достаёт текстуры из архивов, в отличие от Unity Studio, которая их видит, но вытаскивать отказывается. Но при этом, тот же UnityEx наглухо виснет при попытке перепаковать массивный .assets, и для запаковки приходится использовать Assets Bundle Extractor. 
Юнити без танцев с бубном, походу, прям совсем не может...
avatar
#32 YasenPepper
353558
в 15:21 (06/Июл/2020)
0
Есть игруха, в которой русский текст зашит в resources.assets в файле Russian.xml. Расширение именно xml.
После распаковки я его редактирую, сохраняю под тем же именем (с тем же расширением xml!!!) и жмакаю в UnityEX кнопку "Запаковать все файлы". Но в игре, о чудо, почему-то остаётся старый перевод. А мой файл Russian.xml в архиве почему-то оказывается переименован в Russian.txt. Причем оригинального Russian.xml в архиве уже нет, откуда игра берёт старый перевод, я понятия не имею!
Чё делать? Как жить? (((
avatar
#33 YasenPepper
353558
в 15:54 (06/Июл/2020)
1
UPD: удалось победить переименование Russian.xml в Russian.txt при импорте в resources.assets.
В архив resources.assets успешно импортируется мой файл русификации, я его могу потом обратно распаковать, посмотреть - действительно это он!
Вот только одно НО. Игра по-прежнему отображает СТАРЫЙ перевод, как будто я ничего не изменял в resources.assets. Куда копать? Где я заблудился в трёх соснах?
avatar
#34 rouzenrot
360865
в 02:51 (21/Июл/2020)
0
Народ, может подскажет кто как быть в таком случае. У в игре есть файлы resources.assets на 1мб, и resources.assets.resS на 600. И как я понимаю, все что нужно - во втором архиве. Но как его открыть?
avatar
#35 Saiberex
39799
в 11:15 (29/Янв/2021)
0
Unity studio пишет "no children"
avatar
#36 Chryssalid
352009
в 17:08 (20/Июл/2021)
0

Цитата
- Осталось запаковать шрифт обратно в игру.
Было бы неплохо узнать, как это делается
avatar
#37 dimadomik
531804
в 05:28 (18/Авг/2021)
0
Попытался вскрыть DDLC plus, не получилось.
Прошлая часть была на renpy, ничего сложного не было, а эта, зараза, на unity.
Кто-нибудь вскрывал, или знает как вскрывать?
avatar
#38 nozomiya93
717967
в 06:22 (19/Авг/2022)
0
Извините, а для новичков, начинающих русификацию ВН никаких инструкций случайно нет?
avatar
#40 Хемуль
87473
в 02:33 (15/Ноя/2022)
0
Некропост, но новичкам проще всего переводить что-то на Ренпи. Там достаточно  Unren использовать.
avatar
#39 rsheleg
71942
в 00:35 (15/Ноя/2022)
1
Здравствуйте, где я упустил. И пожалуйста подскажите.  
- Извлекаем ВСЕ файлы из архива. 
Извлекал все (Извлечь 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
avatar
#41 Хемуль
87473
в 02:35 (15/Ноя/2022)
0
Автор статьи теперь уже вряд ли ответить. Думаю, лучше где-нибудь на форуме  ZoneofGames спрашивать про взлом. Либо у Тестера, но он знаток именно японских движков.