теория алгоритмов.Лекция 6. Подходы к защите данных
.pdfБулах Д.А. |
Теория алгоритмов. |
Слайд 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;
}