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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита исходного кода .NET приложений, От любителей халявы ... и не только 
:(
    Опции темы
Danilo
Дата 1.2.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У нас в конторе довольно долго обсуждались варианты защиты программного кода и в итоге был написан фрэймворк делающий примерно следующее:

1. После компиляции все модули системы пропускаются через encryptor, который читает сборки, получает тела функций, криптует их одним из алгоритмов шифрования и пишет обратно в сборку.
2. При запуске программы используем .NET Profiling Api позволяющий перед вызовом функции JIT компайлером получить тело метода, дешифровать его и "подсунуть" оригинальное тело метода.

Таким образом прочтение кода становится весьма сложной задачей т.к. дешифрованные данные доступны только в runtime, хотя имена классов и функций остаются видны.

Предвосхищая вопросы перфоманса могу сказать что он сильно зависит от алгоритмов шифрования, но практика показала что использование симметричных алгоритмов даёт приемлимый (для нашей системы) результат.


PM MAIL   Вверх
jfx
Дата 6.2.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хм, интересный способ, похоже на загрузчики Java. В Java это реализуется почти стандартно, а вот в .NET как? Исли можно пример или ссылки по теме.
Спасибо.
PM MAIL   Вверх
Danilo
Дата 12.2.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(jfx @ 6.2.2006, 14:35)
Если можно пример или ссылки по теме.


Почитать можно например здесь.
PM MAIL   Вверх
ivashkanet
Дата 19.6.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Поднимаю тему.
Вычитал, что все данные, нужные для дезассемблирования берутся из метаданных. 
Вопрос: возможно ли как-нибудь корректно удалить часть метаданных (я понимаю, что потом нашу сборку нельзя будет корректно подключить к другой сборке). 
Вопрос чисто теоретический. Просто пришел в голову  smile  
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 19.6.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Вряд ли CLR позволит удалить из сборки таблицу метаданных smile 


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 20.6.2006, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(mr.DUDA @  19.6.2006,  20:19 Найти цитируемый пост)
Вряд ли CLR позволит удалить из сборки таблицу метаданных

Это был чисто теоретический вопрос  smile  
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 20.6.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(ivashkanet @  20.6.2006,  07:48 Найти цитируемый пост)
Это был чисто теоретический вопрос  

это был чисто теоретический ответ  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
sammix
Дата 20.6.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: нет
Всего: 2



Кто знает может это всё к лучшему...

сорсы дороже стоят, но в таком случае всем придется делать open-source проекты. 
PM MAIL   Вверх
ivashkanet
Дата 30.8.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Поднимаю тему опять
Цитата(jfx @  21.4.2005,  10:28 Найти цитируемый пост)
Есть как минимум три способа обойти проверку StrongName:

  1. В заголовке сборки обнулить длину PublicKey - это приведет просто к отключению проверкии вообще. sn -v assm.dll выдаст "assm.dll does not represent a strongly named assembly".
  2. Разобрать сборку с помощью ildasm, в исходниках убрать секцию с PublicKey и собрать сборку вновь. Результат тот же что и в первом варианте.
  3. Просто переподписать исправленную сборку новым ключом, предварительно заменив в сборке PublicKey на тот для которого известен PrivateKey.
Таким образом защита с помощью StrongName приравнивается к нулю. Ваши коментарии?


jfx, ты извини, но ты совсем не в курсе вопроса  smile 
Сборку защищают для того, чтобы ее нельзя было подменить на другую smile 
Проверкой ключей и строгих имен заниматся прога (сборка) использующая защищенную сборку.
Если мы удалим publicKey из сборки, то прога будет ругаться на попытку подсунуть ей другую сборку вместо необходимой (защищенной ключем).
P.S. Повторяю еще раз: StrongName сборки нужно для защиты ее от подмены smile
Если сделать хоть какое изменение в сборке мы теряем ее Строгое Имя. После этого все программы, которые используют защищенную сборку будут ругаться на измененную. 
P.P.S. Механизм подписывания сборок используется так же механизме предоставления прав сборке.
Например можно запретить неподписанным (ключем которомы мы доверям) сборкам доступ к реестру, диску С:  (можно вообще много чего запретить).
После этого если злоумышленник изменит код сборки, то он потеряет ее подпись, а следовательно и возможность навредить smile

PM MAIL WWW ICQ   Вверх
Rapalex
Дата 31.8.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 2
Всего: 8



Почитал я 3-х летнюю дискусию, и возник вопрос рас уж так исторически вышло что всё можно дизасемблировать, а .нет можно ещё и декомпелировать, тогда КАК ЖЕ НАМ ПРОГРАМЕРАМ ПРИВЯЗЫВАТЬ НАШ ПРОДУКТ К ЖЕЛЕЗУ?

Ведь вся наша проверка видна декомпилятором и легко можно написать кейген используя наш код!!!

Я никогда даже не пробывал ломать класические екзешники но знаю что есть всякие отладчики для экзешников, но есть и те программы которые не дают им работать.

А что с етим в мире .нет?

Не забуддте про вопрос который набран ЗАГЛАВНЫМИ БУКВАМИ.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
mr.DUDA
Дата 2.9.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Rapalex, всё решается на самом деле очень просто. Есть такое слово: обфускация. И никакая декомпиляция не поможет smile


--------------------
user posted image
PM MAIL WWW   Вверх
$tatic
Дата 3.9.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 22



Я когда-то устанавливал 9-Rays Obfuscator. Короче там была какая-то примочка, которая помимо обфускации что-то еще делала с бинарником, в результате чего сборку вообще нельзя было загрузить в любой декомпилятор. Они просто выпадают с ошибкой. Не только ILDasm, но и Reflector. Кстати сам 9-Rays Obfuscator именно этой фичей и защищен. smile
Цитата(ivashkanet @  30.8.2006,  13:20 Найти цитируемый пост)
Проверкой ключей и строгих имен заниматся прога (сборка) использующая защищенную сборку

А если хакер именно эту прогу и поломает? smile
Может скомпилированную (и обфусцированную) прогу на .NET сжать каким-нибудь упаковщиком и обработать DotFix FakeSigner?
Да, и еще. Ведь при запуске проги на .NET управление получает вначале загрузчик, который уже потом запускает mscoree.dll. Можно ли сделать свой загрузчик, который вначале расшифрует код IL, а уже потом отправит его на выполнение?
Кстати если бы обфускаторы давали классам имена в юникоде из символов какой-нибудь "левой" кодовой страницы ИМХО было бы весело smile
PM MAIL   Вверх
mr.DUDA
Дата 3.9.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата($tatic @  3.9.2006,  15:33 Найти цитируемый пост)
Кстати если бы обфускаторы давали классам имена в юникоде из символов какой-нибудь "левой" кодовой страницы ИМХО было бы весело

Они и так достаточно "левые", поди разбери что имеется ввиду в коде типа "a._b.c()._d(_e.a);" smile


--------------------
user posted image
PM MAIL WWW   Вверх
ivashkanet
Дата 3.9.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата($tatic @  3.9.2006,  15:33 Найти цитируемый пост)
А если хакер именно эту прогу и поломает? 

Теоретически, должно измениться ее строгое имя smile 
PM MAIL WWW ICQ   Вверх
$tatic
Дата 3.9.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 22



Цитата(ivashkanet @  3.9.2006,  19:54 Найти цитируемый пост)
Теоретически, должно измениться ее строгое имя

И где это будет проверено?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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