Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложность защиты кода 
V
    Опции темы
ДобренькийПапаша
Дата 9.1.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Точнее меня интересует ответ на вопрос. Почему защита кода, компилирующегося в машинный код проще и надёжней, чем кода компилируемого в байт-код? Хочу знать, почему, конкретно? Ещё хочу краткий ответ об отличии механизмов защиты.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Heinzz
Дата 9.1.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Цитата(ДобренькийПапаша @  9.1.2010,  10:37 Найти цитируемый пост)
Почему защита кода, компилирующегося в машинный код проще и надёжней

байт код  это IL - вообще говоря читаемый код, при хорошей усидчивости в нем можно разобраться и повторить.
машинный код - специфичен для процессора и нечитаем.

чтобы защитить байткод используют deobfuscator который вносит путаницу меняя имена пространств, классов, полей.. на белеберду.


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 9.1.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Да-да, то, что вы сказали ясно. А есть ли другие проблемы? 
Есть (насколько мне известно) 4 подхода к защите.

1)Запутывание кода.
2)Упаковка кода.
3)Управление JIT-компиляцией.
4)Виртуализация байт-кода.

Просьба вкратце рассмотреть эти подходы и расставить их по приоритету. Кто что думает по этому поводу? Мне интересно Ваше мнение.

Это сообщение отредактировал(а) ДобренькийПапаша - 9.1.2010, 17:21


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 9.1.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



машинный код защищают десятилетиями и уже кое-чего добились 8)
В процессе выполнения на уровне процессора можно замутить намного более сложные вещи, чем на уровне IL. Например, можно использовать фишки операционки делая отладку запущенного процесса. В кратце данная техника подразумевает, что процесс запускается под отладчиком (собой же), а сам код и данные процесса зашифрованы. При этом распаковка и дешифрование производится страницами в память. Суть отладчика - перехыватывать PAGE_FAULT ошибку, зашифровывать ранее расшифрованную страницу и дешифровать ту, куда процесс попытался стукнутся.. в общем техника реализована в защитах вроде Armadillo....
А еще на уровне процессора можно более эффективно противостоять отладчикам, вытворять всякие непоребности вроде адресация по нечетным адресам, вызов ошибок в совокупности с SEH и VEH .... или даже установке драйверов (как, например, StarForce)...


Я так понимаю в .net можно сделать нечто, что будет создавать код и выполнять его (через тот же CodeDOM например), но, учитывая что .net и так-то не быстр, это съест всю скорость...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 13.1.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Ну вот я сделал небольшой обзор этих четырёх пунктов:

1)Обфускация.
Назначение обфускатора – запутать сам код, переименовывая имена членов (методов, переменных).
Перед обфускацией:
Код

private void CalcPayroll(SpecialList employeeGroup)
{
while(employeeGroup.HasMore())
    {
       employee = employeeGroup.GetNext(true);
       employee.UpdateSalary(); DistributeCheck(employee);
    }
}


После обфускации:
Код

private void _1(_1 _2)
{
     while(_2._1())
     {
            _1 = _2._1(true);
            _1._1();
            _1(_1);
     }
} 


2)Упаковка кода.

Сжатие исполняемого файла и прикрепление к нему кода, необходимого для распаковки и исполнения содержимого файла. Упаковка производится по ряду причин:
•    Упакованный файл занимает меньше места на жёстком диске, что помогает ускорить его загрузку в память
•    Некоторые виды упаковки совмещены с шифрованием содержимого файла для того, чтобы предотвратить обратную разработку программы.

3)Управление JIT-компиляцией.

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

4)Виртуализация байт-кода.

Виртуализация кода – это следующий шаг в области защиты программного обеспечения от анализа. Большинство систем защит шифруют исполняемый код и расшифровывают его при запуске программы. Существуют защитные средства, которые никогда не расшифровывает код. В процессе защиты они способны переводить код программы в код, работающий на виртуальном процессоре. Набор команд этого процессора не похож на команды процессоров x86 или x64 и меняется при каждой защите программы.

Преимущества подхода к защите с использованием виртуализации кода:
  • Генерация уникальной среды выполнения 
  • Полиморфизм на уровне потока выполнения команд
  • Возможность портирования VM для выполнения на различных аппаратных платформах

Методы построения виртуальной среды выполнения:
  • Построение виртуальной среды выполнения опираясь на технологии отложенной компиляции Reflection.Emit (полностью managed вариант)
  • Построение полностью Native виртуальной среды выполнения
  • Построение гибридной виртуальной среды выполнения основанной на технологиях Managed C++ (Mixed mode)

Вывод:
Осложнить взлом программного кода можно используя комплексный подход к защите: обфускацию, упаковку, настройку на интеллектуальное поведение JIT-компиляции и виртуализацию

Стоимость пакетов для защиты программного кода колеблется от 800$ до 2.000$.
Они предоставляют возможность мутации кода, виртуализации, защиты памяти, защиты импорта, упаковки, определения отладчика, определение средств виртуализации. Помимо этого включают в себя полезные средства лицензирования: ограничение срока действия ключа, ограничение времени бесплатных обновлений, привязка ключа к оборудованию, привязка кода к ключу, ведение чёрных списков, веб-генераторы серийных номеров.








--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Voyager
Дата 9.2.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



А в каких продуктах реализована виртуализация байт-кода?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.