![]() |
Модераторы: Partizan, gambit Страницы: (9) Все « Первая ... 3 4 [5] 6 7 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
Danilo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
У нас в конторе довольно долго обсуждались варианты защиты программного кода и в итоге был написан фрэймворк делающий примерно следующее:
1. После компиляции все модули системы пропускаются через encryptor, который читает сборки, получает тела функций, криптует их одним из алгоритмов шифрования и пишет обратно в сборку. 2. При запуске программы используем .NET Profiling Api позволяющий перед вызовом функции JIT компайлером получить тело метода, дешифровать его и "подсунуть" оригинальное тело метода. Таким образом прочтение кода становится весьма сложной задачей т.к. дешифрованные данные доступны только в runtime, хотя имена классов и функций остаются видны. Предвосхищая вопросы перфоманса могу сказать что он сильно зависит от алгоритмов шифрования, но практика показала что использование симметричных алгоритмов даёт приемлимый (для нашей системы) результат. |
|||
|
||||
jfx |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: 1 Всего: 1 |
Хм, интересный способ, похоже на загрузчики Java. В Java это реализуется почти стандартно, а вот в .NET как? Исли можно пример или ссылки по теме.
Спасибо. |
|||
|
||||
Danilo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 1.2.2006 Репутация: нет Всего: нет |
||||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Поднимаю тему.
Вычитал, что все данные, нужные для дезассемблирования берутся из метаданных. Вопрос: возможно ли как-нибудь корректно удалить часть метаданных (я понимаю, что потом нашу сборку нельзя будет корректно подключить к другой сборке). Вопрос чисто теоретический. Просто пришел в голову ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вряд ли CLR позволит удалить из сборки таблицу метаданных
![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Это был чисто теоретический вопрос ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
это был чисто теоретический ответ ![]() -------------------- ![]() |
|||
|
||||
sammix |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 1.10.2005 Репутация: нет Всего: 2 |
Кто знает может это всё к лучшему...
сорсы дороже стоят, но в таком случае всем придется делать open-source проекты. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Поднимаю тему опять
jfx, ты извини, но ты совсем не в курсе вопроса ![]() Сборку защищают для того, чтобы ее нельзя было подменить на другую ![]() Проверкой ключей и строгих имен заниматся прога (сборка) использующая защищенную сборку. Если мы удалим publicKey из сборки, то прога будет ругаться на попытку подсунуть ей другую сборку вместо необходимой (защищенной ключем). P.S. Повторяю еще раз: StrongName сборки нужно для защиты ее от подмены ![]() Если сделать хоть какое изменение в сборке мы теряем ее Строгое Имя. После этого все программы, которые используют защищенную сборку будут ругаться на измененную. P.P.S. Механизм подписывания сборок используется так же механизме предоставления прав сборке. Например можно запретить неподписанным (ключем которомы мы доверям) сборкам доступ к реестру, диску С: (можно вообще много чего запретить). После этого если злоумышленник изменит код сборки, то он потеряет ее подпись, а следовательно и возможность навредить ![]() |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 2 Всего: 8 |
Почитал я 3-х летнюю дискусию, и возник вопрос рас уж так исторически вышло что всё можно дизасемблировать, а .нет можно ещё и декомпелировать, тогда КАК ЖЕ НАМ ПРОГРАМЕРАМ ПРИВЯЗЫВАТЬ НАШ ПРОДУКТ К ЖЕЛЕЗУ?
Ведь вся наша проверка видна декомпилятором и легко можно написать кейген используя наш код!!! Я никогда даже не пробывал ломать класические екзешники но знаю что есть всякие отладчики для экзешников, но есть и те программы которые не дают им работать. А что с етим в мире .нет? Не забуддте про вопрос который набран ЗАГЛАВНЫМИ БУКВАМИ. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Rapalex, всё решается на самом деле очень просто. Есть такое слово: обфускация. И никакая декомпиляция не поможет
![]() -------------------- ![]() |
|||
|
||||
$tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
Я когда-то устанавливал 9-Rays Obfuscator. Короче там была какая-то примочка, которая помимо обфускации что-то еще делала с бинарником, в результате чего сборку вообще нельзя было загрузить в любой декомпилятор. Они просто выпадают с ошибкой. Не только ILDasm, но и Reflector. Кстати сам 9-Rays Obfuscator именно этой фичей и защищен.
![]()
А если хакер именно эту прогу и поломает? ![]() Может скомпилированную (и обфусцированную) прогу на .NET сжать каким-нибудь упаковщиком и обработать DotFix FakeSigner? Да, и еще. Ведь при запуске проги на .NET управление получает вначале загрузчик, который уже потом запускает mscoree.dll. Можно ли сделать свой загрузчик, который вначале расшифрует код IL, а уже потом отправит его на выполнение? Кстати если бы обфускаторы давали классам имена в юникоде из символов какой-нибудь "левой" кодовой страницы ИМХО было бы весело ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Они и так достаточно "левые", поди разбери что имеется ввиду в коде типа "a._b.c()._d(_e.a);" ![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Теоретически, должно измениться ее строгое имя ![]() |
|||
|
||||
$tatic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 28.1.2005 Репутация: 2 Всего: 22 |
||||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |