Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

теория алгоритмов.Лекция 6. Подходы к защите данных

.pdf
Скачиваний:
23
Добавлен:
29.02.2016
Размер:
4.83 Mб
Скачать

Булах Д.А.

Теория алгоритмов.

Слайд 21 из 26

Кафедра ПКИМС, МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Программно-аппаратная защита – электронные ключи

Что может делать ключ?

Ключи:

 

•  Хранить серийник

Guardant от ООО Актив

LOCK от ООО Астрома

•  Хранить таблицу ответов на опросы

SenseLock от ЗАО «Секьюлэб»

•  Хранить программный код

и другие

Метод взлома: опрос и эмуляция

Сложность: нужно купить хотя бы один ключ

Цена вопроса: от 1200 рублей за ключ

Булах Д.А.

Теория алгоритмов.

Слайд 22 из 26

Кафедра ПКИМС, МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Защита исходного кода – обфускация кода

class DataFile {

 

public:

 

~DataFile();

 

private:

traces;

std::vector<Trace *>

std::vector<double>

x_axis;

std::string

x_axis_name;

public:

bool read_from_academic(const char *); bool read_from_csv(const char *);

bool read_from_psf_hspice(const char *); bool read_from_psf_spectre(const char *);

};

Булах Д.А.

Теория алгоритмов.

Слайд 23 из 26

Кафедра ПКИМС, МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Защита исходного кода – обфускация кода

typedef const char *

T1;

typedef bool

T2;

typedef std::string

T3;

typedef

std::vector<Trace *> T4;

typedef

std::vector<double>

T5;

class С1 {

 

public:

 

~С1();

 

private:

v1;

std::vector<Trace *>

std::vector<double>

v2;

std::string

v3;

public:

 

bool f1(const char *);

 

bool f2(const char *);

 

bool f3(const char *);

 

bool f4(const char *);

 

};

 

class С1 { public: ~С1(); private:

T4 v1;

T5 v2;

T3 v3; public:

T2 f1(T1);

T2 f2(T1);

T2 f3(T1);

T2 f4(T1);

};

Булах Д.А.

Теория алгоритмов.

Слайд 24 из 26

Кафедра ПКИМС, МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Защита исходного кода – обфускация кода

#define TYPE(id)

T##id

#define DEF

class

#define VAR(id)

v##id

#define OFF

private:

#define FUNC(id)

f##id

#define ON

public:

#define START

{

 

 

 

#define STOP

}

 

 

 

class С1 {

 

DEF С1

 

 

public:

 

START

 

 

~С1();

 

ON

 

 

private:

 

~С1();

 

 

T4

v1;

 

OFF

VAR(1);

 

T5

v2;

 

TYPE(2)

 

T3

v3;

 

TYPE(3)

VAR(2);

 

public:

 

TYPE(1)

VAR(3);

 

T2

f1(T1);

ON

T2

f2(T1);

TYPE(2) FUNC(1)(TYPE(1));

T2

f3(T1);

TYPE(2) FUNC(2)(TYPE(1));

T2

f4(T1);

TYPE(2) FUNC(3)(TYPE(1));

};

 

TYPE(2) FUNC(4)(TYPE(1));

 

 

STOP;

Булах Д.А.

Теория алгоритмов.

Слайд 25 из 26

Кафедра ПКИМС, МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Защита

1.  Защита от дизассемблирования

2.  Запутывание программного кода

функция

Булах Д.А.

 

Теория алгоритмов.

Слайд 26 из 26

Кафедра

МИЭТ. 2012.

Лекция 6. Подходы к защите данных.

 

Шифрование исполняемого кода

с данными = Последовательность байт Машинный = Последовательность байт

запустить на исполнение произвольный участок памяти

кода

Шифрование части кода

кода

части кода

Исполнение кода

void XOR_EAX_EAX_memory() {

char *mach_code = new char [10];

mach_code[0] = (char)0x55;

mach_code[3] = (char)0x33; mach_code[4] = (char)0xC0; mach_code[5] = (char)0x8B; mach_code[6] = (char)0xE5; mach_code[7] = (char)0x5D; mach_code[8] = (char)0xC3; mach_code[9] = (char)0x90;

}