Безопасность в .NET. Часть II. Защищаем сборку от несанкционированного доступа

Безопасность в .NET. Часть II. Защищаем сборку от несанкционированного доступа

Продолжение. Начало в КГ №46.

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

1. Введение
Перед прочтением второй части рекомендую обратиться к первой, т.к. они взаимосвязаны. В этой статье я покажу, как защитить сборку от несанкционированного доступа. Я надеюсь, вы слышали о цифровой подписи. В общем, вы можете прикрепить Strong Name (строгое имя) к своей сборке, чтобы защитить ее от подделывания. Ключ Strong Name основан на 1024-битном RSA-шифровании, и взломать его совсем не просто. У вас должна быть огромная вычислительная мощность, чтобы добыть себе приватный ключ.

2. Что за Strong Name?
Когда я первый раз услышал этот термин, я даже не догадывался, что он мог означать.

2.1. Ситуация первая
Не знаю, оказывались ли вы в подобной ситуации, но вот что вышло со мной. Не так давно я подумывал о защите своих .NET-сборок. Те статьи, которые мне доводилось читать, рекомендовали использовать Strong Name ключи. После ознакомления с преимуществами их использования этот вопрос все равно остался для меня неясным.
Я продолжал гадать, что же такого особенного в этих т.н. строгих именах? Вы спросите, почему? Да потому, что меня терзали смутные сомнения по этому поводу. Я не мог ни зашифровать свой код, ни спрятать его от таких декомпиляторов, как .NET Reflector. Это даже не имело никакого отношения к обфускации. Так для чего же тогда нужны строгие имена? Маркетинговый ход, чтобы убедить публику в безопасности сборок?

2.2. Ситуация вторая
Приходит ваш начальник и просит подписать ваши сборки строгим именем. А когда вы спросите, зачем, он скажет, что так делают все, и мы не должны от них отставать.

3. Тестовая машина
· Windows XP Professional Edition SP 1.
· Intel Pentium 4 2,6 GHz.
· 256 Mb DDR RAM.
· Visual Studio .NET 2003 Professional Edition.
· Microsoft .NET Framework 1.1.

4. Приступаем к делу
Сегодня я покажу вам, как подписать сборку строгим именем.

1. Открываем консоль Visual Studio .NET 2003 и идем в ту директорию, где лежат исходные файлы или файлы решения.

2. Пишем sn -k sn.key.



3. Strong Name было успешно создано. Как же его "прицепить" к нашей программе?

4. Открываем исходный код файла Assembly-Info.cs решения CrackingIL и вводим следующий код вместо атрибута Assembly KeyFile:
[assembly: AssemblyKeyFile(@"..\..\sn.key")]

5. Компилируем проект и запускаем по F5 в Visual Studio .NET 2003.

6. Теперь перейдем в консоль и вобьем ildasm CrackingIL.exe /out=CrackingIL.il.



7. Открываем CrackingIL.il любым текстовым редактором. Я выбрал Блокнот.

8. Ищем вот эту строку:



9. Меняем ее с Welcome to NeCoders на I can't crack you, why!? (Я не могу тебя сломать, почему?!)



10. Сохраняем файл. В консоли набираем ilasm CrackingIL.il.



11. Запускаем CrackingIL.exe.



Вы также увидите еще и это:



12. Мы с вами на практике убедились, что нельзя просто так изменять чью-то подписанную сборку и компилировать ее обратно. Поздравляю, мы успешно защитили нашу сборку с помощью Strong Name.

5. Заключение
Я надеюсь, что из этой статьи вы получили краткое представление о строгих именах и о том, как они помогают защитить сборку в .NET. Третья часть уже ждет вас.

Chua Wen Ching. Перевод Алексея Нестерова
Оригинальную версию статьи можно найти по адресу: http://www.codeproject.com/dotnet/NeCoder02.asp


компьютерная газета


Компьютерная газета. Статья была опубликована в номере 47 за 2004 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета