Применение метода Ченгси-Ванга для обфускации функциональных языков

Содержание

Слайд 2

ВВЕДЕНИЕ Защита информации - является острой проблемой в наши дни. Обфускация

ВВЕДЕНИЕ

Защита информации - является острой проблемой в наши дни.
Обфускация -

один из способов борьбы с ней в IT-сфере.

2/18

Слайд 3

ПОСТАНОВКА ЗАДАЧИ Изучить понятие обфускации Изучить открытую проблему обфускации функциональных программ

ПОСТАНОВКА ЗАДАЧИ

Изучить понятие обфускации
Изучить открытую проблему обфускации функциональных программ
Изучить и модернизировать

Алгоритм Ченгси-Ванга
Создать программу-обфускатор, которая будет защищать код функционального языка программирования на примере языка SML

3/18

Слайд 4

ОБФУСКАЦИЯ ПРОГРАММ Обфускация - запутывание кода, затрудняющее анализ и понимание алгоритмов

ОБФУСКАЦИЯ ПРОГРАММ

Обфускация  - запутывание кода, затрудняющее анализ и понимание алгоритмов работы программы.
Обфускатор

– программа, выполняющая обфускацию.
Три уровня обфускации :
На уровне алгоритма
Запутывание исходного кода
Запутывание ассемблерного кода

4/18

Слайд 5

ЦЕЛИ ОБФУСКАЦИИ Затруднение декомпиляции и изучения программ с целью обнаружения функциональности.

ЦЕЛИ ОБФУСКАЦИИ

Затруднение декомпиляции и изучения программ с целью обнаружения функциональности.
Затруднение декомпиляции

проприетарных программ с целью предотвращения обратной разработки или обхода DRM и систем проверки лицензий.
Оптимизация программы с целью уменьшения размера работающего кода.

5/18

Слайд 6

ОТКРЫТАЯ ПРОБЛЕМА С ОБФУСКАЦИЕЙ ФУНКЦИОНАЛЬНЫХ ПРОГРАММ Нет аналогов 6/18

ОТКРЫТАЯ ПРОБЛЕМА С ОБФУСКАЦИЕЙ ФУНКЦИОНАЛЬНЫХ ПРОГРАММ

Нет аналогов

6/18

Слайд 7

ИСПОЛЬЗОВАНИЕ ФУНКЦИОНАЛЬНЫХ ЯЗЫКОВ Erlang - Facebook - бэкенд для чата Erlang

ИСПОЛЬЗОВАНИЕ ФУНКЦИОНАЛЬНЫХ ЯЗЫКОВ

Erlang - Facebook - бэкенд для чата
Erlang - Серверное

программное обеспечение WhatsApp
R – Big data, Data Science
Другие языки : F# (Microsoft), Haskell, SML

7/18

Слайд 8

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ Создание графа потока управления этой процедуры

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ
Создание графа потока управления этой процедуры
Нумерация всех

блоков в графе, и добавление в код процедуры переменной хранящей номер следующего выполняемого блока
Приведение графа к однородному виду

8/18

Слайд 9

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ: НАГЛЯДНО Рис.1 Рис.2 9/18

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ: НАГЛЯДНО

Рис.1

Рис.2

9/18

Слайд 10

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ: ПРИМЕР РАБОТЫ Входные данные: public class

АЛГОРИТМ ЧЕНГСИ-ВАНГА ДЛЯ ИМПЕРАТИВНЫХ ПРОГРАММ: ПРИМЕР РАБОТЫ

Входные данные:
public class ExampleClass extends

ArrayList {
private static Integer instance = null;
public static void main(String[] args) { hello(); world(); }
private static void hello() { System.out.print("Hello "); }
private static void world(){ System.out.print("World!!!"); }
}

Обфусцированный код:
public class ExampleClass extends ArrayList{private static Integer instance = null;public static void main(String[] args){java.util.Stack stack = new java.util.Stack<>(); stack.push(1);int postNumber; while(stack.size()>0){postNumber = stack.pop(); switch(postNumber){case 1:stack.push(4);stack.push(2);break;case 4: stack.push(5); stack.push(3); break;case 5: break;case 2:System.out.print("Hello");break;case 3: System.out.print("World!!!"); break;}}}}

10/18

Слайд 11

МОДЕРНИЗАЦИЯ АЛГОРИТМА ЧЕНГСИ-ВАНГА : ОБЩАЯ ИДЕЯ Введение дополнительного аргумента – аналога

МОДЕРНИЗАЦИЯ АЛГОРИТМА ЧЕНГСИ-ВАНГА : ОБЩАЯ ИДЕЯ

Введение дополнительного аргумента – аналога «переменной

состояния»
Сведение всех функций и ветвей функций в одну единую функцию, где вариант исполнения определяется значением нового аргумента
Добавление недостижимых ветвей

11/18

Слайд 12

ПРИМЕР РАБОТЫ МОДЕРНИЗИРОВАННОГО АЛГОРИТМА fun sort nil = nil | sort

ПРИМЕР РАБОТЫ МОДЕРНИЗИРОВАННОГО АЛГОРИТМА

fun sort nil = nil
| sort [x] =

[x]
| sort (h::t) =
if h < hd(sort t)
then (h::(sort t))
else (hd(sort t))::(sort (h::(tl(sort t))));

fun s 1 nil = nil
| s 1 [x] = [x]
| s 1 (h::t) = s 2 (h::t)
| s 2 nil = [1, 2, 3] /* недостижимая ветка */
| s 2 [x] = s 5 [x, x] /* недостижимая ветка */
| s 2 (h::t) =
if h < (hd(s 1 t))
then (h::(s 1 t))
else (hd(s 1 t))::(s 1 (h::tl(s 1 t)))
| s x y = nil; /* недостижимая ветка */

1.Введение переменной состояния.
2. Добавление недостижимых ветви.

12/18

Слайд 13

ПРИМЕР РАБОТЫ ПРОГРАММЫ Рис.3. Интерфейс. 13/18

ПРИМЕР РАБОТЫ ПРОГРАММЫ

Рис.3.
Интерфейс.

13/18

Слайд 14

ПРИМЕР РАБОТЫ ПРОГРАММЫ Рис.4. Загрузка файла. 14/18

ПРИМЕР РАБОТЫ ПРОГРАММЫ

Рис.4.
Загрузка файла.

14/18

Слайд 15

ПРИМЕР РАБОТЫ ПРОГРАММЫ Рис.5. Вывод результата. 15/18

ПРИМЕР РАБОТЫ ПРОГРАММЫ

Рис.5.
Вывод результата.

15/18

Слайд 16

ЗАКЛЮЧЕНИЕ В ходе работы была рассмотрена такая актуальная в наш век

ЗАКЛЮЧЕНИЕ

В ходе работы была рассмотрена такая актуальная в наш век тема,

как защита информации. Было изучено понятие «обфускации». Рассмотрены виды этого понятия. Узнали открытую проблему и применение функциональных языков. Был модернизирован один из наиболее известных алгоритмов «защиты кода». В результате работы получилась простая программа-обфускатор, с помощью которой можно запутать код функционального языка программирования SML. Что означает возможность решения такой нелегкой проблемы, с которой сталкиваются ежедневно огромное количество работников IT-сферы.

16/18

Слайд 17

СПИСОК ЛИТЕРАТУРЫ Башкин В.А. Функциональное программирование на языке SML// метод. указания/

СПИСОК ЛИТЕРАТУРЫ

Башкин В.А. Функциональное программирование на языке SML// метод. указания/ В.А.

Башкин; Яросл. гос. ун-т. – Ярославль, ЯрГУ, 2007 г.
Чернов, Л. В. Анализ запутывающих преобразований программ//Л.В. Чернов//Труды Института системного программирования РАН. Том 3, 2002 г. cтр. 7-38.
Rollcs, R. Unpacking virtualization obfuscators/R. Rollcs.//In Proc. 3rd USENIX Workshop on Offensive Technologies (WOOT'09), August 2009.
А.Ю.Тихонов, Л.И.Аветисян, В.А.Иадарян Методика извлечения алгоритма из бинарного кода на основе динамического анализа// Проблемы информационной безопасности. Компьютерные системы. — 2008. — Т. №3. — С. 66-71.

17/18