Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7646 / 472 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 9:

Создание пакетов установки

Защита сборок. Утилита ilasm.exe

Главное преимущество использования сборок, подписанных строгим именем, — защита их от декомпиляции. Запустим снова утилиту ildasm.exe и откроем приложение, выводящее на экран строку Hello World — SimpleApp. В меню "Файл" выбираем пункт Dump (или просто нажимаем Ctrl+D). В появившемся окне Dump options оставляем значения без изменений и нажимаем OK. Называем новый файл SimpleAppCrack.il и сохраняем его При этом мы сохранили содержимое нашего приложения в виде кода MSIL. Закрываем утилиту ildasm.exe.

Открываем файл SimpleAppCrack.il с помощью блокнота и изменяем строку Hello World на Hello World Cracked (рис. 9.8).

 Изменение MSIL-кода

увеличить изображение
Рис. 9.8. Изменение MSIL-кода

Сохраняем файл и закрываем его. Теперь нам нужно преобразовать MSIL код в исполняемый exe-файл. Для этого воспользуемся еще одной утилитой — ilasm.exe. В командной строке Visual Studio .NET набираем название утилиты и путь к файлу с MSIL-кодом (рис. 9.9):

ilasm.exe Путь к файлу\файл.il
Использование утилиты ilasm.exe для преобразования кода MSIL в исполняемый exe-файл

увеличить изображение
Рис. 9.9. Использование утилиты ilasm.exe для преобразования кода MSIL в исполняемый exe-файл

В папке с исходным файлом SimpleAppCrack.il появится файл SimpleAppCrack.EXE. Для просмотра его содержимого в командной строке указываем путь к нему и его название (рис. 9.10).

Запуск измененного файла SimpleAppCrack.EXE

увеличить изображение
Рис. 9.10. Запуск измененного файла SimpleAppCrack.EXE

Скопируйте всю папку с приложением SimpleApp и назовите его ProtectedSimpleApp. Откроем приложение и подпишем сборку строгим именем StrongKey.snk. Далее проделаем те же самые действия и попытаемся запустить измененный файл — появляется исключение System.IO.FileLoadExeption (рис. 9.11).

Ошибка при попытке запустить измененную сборку, подписанную строгим именем

увеличить изображение
Рис. 9.11. Ошибка при попытке запустить измененную сборку, подписанную строгим именем

На диске, прилагаемом к книге, вы найдете приложение ProtectedSimpleApp (Code\Glava9\ ProtectedSimpleApp).

Утилита .NET Reflector. Как вскрывать защищенные сборки

При использовании утилиты ildasm.exe бросается в глаза аскетичный дизайн приложения и неудобство работы с ней. Невозможность изменения размеров информационной панели сборки, расположенной внизу программы, открытие блоков кода в отдельных окнах, отображение только MSIL-кода наводит на мысль, что разработчики среды .NET сознательно оставили минимальную функциональность приложения для сведения общения с ним пользователей к минимуму. Программа .NET Reflector (версия 4.1.84.0) — единственный существующий браузер классов .NET-компонент, позволяющий просматривать метаданные, IL-инструкции и XML-документацию сборок, а также декомпилировать их, – гораздо более удобная утилита. Она имеет статус freeware, поэтому вы можете найти ее на диске, прилагаемом к книге, — Code\Glava9\ Reflector.zip, или скачать с сайта разработчика — http://www.aisto.com/roeder/dotnet. Рассмотрим, как просмотреть содержимое сборки, подписанной строгим именем, и использовать код в своих целях. Запустим программу, откроем пункт меню File\Open и выберем файл ProtectedSimpleAppCrack.EXE, который нам не удалось запустить (см. рис. 9.11). Выделив название сборки, на панели Disassembler увидим содержимое значение атрибутов [assembly] (если у вас не открыта панель Disassembler, выберите Tools/Disassembler) (рис. 9.12).

Главное окно программы .NET Reflector, на панели Disassembler выведены значения атрибутов [assembly]

увеличить изображение
Рис. 9.12. Главное окно программы .NET Reflector, на панели Disassembler выведены значения атрибутов [assembly]

Обратите внимание на параметр AssemblyKeyFile панели Disassembler — мы действительно работаем со сборкой, подписанной строгим именем! Каждый объект, отображаемый на панели, является ссылкой, щелкая на которую, мы переходим к соответствующему классу. Открыв окно Options — в пункте меню View\Options, можно выбрать язык отображения объектов, что является своеобразным переводчиком (рис. 9.13)!

Выбор языка в окне Options

Рис. 9.13. Выбор языка в окне Options

Выбрав язык C# и перемещаясь по объектам любой сборки, можно копировать и вставлять код прямо в свой листинг (рис. 9.14).

Представление кода сборки на языке C#

увеличить изображение
Рис. 9.14. Представление кода сборки на языке C#

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

Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/