Многие знают о том, что без применения дополнительных средств защиты (обфускаторов) код скриптов проекта беззащитен. В этом легко убедиться, скачав reflector и открыв в нем файл Assembly – UnityScript.dll из папки Data Standalone сборки проекта. На первый взгляд, код сборки для web плеера защищен лучше: все файлы упакованы в один, формат файла неизвестен. Казалось бы, можно без опаски выкладывать web версии проектов, но в этом есть сомнения. Давайте проверим, можно ли получить код скриптов из web сборки проекта.
Создадим пустой проект с пустой сценой. Добавим в сцену GameObject со скриптом, в котором только function Update () {}. Сделаем web build и откроем его в Opera. План действий такой: нужно найти в памяти браузера распакованные скрипты, сохранить эту область памяти на диск, обработать полученный файл так, чтобы он стал похож на .net dll, открыть ее в рефлекторе.
Для начала нам понадобится инструмент, которым можно покопаться в памяти браузера. Пусть это будет OllyDbg. Запускаем отладчик, подключаемся к процессу opera.exe:
Открываем память процесса:
Ищем:
Искать будем строчку .UnityEngine.MonoBehaviour.
Внимание, в случае Streamed билда строчка встретится несколько раз. Сохраняйте все куски, позже разберетесь.
Нашли
Сохраняем найденный фрагмент(ы) в файл(ы)
На этом мы прощаемся с OllyDbg. Для последующих операций нам понадобится WinHex.
Откроем сохраненный файл и найдем нужный нам фрагмент
Теперь нам нужно найти начало dll файла, частью которого является найденный фрагмент.
Для этого будем искать строку This program cannot be run in DOS mode по направлению к началу файла.
Чуть выше этой строчки будет MZ начало файла. Нужно пометить M как начало блока.
Теперь будем искать строку This program cannot be run in DOS mode по направлению к концу файла.
Если конец файла достигнут и строка не найдена то нужно пометить его как конец блока. Если искомый фрагмент найден, то первый байт перед предстоящим ему MZ.
Теперь нужно сохранить получившийся блок в файл
Закрываем WinHex, открываем reflector, подключаем к нему необходимые библиотеки
Открываем полученный файл в рефлекторе
И видим…
.. свой код. Таким образом мы показали, что ни стандартную, ни web сборку нельзя считать защищенной от просмотра кода без применения дополнительных методов защиты.
7 комментариев на «Рефлексирование кода из web сборки»
Ваш отзыв
Вы должны войти, чтобы оставлять комментарии.
22 марта 2010 в 13:23
А теперь в таком же духе – о применении дополнительных методов защиты!
08 июля 2010 в 0:35
С защитой-то все ясно – обфускация как минимум.
Интересно, как распаковать файл sharedassets*.assets, который собирается при паблише проекта, а затем (если паблишится web-сборка) склеивается с mainData, Assembly – UnityScript.dll и т.д. (в заголовке склеенного файла лежат названия файлов. которые в нем есть и их смещения), пакуется в lzma и потом кладется в .unity3d файл по смещению 38h =)
30 июля 2010 в 8:22
теперь есть Unity 3D Obfuscator http://unity3d.netobf.com. он легко может распаковать .unity3d файлик или, если нужно, защитить код *.dll
08 Ноя 2010 в 22:00
все оказалось гораздо хуже
19 Ноя 2011 в 21:53
Кто можем помоч подобный файл открыть? Дохожу до конца, а там уже проблемы начинаются… буду ОЧЕНЬ благодраен
23 Дек 2013 в 13:23
lewisohn@dora.progandist” rel=”nofollow”>.…
спс….
23 Авг 2014 в 16:08
helmet@chow.sinless” rel=”nofollow”>.…
спасибо за инфу….