Слайд 3Декомпиляция
Трансляция исполняемого кода в исходный.
Возможна благодаря:
Массе лишней информации об оригинальном коде в
![Декомпиляция Трансляция исполняемого кода в исходный. Возможна благодаря: Массе лишней информации об](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-2.jpg)
скомпилированной проге
Однотипности языков в\у
Информации о компиляторе
Наличию промежуточных кодов
Слайд 4Цели декомпиляции
- Поддержка кода
- Обеспечение безопасности
- Обратная разработка
![Цели декомпиляции - Поддержка кода - Обеспечение безопасности - Обратная разработка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-3.jpg)
Слайд 5Декомпиляторы Java
“Jad” Java-декомпилятор
“Cavaj” Java-декомпилятор
“Mocha” Java-декомпилятор
“DeCafePro” от DeCafe, Франция
![Декомпиляторы Java “Jad” Java-декомпилятор “Cavaj” Java-декомпилятор “Mocha” Java-декомпилятор “DeCafePro” от DeCafe, Франция](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-4.jpg)
“SourceTech Java-декомпилятор” от SourceTech Corp
“SourceAgain” от Ahpah Сorp
“Class Cracker” от Mayon Software, Австралия
“IceBreaker” от BreakerTech corp, Великобритания
“NMI Java-декомпилятор” от NMI
DJ Java Decompiler - декомпилятор Java-классов.
Слайд 6Обфускация
Запутывание кода программы с целью осложнения декомпиляции.
Возможна на уровнях:
Алгоритма
Исходного текста
Машинных кодов
![Обфускация Запутывание кода программы с целью осложнения декомпиляции. Возможна на уровнях: Алгоритма Исходного текста Машинных кодов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-5.jpg)
Слайд 7Обоснованность обфускации
Время на понимание > времени актуальности алгоритма
Цена обфускации > цены продукта
![Обоснованность обфускации Время на понимание > времени актуальности алгоритма Цена обфускации > цены продукта](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-6.jpg)
Слайд 8Методы обфускации
- Переименование методов, переменных и т.д. в набор бессмысленных символов.
Например: метод
![Методы обфускации - Переименование методов, переменных и т.д. в набор бессмысленных символов.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-7.jpg)
GetPassword() после обфускации будет иметь имя KJHS92DSLKaf().
Проблема: многие декомпиляторы, встречая на своем пути подобного рода имена, заменяют их наболее осмысленные (method_1, method_2), тем самым сводя всю работу обфускатора на нет.
Слайд 9- Переименование в более краткие имена или использование порядковых номеров вместо имён
Например:
![- Переименование в более краткие имена или использование порядковых номеров вместо имён](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-8.jpg)
метод GetConnectionString() -> 0().
- Использование для имен переменных нечитаемых символов.
- Использование имен, меняющих смысл.
Например, класс SecurityInformation с методом GetInformation станет классом Car с методом Wash.
Слайд 10- Изменение местоположения данных: объединение нескольких сущностей в одну или разделение одной
![- Изменение местоположения данных: объединение нескольких сущностей в одну или разделение одной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-9.jpg)
сущности на несколько. Например: две строки могут быть объединены в массив строк.
- Замена статических членов на вызовы методов.
- Добавление неиспользуемых данных.
- Изменение способа хранения данных.
- Выполнение финализации (finalization).
Слайд 11- Преобразование вычислений, вставка в алгоритмы ложных условий.
- Удаление или добавление абстракций
![- Преобразование вычислений, вставка в алгоритмы ложных условий. - Удаление или добавление](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/381433/slide-10.jpg)
кода
Например: замена вызова какой-либо функции непосредственно телом функции, или наоборот – замена одной функции на несколько маленьких функций.
- Перемешивание случайным образом линейных участков.
Таким образом, обфускатор часто является оптимизирующим компилятором.