Обфускация связана только с искажением имен непубличных переменных / членов? Если да, то нельзя ли было бы написать приложение, которое хотя бы изменило эти имена на более удобочитаемые, такие как «переменная1» и т. Д., А затем извлекло бы весь код, который еще можно скомпилировать?
Как отменить обфускацию в .NET?
Ответы (5)
Нет, речь идет о гораздо большем, особенно с более сложными обфускаторами. Они могут создавать IL, который невозможно выразить на большинстве языков, и где логический поток ужасно запутан, чтобы сбить с толку лучшие инструменты. Вы можете сделать это много времени (вероятно, много вручную), и определенно идет гонка вооружений между обфускаторами и деобфускаторами, но вы сильно недооцениваете технологию здесь.
Также обратите внимание, что многие обфускаторы смотрят на все приложение (а не только на одну сборку), поэтому они также могут изменять общедоступный API.
Это, безусловно, начало обфускатора. Хотя некоторые обфускаторы также шифруют строки и другие подобные уловки, чтобы сделать обратное проектирование сборки очень трудным.
Конечно, поскольку среда выполнения должна запускать сборку после всего этого, решительный хакер может перепроектировать ее :)
Существуют инструменты deobfuscator для отмены нескольких техник обфускации, таких как расшифровка строк, удаление методов прокси, девиртуализация виртуализированного кода, удаление анти-отладочного кода, удаление нежелательных классов, восстановление типов параметров и полей методов и т. Д. ...
Один очень мощный инструмент - de4dot.
Но есть другие.
Обфускация - это изменение значимых имен, таких как accountBalance
, на бессмысленные, например a1
. Приложение, очевидно, по-прежнему будет работать, но понять алгоритмы внутри него будет сложнее.
Это зависит от используемой технологии обфускации. Непонятное имя переменной - это только одна часть проблемы. Многие инструменты обфускации одновременно выполняют своего рода обфускацию потока программы, что усложняет дальнейшее понимание кода. В конце концов, запутанный IL будет нелегко выразить (если вообще) на большинстве языков программирования.
Переименование переменных и полей также не поможет вам, так как наличие большого количества переменных1, переменных2 ... не поможет вам понять, что вы читаете.