 |
Защита приложений - Переименование классов, методов...
|
Символьная обфускация
Символьная обфускация включает в себя обфускацию имен классов, названий методов, параметров и т. п. Доступны следующие виды символьной обфускации:
- Преобразование имен методов, переменных и т.д. в набор бессмысленных символов
Например: был у Вас метод класса CheckLicense(), после обфускации данный метод будет иметь имя ah(). Такие фразы усложняют взломщику задачу и увеличивают затрачиваемо на анализ время. Однако существует одна проблема - многие декомпиляторы, встречая на своем пути подобного рода имена заменяют их на более читабельные (method_1, method_2), тем самым облегчая анализ (для того чтобы этого не произошло нужно комбинировать методы защиты).
- Преобразование имен методов, переменных и т.д. в набор цифр.
Например, был у Вас метод - GetDefaultPassword(), а стал 0(). К тому же, в связи с тем, что символьной информации теперь в сборке будет храниться меньше, размер самой сборки, соответственно, тоже значительно сократится. Также такой метод хорош тем, что одно и то же имя будет использовано для именование класса, методов класса (например, отличающихся только типом возвращаемого значения). Это позволит также заблокировать работу некоторых дизассемблеров, таких как ildasm, например.
- Преобразование имен методов, переменных и т.д. в набор нечитабельных символов
Суть метода в замене имен на нечитаемые символы, например символы японского языка. Хотя .Net и работает с кодировкой UTF8, не все декомпиляторы адекватно обрабатывают ее символы. Некоторые заменяют имена с такими символами на более понятные, некоторые проставляют вместо непонятных символов их код, некоторые просто отказываются работать с данными символами.
- Использование комбинированного метода
Для преобразования конкретного имени случайным образом будет выбран один из вышеперечисленных видов обфускации.
- Преобразование имен методов, переменных и т.д. в типы с нумерацией (класс1, метод1 и т.д.)
При использовании данного вида символьной обфускации, её результат будет включать тип обфусцируемого объекта. Например: У Вас был метод класса TestLicense(), после обфускации данный метод будет иметь имя Method1(). Данный метод бывает полезен при отладке приложения.
Настройка параметров переименования сборок
Внешний вид вкладки Переименование (с пометками)
Опции:
Исключение при переименования - из исходного кода
Задавать исключения можно так же непосредственно в исходном коде (C#, VB и т.д.).
Для этого нужно использовать атрибут System.Reflection.Obfuscation
[System.Reflection.Obfuscation( Exclude = true [, ApplyToMembers = true|false [, Feature = "Public"]])]
Например:
//
// Исключить из переименования класс 'Class1' со всем вложением
//
[System.Reflection.Obfuscation(Exclude = true, ApplyToMembers = true)]
public class Class1
{
public void Function1() { }
protected void Function2() { }
internal void Function3() { }
}
//
// Исключить из переименования класс 'Class1' со всеми дочерними Public элементами
//
[System.Reflection.Obfuscation(Exclude = true,
ApplyToMembers = true, Feature = "Public")]
public class Class1
{
public void Function1() { }
protected void Function2() { }
internal void Function3() { }
}
//
// Исключить из переименования только метод 'Function2'
//
public class Class1
{
public void Function1() { }
[System.Reflection.Obfuscation(Exclude = true)]
protected void Function2() { }
internal void Function3() { }
}
//
// Исключить из переименования только класс 'Class1' и метод 'Function2'
//
[System.Reflection.Obfuscation(Exclude = true)]
public class Class1
{
public void Function1() { }
[System.Reflection.Obfuscation(Exclude = true)]
protected void Function2() { }
internal void Function3() { }
}
Пример результата переименования с использованием метода Юникод (просмотр осуществляется с использованием утилиты .Net Reflector):
|
|
|
|
15.11.2008
|
|
 |
|