Безопасность в .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.
![](kg44806a.jpg)
5. Вы, наверно, удивляетесь, почему мы повторяем те же шаги, что в первой и второй части? Если вы заметили, способ взлома Strong Name ключа основан на модификации промежуточного языка (IL). Во второй части мы модифицировали IL, но когда попытались запустить обновленную сборку, получили ошибку. Я объясню, какую именно часть IL необходимо изменить, чтобы избавиться от Strong Name ключа.
6. Открываем CrackinIL.il с помощью любого текстового редактора. Я использовал Блокнот.
![](kg44806b.jpg)
7. Обратите внимание на красные рамки. Можно понять, что любая сборка типа System.Windows.Forms, System и mscrolib содержит свой собственный публичный ключ и номер версии.
8. А у нашей сборки есть публичный ключ? Да. Перед тем как показать его, я вам продемонстрирую два скриншота: один со строгим именем, второй — без.
Без Strong Name:
![](kg44806c.jpg)
Со Strong Name:
![](kg44806d.jpg)
9. Видите, вся разница состоит в том, что сборка с ключом Strong Name содержит публичный ключ. Чтобы получить свободный доступ к подписанной сборке, просто удалите выделенный фрагмент. Это будет выглядеть так:
![](kg44806e.jpg)
10. Сейчас сделаем несколько изменений в существующем коде на IL. Необходимо удалить проверку реестра, чтобы программа больше не предлагала получить лицензию или ключ. Ищем следующий код:
![](kg44806f.jpg)
11. Удаляем весь код между IL_0000 и IL_0075. Вот что у вас должно получиться:
![](kg44806g.jpg)
12. Теперь поменяем немного текста, чтобы доказать, что мы поломали сборку, подписанную строгим именем. Найдите фразу Welcome to NeCoders.
![](kg44806h.jpg)
Замените ее на You are being tampered. Strong Names are useless now! ("Мы тебя поломали. Strong Names теперь бесполезны!").
Вот результат:
![](kg44806i.jpg)
13. Перейдите в консоль и наберите ilasm CrackingIL.il.
![](kg44806j.jpg)
14. Попробуйте запустить CrackingIL.exe. Вот что вы увидите:
![](kg44806k.jpg)
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.
![](kg44806a.jpg)
5. Вы, наверно, удивляетесь, почему мы повторяем те же шаги, что в первой и второй части? Если вы заметили, способ взлома Strong Name ключа основан на модификации промежуточного языка (IL). Во второй части мы модифицировали IL, но когда попытались запустить обновленную сборку, получили ошибку. Я объясню, какую именно часть IL необходимо изменить, чтобы избавиться от Strong Name ключа.
6. Открываем CrackinIL.il с помощью любого текстового редактора. Я использовал Блокнот.
![](kg44806b.jpg)
7. Обратите внимание на красные рамки. Можно понять, что любая сборка типа System.Windows.Forms, System и mscrolib содержит свой собственный публичный ключ и номер версии.
8. А у нашей сборки есть публичный ключ? Да. Перед тем как показать его, я вам продемонстрирую два скриншота: один со строгим именем, второй — без.
Без Strong Name:
![](kg44806c.jpg)
Со Strong Name:
![](kg44806d.jpg)
9. Видите, вся разница состоит в том, что сборка с ключом Strong Name содержит публичный ключ. Чтобы получить свободный доступ к подписанной сборке, просто удалите выделенный фрагмент. Это будет выглядеть так:
![](kg44806e.jpg)
10. Сейчас сделаем несколько изменений в существующем коде на IL. Необходимо удалить проверку реестра, чтобы программа больше не предлагала получить лицензию или ключ. Ищем следующий код:
![](kg44806f.jpg)
11. Удаляем весь код между IL_0000 и IL_0075. Вот что у вас должно получиться:
![](kg44806g.jpg)
12. Теперь поменяем немного текста, чтобы доказать, что мы поломали сборку, подписанную строгим именем. Найдите фразу Welcome to NeCoders.
![](kg44806h.jpg)
Замените ее на You are being tampered. Strong Names are useless now! ("Мы тебя поломали. Strong Names теперь бесполезны!").
Вот результат:
![](kg44806i.jpg)
13. Перейдите в консоль и наберите ilasm CrackingIL.il.
![](kg44806j.jpg)
14. Попробуйте запустить CrackingIL.exe. Вот что вы увидите:
![](kg44806k.jpg)
15. Поздравляю! Теперь нам удалось получить доступ к подписанной сборке.
5. Заключение
Опять-таки, я надеюсь, что эта серия статей была интересной. И эта статья не последняя. Четвертая часть будет теоретической. В ней мы будем рассматривать безопасность в .NET.
Chua Wen Ching. Перевод Алексея Нестерова
Оригинальную версию статьи можно найти по адресу: http://www.codeproject.com/dotnet/NeCoder03.asp
компьютерная газета
Компьютерная газета. Статья была опубликована в номере 48 за 2004 год в рубрике программирование :: разное