Дизассемблирование .NET приложений.
Как известно, любую .NET программу, или библиотеку можно дизассемблировать, используя .NET reflector. Ну что б не боятся взлома программы, можно использовать обфускацию, или же очень закручено писать код. Об этом в данном посте я писать не буду, поскольку уже есть подобная информация в источниках, приведённых ниже:
http://msug.vn.ua/blogs/lexremablog/archive/2008/11/18/tricks-msil.aspx
http://msug.vn.ua/blogs/vusov/archive/2008/12/15/net-reflector.aspx
Я хочу рассказать в посте о сравнении кода до дизассемблирования и после.
Для этого я написал простейший тестовые пример ( можно взять в приатаченом файле MiniHackingUI.zip), в котом есть два dll проекта и один WinForms проект. В одной dll-ке хранится текст, в другой - функция, которая показывает этот текст через MessageBox, а у WinFrom окне одна кнопка, при нажатие на какую мы вызовем функция для показа MessageBox из dll.
Что я делал дальше, после того, как создал тестовый solution и сделал его rebuild? Начал дизассемблировать файлы:
MiniHackingUI.exe
MiniHackingUI.ShowMessage.dll
MiniHackingUI.TextContent.dll
сохраняя полученный код в отдельную папку. С dll-ками не было никаких проблем. С первого раза они сребилдились ОК, и я их скопировал в output папку для MiniHackingUI, что б не добавлять refences вручную.
Проект MiniHackingUI скомпилился, но рефлектор задал ему тип проекта "Class Library", вместо требуемого "Windows Application". Поменяв это вручную я смог запустить приложение. Рыботает пример без вылетов, внешний вид окна не изменился. К сожалению пропали мои комментарии в дизассемблированном коде. Также еще одна проблемка все же осталась - не могу в дизайнере форм открыть форму окна для редактирования, пока нету времени на поиск причины, позже попробую разобраться и написать об этом. На рисунке ниже можно увидеть как изменилась структура папок в проекте.
Как видим, поменялось немного.
В результате, у меня получилось восстановить рабочие исходники из Release файлов. Надеюсь с реальными большими приложениями все будет так же просто.