Переименование параметров метода

Переименование параметров метода

 

Переименование параметров метода включает в себя преобразовании имен параметров функции.
Для этого применяются следующие методы:

  • Преобразование имен методов, переменных и т.д. в бессмысленный набор символов
    Например: параметр ..(string license_key), после обфускации будет иметь имя ..(string a).
  • Переименование в цифры
    Например, параметр - ..(string license_key), преобразуется к виду ...(string 0). К тому же, в связи с уменьшением длины имен параметров, размер самой сборки значительно сокращается. Кроме того, данный метод хорош еще тем, что одно и то же имя, может быть использовано для именования класса и методов класса (например, отличающихся только типом возвращаемого значения). Это позволяет блокировать работу некоторых дизассемблеров, таких как ildasm, например.
  • Преобразование имен методов, переменных и т.д. в набор неотображаемых символов
    Суть метода в замене имен на нечитаемые символы, например символы японского языка. Хотя .Net и работает с кодировкой UTF8, не все декомпиляторы адекватно обрабатывают ее символы. Некоторые заменяют имена с такими символами на более понятные, некоторые проставляют вместо непонятных символов их код, некоторые просто отказываются работать с данными символами.
  • Использование комбинированного метода
    Этот вид символьной обфускации использует вперемешку несколько методов переименования по случайному алгоритму.


Настройка параметров переименования параметров метода

 

Внешний вид вкладки Параметры метода (с пометками)

 

Опции:

  • Разрешить переименование параметров метода - Включение режима переименования параметров при обфускации;
  • Метод переименования - Задает метод, по которому будет производится переименование;
     
  • Не переименовывать открытые объекты - Исключает из процесса переименования открытые (public) классы, методы и т.д. ;
    Например:
    // Исходный код
    public class Class1
    {
        public void Function1(string param1) {}
        protected void Function2() {string param2}
        internal void Function3() {string param3}
    }
    
    // После переименования с опцией Не переименовывать открытые объекты
    public class Class1
    {
        public void Function1(string param1) {}
        protected void b() {string a }
        internal void c() {string b}
    }
    
  • Сборка - модуль, для которой будут настраиваться опции;
  • Переименование - данная опция включает для сборки режим переименования параметров метода;
  • Таблица исключений - вкладка на которой настраиваются исключения при переименовании параметров;

  • Дерево исключений - В этом дереве можно с помощью меню исключить нужные классы, методы и т.д. из процесса переименования;
  • Список выбранных исключений - В этом списке отображаются исключенные (из переименования) пользователем элементы (используя дерево исключений);
  • Исключить - Исключает из процесса переименования выделенный в дереве элемент (без доченрних), в результате в список исключений добавится новая запись;
  • Исключить рекурсивно - Исключает из процесса переименования выделенный в дереве элемент (вместе со всеми дочерними элементами) , в результате в список исключений добавится новая запись;
  • Удалить - Удаляет элемент из списка исключений;


Исключение при переименования - из исходного кода

 

Задавать исключения можно так же непосредственно в исходном коде (C#, VB и т.д.).

Для этого нужно использовать атрибут System.Reflection.Obfuscation

 

Например:


 

//
// Исключить из переименования параметры метода 'Function2'
//
public class Class1
{
    public void Function1(stirng message) { }

    [System.Reflection.Obfuscation(Exclude = true, 
                                   ApplyToMembers = true, 
                                   Feature = "MethodParams")]
    protected void Function2(string license_key ) {}

    internal void Function3(int number) { }
}



 

 

 
15.11.2008
 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce
 
01.08  Task Context
01.08  XLSX в Mono