Сегодня получил письмо, в котором меня спрашивают о защите .NET кода от хакеров:
Хотел бы поднять тему защиты приложений .NET. Если у Вас есть возможность и желание, хотелось бы узнать Ваше профессиональное мнение в виде статейки - как лучше защищать коммерческое c# приложение от взлома и пиратства. Прочел много статей об обфускации, но это не панацея. Чем пользуетесь Вы?
Защитить код пока можно только обфускацией или шифрованием, но это действительно не панацея. Шифрование требует дешифровки для выполнения, а значит, можно снять дамп памяти. Обфускация все равно остается вполне читабельной, так что действительно не панацея.
Но давайте посмотрим на классические Win32 приложения. Их код тоже не защищен и тоже читабелен. Код достаточно проблематично защитить, потому что он должен быть читабельным для процессора, иначе его просто будет невозможно выполнить. Наиболее близким к языку процессора является ассемблер, поэтому Win32 программы достаточно легко перевести в ассемблер. Остальные языки более высокоуровневые, поэтому в них переводить машинный код сложнее, но существуют проекты, которые с разной долей успеха дезасемблируют классические Windows приложения до языка С.
В случае с .NET народ больше обеспокоен защитой. Дело в том, что генерируемый им код очень легко переводится обратно в высокоуровневые языки типа C# или VB вообще без потерь информации. Достаточно только выделить в рефлекторе код и скопировать к себе в проект и интеллектуальная собственность оказывается спионизденной. Конечно же никому не хочется потеть месяцами, а потом узнать, что Вася Пупкин взял рефлектором весь ваш код и скомпилировал копию вашей программы и раздает ее бесплатно, или того хуже, зарабатывает деньги. Обидно же.
В принципе, обфускация способно упростить нам жизнь, и немного испортить ее хакеру. Он все так же может спиониздить код, но он будет достаточно неудобен для чтения и поддержки, а значит сложнее будет внести изменения. 100% копию он продавать все равно не сможет. Код программы – самое главное и нужно помнить, что в в некоторых проектах программист читает код на много чаще, чем процессор, поэтому читабельность очень важна.
Еще более качественной защитой является обфускация и шифрования в одном флаконе. И желательно, чтобы дешефратор не дешифровывал всю программу целиком в памяти, иначе слишком легко будет сделать дамп памяти.
Нужно просто помнить, что если хакер захочет, он исследует ваш код. Да, ассемблерный код умеют читать далеко не все, а C# понимает на много большее количество программистов. Но код после обфускации так же достаточно сложен для чтения. Полно программистов не умеют читать плохо написанный код, а хорошо обфусцированный (вот это словечко, интересно вообще как правильно писать его) код они тем более не прочитают.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Больше жизни в постах. Блог интереснее, когда он о Вас, о жизни, а не в виде сухого мнения на избитые темы.
Ну - избитая или нет... но лично меня вот тема очень даже интересует... "как защитить свою интелектульную собственность?"..
Как защитить - попробуйте ILProtector, он делает вирутализацию кода, который раскручивается и выполняется по мере обращения к нему.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.