Безопасность в .NET. Часть III. Ломаем Strong Name
Безопасность в .NET. Часть III. Ломаем Strong Name
NeCoders не несут ответственности за любые случаи взлома программного обеспечения или отдельных файлов с помощью информации, предоставленной в данной статье.
1. Введение
Рад снова вас видеть. В этой статье я поделюсь с вами способом взлома подписанных сборок. Обязательно прочитайте первую и вторую части перед тем, как продолжить.
2. Сомнения относительно Strong Name
Я просто уверен, что у многих из вас есть сомнения по поводу того, смогут ли строгие имена действительно защитить сборку от постороннего вмешательства. В этой статье мне бы хотелось поделиться с вами своими мыслями.
Вопрос: Ключ Strong Name безопасен?
Ответ: Да, Strong Name ключ получен с помощью 1024-битного RSA-шифрования.
Вопрос: Возможно ли подобрать ключ Strong Name?
Ответ: Если у вас достаточно вычислительной мощности, времени и знаний, то ответ положительный.
Вопрос: Может ли ключ Strong Name быть удален из сборки?
Ответ: Да, даже очень просто, особенно если вы знаете, как.
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. Вам понадобится исполняемый файл CrackingIL.exe в его первозданном виде с проверкой подлинности серийного номера в реестре, а также подписанный строгим именем (этот процесс описан во второй части).
2. Открываем консоль Visual Studio .NET 2003.
3. Переходим в директорию CrackingIL/ bin/Debug.
4. Пишем ildasm CrackingIL.exe /out= CrackingIL.il.

5. Вы, наверно, удивляетесь, почему мы повторяем те же шаги, что в первой и второй части? Если вы заметили, способ взлома Strong Name ключа основан на модификации промежуточного языка (IL). Во второй части мы модифицировали IL, но когда попытались запустить обновленную сборку, получили ошибку. Я объясню, какую именно часть IL необходимо изменить, чтобы избавиться от Strong Name ключа.
6. Открываем CrackinIL.il с помощью любого текстового редактора. Я использовал Блокнот.

7. Обратите внимание на красные рамки. Можно понять, что любая сборка типа System.Windows.Forms, System и mscrolib содержит свой собственный публичный ключ и номер версии.
8. А у нашей сборки есть публичный ключ? Да. Перед тем как показать его, я вам продемонстрирую два скриншота: один со строгим именем, второй — без.
Без Strong Name:

Со Strong Name:

9. Видите, вся разница состоит в том, что сборка с ключом Strong Name содержит публичный ключ. Чтобы получить свободный доступ к подписанной сборке, просто удалите выделенный фрагмент. Это будет выглядеть так:

10. Сейчас сделаем несколько изменений в существующем коде на IL. Необходимо удалить проверку реестра, чтобы программа больше не предлагала получить лицензию или ключ. Ищем следующий код:

11. Удаляем весь код между IL_0000 и IL_0075. Вот что у вас должно получиться:

12. Теперь поменяем немного текста, чтобы доказать, что мы поломали сборку, подписанную строгим именем. Найдите фразу Welcome to NeCoders.

Замените ее на You are being tampered. Strong Names are useless now! ("Мы тебя поломали. Strong Names теперь бесполезны!").
Вот результат:

13. Перейдите в консоль и наберите ilasm CrackingIL.il.

14. Попробуйте запустить CrackingIL.exe. Вот что вы увидите:

15. Поздравляю! Теперь нам удалось получить доступ к подписанной сборке.
5. Заключение
Опять-таки, я надеюсь, что эта серия статей была интересной. И эта статья не последняя. Четвертая часть будет теоретической. В ней мы будем рассматривать безопасность в .NET.
Chua Wen Ching. Перевод Алексея Нестерова
Оригинальную версию статьи можно найти по адресу: http://www.codeproject.com/dotnet/NeCoder03.asp
компьютерная газета
NeCoders не несут ответственности за любые случаи взлома программного обеспечения или отдельных файлов с помощью информации, предоставленной в данной статье.
1. Введение
Рад снова вас видеть. В этой статье я поделюсь с вами способом взлома подписанных сборок. Обязательно прочитайте первую и вторую части перед тем, как продолжить.
2. Сомнения относительно Strong Name
Я просто уверен, что у многих из вас есть сомнения по поводу того, смогут ли строгие имена действительно защитить сборку от постороннего вмешательства. В этой статье мне бы хотелось поделиться с вами своими мыслями.
Вопрос: Ключ Strong Name безопасен?
Ответ: Да, Strong Name ключ получен с помощью 1024-битного RSA-шифрования.
Вопрос: Возможно ли подобрать ключ Strong Name?
Ответ: Если у вас достаточно вычислительной мощности, времени и знаний, то ответ положительный.
Вопрос: Может ли ключ Strong Name быть удален из сборки?
Ответ: Да, даже очень просто, особенно если вы знаете, как.
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. Вам понадобится исполняемый файл CrackingIL.exe в его первозданном виде с проверкой подлинности серийного номера в реестре, а также подписанный строгим именем (этот процесс описан во второй части).
2. Открываем консоль Visual Studio .NET 2003.
3. Переходим в директорию CrackingIL/ bin/Debug.
4. Пишем ildasm CrackingIL.exe /out= CrackingIL.il.

5. Вы, наверно, удивляетесь, почему мы повторяем те же шаги, что в первой и второй части? Если вы заметили, способ взлома Strong Name ключа основан на модификации промежуточного языка (IL). Во второй части мы модифицировали IL, но когда попытались запустить обновленную сборку, получили ошибку. Я объясню, какую именно часть IL необходимо изменить, чтобы избавиться от Strong Name ключа.
6. Открываем CrackinIL.il с помощью любого текстового редактора. Я использовал Блокнот.

7. Обратите внимание на красные рамки. Можно понять, что любая сборка типа System.Windows.Forms, System и mscrolib содержит свой собственный публичный ключ и номер версии.
8. А у нашей сборки есть публичный ключ? Да. Перед тем как показать его, я вам продемонстрирую два скриншота: один со строгим именем, второй — без.
Без Strong Name:

Со Strong Name:

9. Видите, вся разница состоит в том, что сборка с ключом Strong Name содержит публичный ключ. Чтобы получить свободный доступ к подписанной сборке, просто удалите выделенный фрагмент. Это будет выглядеть так:

10. Сейчас сделаем несколько изменений в существующем коде на IL. Необходимо удалить проверку реестра, чтобы программа больше не предлагала получить лицензию или ключ. Ищем следующий код:

11. Удаляем весь код между IL_0000 и IL_0075. Вот что у вас должно получиться:

12. Теперь поменяем немного текста, чтобы доказать, что мы поломали сборку, подписанную строгим именем. Найдите фразу Welcome to NeCoders.

Замените ее на You are being tampered. Strong Names are useless now! ("Мы тебя поломали. Strong Names теперь бесполезны!").
Вот результат:

13. Перейдите в консоль и наберите ilasm CrackingIL.il.

14. Попробуйте запустить CrackingIL.exe. Вот что вы увидите:

15. Поздравляю! Теперь нам удалось получить доступ к подписанной сборке.
5. Заключение
Опять-таки, я надеюсь, что эта серия статей была интересной. И эта статья не последняя. Четвертая часть будет теоретической. В ней мы будем рассматривать безопасность в .NET.
Chua Wen Ching. Перевод Алексея Нестерова
Оригинальную версию статьи можно найти по адресу: http://www.codeproject.com/dotnet/NeCoder03.asp
компьютерная газета
Компьютерная газета. Статья была опубликована в номере 48 за 2004 год в рубрике программирование :: разное