Сейчас на форуме: -Sanchez- (+6 невидимых)

 eXeL@B —› Основной форум —› Взлом Unity3D игр
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 24 января 2015 17:39 · Поправил: 4kusNick
· Личное сообщение · #1

Дружественные темы: Взлом .net, Java. Взлом и реверсинг, Взлом Android приложений, Flash (swf) распаковка, декомпиляция, правка байткода.

Распаковщики / упаковщики, редакторы ассетов
disunity - этакий комбайн по распаковке \ упаковке webplayer билдов и asset bundle'ов. Позволяет вытащить графику, шейдеры, код, и запихать все это обратно после модификации.
UnityAssetsExplorer - инструмент от русскоговорящего автора для редактирования .assets файлов - можно вытаскивать ресурсы, заменять и класть обратно. Ссылка на бинарь обновляемая (там всегда последняя версия). Есть ещё ветки на форумах тут и тут.
Плагин для TC - хорошая альтернатива UnityAssetsExplorer'у, тоже от русскоговорящего автора.
Link - анпакер Unity билдов (WebPlayer, мобильные билды), на основе QuickBMS, не помню где его нашёл к сожалению, выложил ту версию что была у меня, возможно есть посвежее. Вытаскивает код и ресурсы. Обратно упаковывать не умеет.
Unity Studio - приложение для извлечения ресурсов (звуки, шрифты, текстуры, шейдеры и т.д.) из сборок Unity.
Grim's Unity Asset Editor - аналог Unity Studio - редактор, импортер / экспортер ассетов
Скрипт для автоматического импорта моделек в 3dsMax - вытаскивает из билдов модельки и закидывает в макс.
SB3Utility - моддинг-тулза для редактирования ресурсов.
Unity Assets Bundle Extractor - ещё одна моддинг утилита, позволяет импортировать и экспортировать содержимое asset bundles и файлов .assets.
QuickBMS и скрипты для Unity - ищем на страничке линк на саму QuickBMS и на скрипты для Unity. Скрипты позволяют распаковывать юнити билды, так же их можно доработать для обратной упаковки. Ещё есть UI для QuickBMS.
UnityEX - очередной распаковщик с GUI и консолью.
Unity Assets Viewer - вьювер и редактор .assets файлов, сам написан на Unity3D.

Инжект
UnityHook - простой инжектор managed сборок с MonoBehaviour, заточен под определённую игру, может не работать на релизных сборках.
mono-assembly-injector - более серьёзный инжектор в mono-процессы, в т.ч. и в Unity приложения. Очень прост в эксплуатации, есть пример использования. Коммент от vovanre: чтобы переделать прокачанный инжектор под WebUnity достаточно зареплейсить L"mono.dll" на L"mono-1-vc.dll"
Инжект своей сборки Assembly-CSharp. Коммент от vovanre: метод перехватом во время загрузки.

Описание формата web сборок
4.1.5f
4.3.3f1

По поводу кода
Код в Unity компилируется либо в managed mono сборки, которые имеют в своей основе IL байткод, совместимый с .NET, (отличается только апи), либо в нативный для целевой платформы код. Для работы с managed кодом используем инструменты из смежной темы про .NET, для работы с IL2CPP билдами используем инструментарий, подходящий для нативного кода соответствующей платформы.

Дотянуться до managed кода можно либо распаковав билд, либо сдампив managed сборки стандартными средствами (см. в теме про .NET).

Почитать
Цикл статей по IL2CPP от одного из разработчиков. Содержит полезную информацию, которая может пригодиться при ковырянии Il2CPP билдов.

Если кто-то пользуется ещё какими-то инструментами - пишите, добавлю в шапку.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: Gideon Vi, TryAga1n, Mime, LinXP

Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 06 марта 2015 14:15
· Личное сообщение · #2

Вы хотите сказать, что та тонна откровенно неприятного кода, что лежит в исполняемом файле - это вообще все что есть? Да, тогда мне действительно повезло)

Добавлено:
Да кому на фиг нужны патчи, интересна математика и алгоритмы)



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 06 марта 2015 14:54 · Поправил: JohnyDoe
· Личное сообщение · #3

int

Я хотел сказать, что если в файле -rwxr-xr-x 1 mobile mobile 1108480 Jan 23 05:09 Assembly-CSharp.dll* код не вычищен, то в принципе лазить в основной исполняемый файл вообще нет смысла. Весь функционал находится именно в этой dll. Исключение составляют случаи с методами типа extern. Обычно размер этой dll в 1 мегабайт говорит о том, что код там есть.

Правда был у меня случай, когда dll была больше мега, но кода там не было. Я не стал разбираться почему она такая большая, при отсутствии кода. Кстати, интересно почему. Я предположил, что вместо вычищения кода, каким-то образом ссылки на оригинальное тело функций были замещены ложными. Вот только я в структуре .Net-библиотек ничего не понимаю. Потому и не могу ничего по этому поводу сказать. С другой стороны, выяснилось, что размер этой же библиотеки под андроид был в 2 раза больше. Поэтому я посчитал, что ошибался по поводу замещения оригинальных функций ложными.

P.S> про патч я не подумал. Если тебе надо патчить, то действительно о везении речь не идет.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 06 марта 2015 15:09
· Личное сообщение · #4

int
Если тебе нужно реверсить, то ползай по тем двум dll, но если надо патчить - то надо патчить в нативном коде =(

Добавлено спустя 1 минуту
JohnyDoe
Да, скорее всего оригинальный байткод оставили, просто заинжектили ret в начало каждого метода либо перебили ссылки на methodbody. Вычищать байткод сложнее чем просто его "отсоединить".

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 89.1 (постоянный), 134thx
Активность: 0.060.07
Статус: Участник

Создано: 12 марта 2015 19:02 · Поправил: LinXP
· Личное сообщение · #5

а никто не изучал структуру файлов level1, level2 .. ? это вроде файл сцены и частенько нужный текст (для локализаций) находится там, и хотелось бы его менять с изменением размера...
пример: http://rghost.ru/6XP9wrnvn



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 12 марта 2015 22:36
· Личное сообщение · #6

LinXP

Это тот же assets, только без расширения. Плагин для total commander'а легко извлекает/заменяет файлы.



Ранг: 89.1 (постоянный), 134thx
Активность: 0.060.07
Статус: Участник

Создано: 13 марта 2015 23:15
· Личное сообщение · #7

JohnyDoe, да падает игруха после изменения, поэтому хотелось бы структуру глянуть...



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 13 марта 2015 23:59 · Поправил: JohnyDoe
· Личное сообщение · #8

Если сравнить asset файл и файл levelxx, особой разницы незаметно.

И я как увидел извлеченный файл, сразу обратил внимание на то, что строки являются частью какой-то структуры. Disunity определяет структуру как TextMesh.

Если приглядеться в hex-редакторе, то можно заметить такую вещь.






Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 14 марта 2015 00:13
· Личное сообщение · #9

JohnyDoe пишет:
Disunity определяет структуру как TextMesh

Он и есть скорее всего. Его используют для вывода текста в 3d.
Вот описание полей: http://docs.unity3d.com/Manual/class-TextMesh.html
Там же можно типы полей подсмотреть.

Вот скрипт реф на всякий: http://docs.unity3d.com/ScriptReference/TextMesh.html
В конце концов текст можно и из кода поменять без особых проблем. Возможно будет проще, чем сцену насиловать (коими являются файлы level*).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 92.1 (постоянный), 83thx
Активность: 0.110
Статус: Участник

Создано: 14 марта 2015 08:45
· Личное сообщение · #10

Может кто знает как заныкать мой скрипт от FindObjectsOfType ?

Все эвенты загрузки dll я похукал. GetAssemblies всегда возвращает пустой список. Но если добавить любой класс наследник MonoBehavior игрулина палит =\
Единственное что в голову приходит, что игрушка сканит через FindObjectsOfType и вытаскивает из какой dllки.

// Как можно рисовать гуи без monobehavior?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 14 марта 2015 12:58
· Личное сообщение · #11

vovanre пишет:
Единственное что в голову приходит, что игрушка сканит через FindObjectsOfType и вытаскивает из какой dllки.

Так гляньте в коде как именно она детектит.
Потом можно и патчить в памяти то что не нравится, чтобы проверки поотключать.

Добавлено спустя 1 минуту
vovanre пишет:
// Как можно рисовать гуи без monobehavior?

Хороший вопрос, возможно что никак, ибо иначе ничего в сцену не прицепишь.
Ещё можно патчить какой-нибудь существующий MonoBehaviour добавляя в него OnGUI (если через него гуй рисуете).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 14 марта 2015 14:15
· Личное сообщение · #12

4kusNick Точно такие же мысли возникли.

А как еще GUI рисовать, кроме как через onGUI? Я пробовал одну консольку рипануть. Так она рисуется криво. В смысле в непонятных плоскостях и с непонятным масштабом. Подозреваю, что она привязана как-то к камере. Потом нашел консоль с onGUI. Ее и использую. Легко встраивается в любое приложение путем добавления через ildasm/ilasm. Хочется только шрифта моноширинного, типа courier new.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 14 марта 2015 17:09
· Личное сообщение · #13

В Unity 4.6 появился новый UI он через Canvas работает, там все в редакторе собирается уже, а не кодом. То есть те же кнопки, списки и т.д. можно выводить, но уже другим способом.

А так ещё через GUIText можно текст выводить и через GUITexture графику, но ам уже намного сложнее что-то серьёзное собрать.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 92.1 (постоянный), 83thx
Активность: 0.110
Статус: Участник

Создано: 14 марта 2015 18:34
· Личное сообщение · #14

4kusNick пишет:
Так гляньте в коде как именно она детектит.

Вот этот момент для меня веселее всего. Вылизал от начала до конца dll'ку. Никаких левых вызовов FindObject*
Даже не подписывается на AssemblyLoadEvent (который я на всякий случай убил). Детектиn секунды через две после
Code:
  1.    obj.AddComponent<KWW>();
  2.    UnityEngine.Object.DontDestroyOnLoad(obj);


И я не понимаю -_-




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 14 марта 2015 18:43
· Личное сообщение · #15

Так скиньте нам с JohnyDoe посмотреть, может найдём чего.
Ещё как вариант - оно может в нативе детектить, если речь не про WebPlayer.

vovanre пишет:
obj.AddComponent<KWW>();
UnityEngine.Object.DontDestroyOnLoad(obj);

Тут просто добавляют компонент KWW (с одноимённым классом KWW) на GameObject по ссылке obj.
И затем сообщают движку о том, что этот GameObject нельзя уничтожать при смене сцены, то есть он будет "жить" в игре пока его не прибьют вручную (обычно все игровые объекты уничтожаются при смене сцены).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 92.1 (постоянный), 83thx
Активность: 0.110
Статус: Участник

Создано: 14 марта 2015 18:46 · Поправил: vovanre
· Личное сообщение · #16

4kusNick пишет:
Тут просто добавляют компонент KWW (с одноимённым классом KWW) на GameObject по ссылке obj.

Немного коряво составил предложение. Этой мой код который я внедряю. Сейчас залью и по лс отошлю.

Добавлено спустя 8 минут
4kusNick пишет:
Ещё как вариант - оно может в нативе детектить, если речь не про WebPlayer.

Как раз я говорю о WebPlayer.

Добавлено спустя 43 минуты
Забыл отписать. Отослал файлы в лс.



Ранг: 89.1 (постоянный), 134thx
Активность: 0.060.07
Статус: Участник

Создано: 14 марта 2015 20:03
· Личное сообщение · #17

JohnyDoe пишет:
то можно заметить такую вещь.

да, длину строки я учитывал и менял
4kusNick пишет:
В конце концов текст можно и из кода поменять без особых проблем.

а вот это если можно по подробнее, или простенький пример




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 14 марта 2015 22:35 · Поправил: 4kusNick
· Личное сообщение · #18

LinXP
Поменять текст довольно просто, у текст меша есть публичное свойство "text". Главное - знать как дотянуться до самого текстмеша.
Это тоже довольно просто, нужно лишь узнать в какой он сцене находится и посмотреть какие ещё скрипты в этой сцене работают. Если повезет, его текст и так будет устанавливаться через код. Тогда достаточно подправить сам код.
Если нет, тогда уже по выбору - либо дописать в любой имеющийся в сцене компонент в Start \ Awake смену текста, либо запилить свой компонент с самодобавлением на первый попавшийся геймобжект из статического конструктора например. Добавились, поменяли текст, уничтожились.

Пример:
Code:
  1. void Awake()
  2. {
  3.     GameObject.Find("TextMeshObjectName").GetComponent<TextMesh>().text = "блабла";
  4. }


vovanre
Спасибо, погляжу файлы в скором времени, пока не удаётся - отвлекают.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 15 марта 2015 00:13 · Поправил: JohnyDoe
· Личное сообщение · #19

LinXP

Не знаю почему у тебя не вышло. Я сейчас под виндой собрал простейший проект. Заменил в нем текст и у меня все запустилось с измененным текстом.

Может ты кирилический текст неправильно вставляешь? Он в юникоде должен быть.

Еще возможно внутри архива присутствует выравнивание байтов. Unity очень любит все выравнивать. Это тоже надо учитывать.

4kusNick

Вряд ли такое возможно сделать. Там у объектов и имен нет. Обычно загрузка уровней происходит через стандартный скрипт. Если сцен много, то придется еще и проверять существует ли вообще такой объект. Иначе NullReference error вылезет. Я не говорю, что это нереально, но это костыль будет. Я потому куб и не стал программно изменять.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 15 марта 2015 12:16
· Личное сообщение · #20

JohnyDoe
У всех объектов в сцене есть имена, если объект генерируется без имени, то присваивается GameObject 1, GameObject 2 и т.д.

Загрузка уровней происходит из кода, да, потому я и говорю, надо просто выяснить в какой сцене нужный текстмеш и в этой сцене уже пытаться к нему обращаться. Может это звучит сложновато, но на деле все крайне просто, мне было бы проще код допистаь, чем с бинарниками сцен работать. Но тут уже кому как больше нравится, хорошо, что есть несколько вариантов решения одной задачи =)

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 15 марта 2015 14:24 · Поправил: JohnyDoe
· Личное сообщение · #21

По поводу имени ты прав. Только имена могут дублироваться. Попробовал добавить 3D text'ы. В итоге получил 3 объекта с именами New Text. Как с ними в коде разбираться не ясно. Обычно такой проблемы не должно возникать. Игры, поддерживающие несколько языков, хранят тексты в каких-нибудь текстовиках. Но если разработчик не задал нормальное имя каждому объекту, то возникнут проблемы.

И все-таки через код пытаться что-то изменить это костыль. Изменить текст в сцене много проще. Достаточно удлиннить строку, записать правильный размер, без учета выравнивания, выравнять байты.

Иллюстрация с двумя объектами TextMesh с длиной текста 4 и 5 байт.



| Сообщение посчитали полезным: 4kusNick, LinXP


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 15 марта 2015 15:24
· Личное сообщение · #22

JohnyDoe пишет:
Только имена могут дублироваться. Попробовал добавить 3D text'ы. В итоге получил 3 объекта с именами New Text. Как с ними в коде разбираться не ясно. Обычно такой проблемы не должно возникать. Игры, поддерживающие несколько языков, хранят тексты в каких-нибудь текстовиках. Но если разработчик не задал нормальное имя каждому объекту, то возникнут проблемы.


Да, все так, в таком случае проблему всё ещё можно режить кодом, но уже надо дописывать условия, искать тот текстмеш, в котором находится искомый текст (indexOf("oldText")).

Но если для правки текста в сцене достаточно сделать то что ты на скрине привёл, то с кодом возиться действительно смысла вообще нет.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 89.1 (постоянный), 134thx
Активность: 0.060.07
Статус: Участник

Создано: 15 марта 2015 22:00 · Поправил: LinXP
· Личное сообщение · #23

JohnyDoe спасибо, вот про выравнивание я опять забыл...




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 06 мая 2015 17:54
· Личное сообщение · #24

Возможно пригодится кому-то при ковырянии IL2CPP билдов
http://blogs.unity3d.com/2015/05/06/an-introduction-to-ilcpp-internals/

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: OlegT4

Ранг: 1.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 мая 2015 23:49
· Личное сообщение · #25

4kusNickСсылка битая на файл, Инжект своей сборки Assembly-CSharp.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 15 мая 2015 03:37
· Личное сообщение · #26

OlegT4
Надо @vovanre потыкать, у меня не осталось =(
Если сумеете достать - я буду рад вылить на мегу, чтобы ссылка не помирала.

?обавлено спуст¤ 2 минуты
След. статья из цикла "устройство IL2CPP", там про то как выглядит пользовательский код после генерации в c++.
--> Link <--
Тоже может пригодиться при реверсе.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 31 июля 2015 21:20
· Личное сообщение · #27

Какая-то очередная утилита. Имеется плагин для unity3d.

Повертел чуток. Так и не понял для чего может пригодиться. Unity3d файлы открывать отказалась. Assets'ы открыла от 4 версии. Что умеет так и не понял. Но раз связана с unity, подумал ссылку стоит подобрать. Может в будущем что-то из этого выйдет интересного.

http://www.hongfire.com/forum/showthread.php/112039-SB3Utility-Releases-and-Discussion/page61?p=3352965#post3352965

| Сообщение посчитали полезным: 4kusNick


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 31 июля 2015 22:47 · Поправил: 4kusNick
· Личное сообщение · #28

JohnyDoe
Хехе, это моддинг-тулза для хентай-игр от Illusion, которые ранее были на другом движке, а теперь встречаются и на юнити, судя по форуму на котором это размещено. Но думаю тулза может пригодиться и не только любителям хентая, там много интересных вещей разобрано.

К сожалению, оригинальную утилиту забросили 3 года назад (репа на гитхабе заброшена), а вот форк активно обновляется (последний апдейт 8 дн. назад):
https://github.com/enimaroah/SB3Utility

Автор бинари не распространяет, так что кому интересно - пробуйте компилировать, там vs проект.

JohnyDoe пишет:
1.0.16 вроде как последняя версия бинарей и они доступны по ссылке

Ну, братец, виноват: слона-то я и не приметил)

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 01 августа 2015 00:32 · Поправил: JohnyDoe
· Личное сообщение · #29

4kusNick

1.0.16 вроде как последняя версия бинарей и они доступны по ссылке. Есть альфа вроде 1.0.17. Попробовал читерским способом собрать в 2010 студии. Проект сделан под 2012. Только один из плагинов собрался, но он идентичен оказался с тем, что был собран автором. Для сборки разные фреймворки требуются.



Ранг: 89.1 (постоянный), 134thx
Активность: 0.060.07
Статус: Участник

Создано: 04 августа 2015 04:23 · Поправил: LinXP
· Личное сообщение · #30

Unity Assets Bundle Extractor (UABE) - is a stylish tool that allows editing assets bundles and .assets. It can export .assets files from bundles and import them back so you can edit these.
Скачать UABE v1.6b: x32, x64
Инфо: https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor

| Сообщение посчитали полезным: 4kusNick


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 04 августа 2015 13:05
· Личное сообщение · #31

LinXP
Спасибо, добавил в шапку.

------

Ещё статьи по IL2CPP (все это может пригодиться при реверсе):

IL2CPP INTERNALS – DEBUGGING TIPS FOR GENERATED CODE
IL2CPP INTERNALS: METHOD CALLS
IL2CPP INTERNALS: GENERIC SHARING IMPLEMENTATION
IL2CPP INTERNALS: P/INVOKE WRAPPERS
IL2CPP INTERNALS – GARBAGE COLLECTOR INTEGRATION

Кстати, билды IL2CPP уже не содержат mono сборок по очевидным причинам, так что с полным приходом IL2CPP настанет конец инжекту managed либ, патчингу IL и прочим приятным вещам.

На iOS и Web он уже есть, на очереди дроид и консоли (сентябрь), затем Windows Store (декабрь) и далее другие платформы (про PC пока анонсов не было, но там он тоже будет).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: JohnyDoe
<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Основной форум —› Взлом Unity3D игр
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати