Как снять/отлючить обфускацию, чтобы пересобрать .dll?
Давно было желание, как и у любого игромана, создать свою игру и тут подвернулся Unity3D. Пытался сделать покатушки, но из-за учебы, работы и редких гулянок забросил игру на более чем 3 года.
Естественно, после определенного промежутка времени удалил и сам Unity и исходники, а вот удалить игру, что-то остановило... Иногда запускал и катал в свои бибики (квадратной и прямоугольной формы) =D
Вот сейчас появилось свободное время и решил малость поковыряться, может втянусь и стану супер-игроделом =D
И тут НАТЕБЕ! Как делать игру если ты сам удалил программу с исходниками (почему-то раньше, как-то не додумался до этого). А сейчас мучаюсь... есть готовые .dll, .exe и т.п.
Мучаюсь уже третий день. Исходный код с .dll получил с помощью dotpeek и вроде как все классно, исходники появились, но... пытаюсь добавить новые значения и пересобрать .dll и тут НАТЕБЕ! начинаю собирать и в коде появляются ошибки, всякие символы (типа $, \a004c и всякие другие). Погуглил и вник, что это обфускация кода и из-за нее не пересобирает .dll заново.
Как же снять/отлючить эту обфускацию, чтобы можно было пересобрать .dll ?
Можно конечно и копипастить всю .dll, все файлы и в итоге заново собрать, но так как их очень много МНЕ В ЛОМ тратить столько времени =D
Да и знания по C# у меня слабенькие, чтобы четко определять, что мне нужно и это следует копировать, а что можно пройти мимо.
Не могу быть уверенным на все 100, но вроде так нельзя. Во-первых, из-за того, что если вы даже открыли исходники скриптов на C#, то часть на C++, так просто вам не дастся. Во-вторых, как вы собираетесь менять код игры и пересобирать его? ИМХО легче начать заново, тем более скрипты у вас уже есть.
Это не обфускация, это ограничения декомпилятора, он не может восстановить названия всех переменных без дополнительной информации. Юнити бинарники никак не обфусцирует. Можете попробовать другой декомпилятор, иногда результаты получаются лучше.
В любом случае, если вы для машинок использовали физику, то ваш код трёхлетней давности скорее всего потерял актуальность, в юнити за три года много перелопатили. Вам будет проще взять машинки из стандартных юнитёвых примеров.
Получить исходный код из бинарного это реверс-инжиниринг, занимает много времени и требует большого опыта, на более-менее сложных алгоритмах всегда требует иметь дело с ассемблером а не только декомпиляторами, которые не могут выдать полностью верный код даже если использовать все декомпиляторы какие есть на свете и собирать код из лучших "кусочков" от каждого из них, все равно некоторые "кусочки" приходится сверять с ассемблером, вплоть до довольно близких "отношений" с ним, гораздо проще написать с нуля, в крайнем случае декомпилировать лишь отдельные части.
Ну для С++ вы все правильно написали, но с С# все в разы проще. Никакого ассемблера, все "дисасемблируется" обратно даже з комментариями(если они писались в сборку).
Станислав Силин: Вы ошибаетесь, попробуйте декомпилировать и скомпилировать достаточно крупное приложение и сами убедитесь, я пробовал, а уж при обфускации тем более, которая кстати очень разная бывает, тем более для .NET, для него проще писать обфускаторы, и они востребованнее.