Защита

  • Автор темы shm
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S
#1
Народ, кто-нибудь занимался вопросами защиты под C# от взлома и копирования? Что-то в инете мало чего по этой теме. Под не-Framework - навалом. У нас используется электронный ключ, только вот скомпилированный код C# он не хочет защищать. Какие-то свои вставки в код можно сделать, только вот найти их в C# коде - как два байта...
Обфускторы не предлагать - знаю :) Что еще есть?
 
S
#3
Ну да?! Так что, все, кто пишет сейчас standalone-приложения на C#, работают задарма??
Подойдем с другой стороны - что можно сделать, чтобы максимально затруднить использование отладчиков?
 
G

Guest

#4
Сначала скажу, что я вообще .Net не использую пока, поэтому мои выводы чисто теоретические.
1. Практически да - те кто пишет на .NET, работают задарма, как ты говоришь. Сегодня нет еще нормальной навесной защиты.
2. В сврусе есть человек, Victor Victorov, 9Rays.Net. Они активно над этим работают, можешь с ним связаться, пообщаться. Есть у них и очень сильный (вроде) обфускатор.
3. Давно, в самом начале разговоров про защиту в .NET обсуждался такой подход - из зашифрованных ресурсов в динамике создается в памяти сборка, из которой запускается код. Если это возможно, то имхо этого достаточно для вполне нормальной защиты. Однако больше я об этом не слышал - возможно что-то поменяли в базе, так что такой трюк невозможен.
 
E

eisernWolf

#5
>>Практически да - те кто пишет на .NET, работают задарма, как ты говоришь. Сегодня нет еще нормальной навесной защиты.

Ты хотя бы представляешь себе какой оборот нынче приняла разработка компонентов под .NET?

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

А я лоадер напишу. Буду прямо в памяти байты править. Аналогичная идея под Win32 - пакер - не спасает. К тому же эти зашифрованные ресурсы расшифровываются вызовом соответствующего метода из самого приложения. Необходимо лишь подключить требуемый проект к имеющемуся и начинать эксперименты.

P.S. Лучший способ защитить программу - это приложить к ней исходный код. .NET Framework делает это за вас :) Важно понять, что далеко не всем хочется ломать каждый новый релиз и разбираться в 40.000 строках и 200 классах. Гораздо проще купить годовую подписку и заработать куда больше денег купленным инструментом.

>>что можно сделать, чтобы максимально затруднить использование отладчиков?

Зачем? Ну сломает человек защиту, и что дальше? Я, например, не стану покупать краденный автомобиль (хоть и знаю где это сделать), а лучше пойду в магазин и совершенно законо получу техпаспорт на руки. Покупают даже в России. Причем не плохо. Проверено :)
 
G

Guest

#6
<!--QuoteBegin-eisernWolf+14:10:2005, 04:13 -->
<span class="vbquote">(eisernWolf @ 14:10:2005, 04:13 )</span><!--QuoteEBegin-->Ты хотя бы представляешь себе какой оборот нынче приняла разработка компонентов под .NET?[/quote]

Вполне, а какое это отношение имеет к защите? Я же подчеркнул, что лично я не считаю почти открытые коды признаком "работы в пустую" - я цитировал автора вопроса.

<!--QuoteBegin-eisernWolf+14:10:2005, 04:13 -->
<span class="vbquote">(eisernWolf @ 14:10:2005, 04:13 )</span><!--QuoteEBegin-->А я лоадер напишу.[/quote]

Успехов. Твой лоадер будет ломать без ключа секцию кода, защищенную RSA?

<!--QuoteBegin-eisernWolf+14:10:2005, 04:13 -->
<span class="vbquote">(eisernWolf @ 14:10:2005, 04:13 )</span><!--QuoteEBegin-->Важно понять, что далеко не всем хочется ломать каждый новый релиз и разбираться в 40.000 строках и 200 классах.[/quote]

А кто спорит? Это просто разные рынки. Полагаю, автор вопрос задавал из той же области, где работаю я - небольшие приложения для конечного пользователя. Здесь защита имеет некоторое (хотя и небольшое) значение для продаж.
 
G

Guest_

#7
Я написал прогу! :)
1. Обфускатор имен типов, методов, параметров.
2. Удаляет приватные enum-ы.
3. Обфускатор IL кода.
4. Частичный компилятор его в ASM (естественно, не все инструкции IL можно откомпилить).
5. Система привязки к железу.
6. + окончательный этап - разбавление кода мусором и антиатладочными конструкциями.
Один "-" - система привязки к железу требует, чтоб у пользователя всегда был инет. Хотя ее можно не юзать.

На входе - .NET exe-файл (пока только exe)
На выходе:
1 exe .NET файл (огрызок от .NET exe)
1 dll native файл (что удалось скомпилировать)
Или, при использовании системы online-активации с привязкой к железу
1 exe .NET файл (активатор)
1 dll .NET файл (огрызок от .NET exe)
1 dll native файл (что удалось скомпилировать)

Собсна, продавать ее рано. А вот тестировать можно.

stalkerdoom на yandex точка ру
 
K

karlito

#8
Я написал прогу!
1. Обфускатор имен типов, методов, параметров.
2. Удаляет приватные enum-ы.
3. Обфускатор IL кода.
4. Частичный компилятор его в ASM (естественно, не все инструкции IL можно откомпилить).
5. Система привязки к железу.
6. + окончательный этап - разбавление кода мусором и антиатладочными конструкциями.
Один "-" - система привязки к железу требует, чтоб у пользователя всегда был инет. Хотя ее можно не юзать.

На входе - .NET exe-файл (пока только exe)
На выходе:
1 exe .NET файл (огрызок от .NET exe)
1 dll native файл (что удалось скомпилировать)
Или, при использовании системы online-активации с привязкой к железу
1 exe .NET файл (активатор)
1 dll .NET файл (огрызок от .NET exe)
1 dll native файл (что удалось скомпилировать)

Собсна, продавать ее рано. А вот тестировать можно.

stalkerdoom на yandex точка ру
Смешно. А как насчёт 'сборки мусора'? Не думал?
И вообще смысла не вижу в таких программах? Неуправляемый код тоже можно раскрыть.

Защищённое приложение можно написать на .net. Защита приложения не кроется в основном в доступности исходного кода.

Обфускторы не предлагать
На примере. Хотел я как то посмотреть код самого рефлектора. Получилось, как выдумаете? Мало того что ядро в виде сборки хранят в ресурсах(которое пришлось выгрузить при определённых усилиях на диск) и загружают его динамически в память при загрузке всего приложения, так ещё я так и не смог разобраться примерно в 300 классах которые называются _1, _2, _3, ... _500 и методах _1, _2...
Конечно при определённых усилиях ( на глаз примерно год) можно востанновить весь исходный код. Вопрос будет ли желание у взламывателя потратить столько времени?
 
T

][tiger

#9
Вообще говоря, есть платные решения. Насколько они эффективны - я без понятия.

http://www.desaware.com/products/licensingsystem/index.aspx - desaware licensing system
http://www.dotnetlicensing.com/ - xheo licensing

Есть обфускаторы. 9rays - известный.

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

До сих пор вспоминаю историю с раром. Запаковал я кое-что в рар и отправил в буржуландию своему русскоязычному менеджеру. А он мне - я еще рар не купил, ты перезипуй. А что уже говорить про местных.
 
S

spacelight

#10
>Смешно. А как насчёт 'сборки мусора'? Не думал?
>И вообще смысла не вижу в таких программах? Неуправляемый код тоже можно раскрыть.

>Защищённое приложение можно написать на .net. Защита приложения не кроется в основном в >доступности исходного кода.

Сборка мусора выполняется .net framework-ом.
Происходит только частичная компиляция. Около 5% IL-инструкций.
Вызов откомпиленных кусков - из native DLL.
Эти куски подвергнуты метаморфным и полиморфным преобразованиям.
И перемешаны с кодом проверки соответствия железа активационному коду.
Причем эти проверке неявные.
Поверх я юзаю еще и EXECryptor. (на всякий случай)
Я этот протектор писал для себя.
У меня покупатели - 75% нечестные люди.
А защита уже полгода не взломана.
Хотя на cracklab.ru ее 3 раза просили взломать.

Кому интересно, могу показать. (защищенную прогу)
Но не дам и не продам. (протектор)
 
K

karlito

#11
Кому интересно, могу показать. (защищенную прогу)
Но не дам и не продам. (протектор)
Давай. Можешь на мыло выслать tttqqq@rambler.ru.

Одним из вариантов защиты может быть следующий:
- на машине клиента с помощью ngen.exe компилируем исходную сборку с IL кодом в сборку с машинным кодом
- сборку с IL кодом удаляем
- клиенты работают со сборкой с машинным кодом.

Преимущества:
- увеличение производительности (JIT компилятору не надо больше отрабатывать)
- защита от дурачков (машинный код гораздо труднее декомпилировать)

Недостатки:
- увеличение сложности инсталляции
- это всё таки не защищает от декомпиляции

ВЗЛОМАТЬ МОЖНО ВСЁ, ЗАЩИТА ЗАВИСИТ ОТ ВРЕМЕНИ И СРЕДСТВ, КОТОРЫЕ НЕОБХОДИМО ПОТРАТИТЬ НА ВЗЛОМ.
 
6

62316e

#12
Хай. Может вопрос немного не втему но все же (те я новенький в .НЕТ): Можно как-то посмотреть то что CLR компилит в АСМ? И возможно ли ваще аля какой-то аля, нетоли компилятор чтоли, что бы с IL в Win32 , к примеру, "переганял"?
 
R

Real-Mulik

#14
тут походув тему вопросик есть. Как можно проследить собятие появления нового оборудования в системе? Например чтобя событие срабатывало на подключение флэшки. Подозреваю что делается этот с помощью классов в System.Management, одноко какой именно класс за это отвечает - не могу найти.
 
Статус
Закрыто для дальнейших ответов.