.NET секретам
Спецвыпуск: Хакер, номер #066, стр. 066-058-4 AssemblyVersion, AssemblyProduct, AssemblyCopyright, AssemblyCompany, AssemblyKeyFile и т.д. Можно заменить значения этих параметров на свои или совсем удалить их. Вот уже мы добились компилируемости декомпилированных исходников, теперь проверим их работоспособность ;). Добавляем в Solution любой из примеров, поставляемых вместе с компонентом (я предпочел Showcase — он более наглядный и показывает почти все способности компонента), так что если допустим ошибку, симптомы ее присутствия будут видны. Запустив пример, я не увидел никаких проблем, значит, восстановление исходного кода можно считать успешным :). [вторым примером] станет Grid-компонент от компании Janus (www.janusys.com/controls). Тело контрола было обфусцировано, но только в части кода, помеченной атрибутами доступа private и internal. Все public-методы и классы остались в первозданном виде :) — благодаря этому контролу разработчики должны видеть нормальные названия классов и полей классов. Нам только на руку! Первые ошибки, которые попадают в твое поле зрения после декомпиляции, — это множественные ошибки ресурсов, связанные с тем, что декомпилятор создает отдельные папки для каждого пространства имен, а классы, входящие в них, складывает в эти папки, но почему-то он забывает складывать в них ресурсы. Классы, производные от System.Windows.Forms.Control или System.Windows.Forms.Form, могут иметь свой файл ресурса, и он должен располагаться в той же папке, где и сам класс. Следовательно, единственное оставшееся для нас действие — разложить файлы ресурсов в соответствующие папки. Например, нужно положить ресурс Janus.Windows.GridEX.EditControls.Calendar.JNSAB.resx в папку \Janus\Windows\GridEX\EditControls\Calendar (относительно корневой папки проекта), а сам ресурс — переименовать в JNSAB.resx. После исправления этих ошибок наваливается новая куча из них — связанная с обфускацией кода. Пример ошибки: private void l(object, EventArgs args1). Здесь пропущено название первого параметра. Наверное, этот эффект достигается переименованием названия параметра в пробел, а если параметров два — переименованием в два пробела, и т.д. Такой способ обфускации не был известен мне. Сначала я решил исправлять эти ошибки вручную. Исправил одну — вдруг появилось десять таких же. Коварная Studio почему-то не показывает все ошибки сразу, а выдает их порциями. Складывается такое впечатление, что они создаются в процессе :). В общем, в коде сидит не менее пятисот подобных ошибок, и править их руками — утомительное дело. Вот я и решил автоматизировать процесс, написав макрос (листинг 3). Imports EnvDTE Imports System.Diagnostics Imports System.Collections Public Module Module1 Sub CheckErrors() Dim al As ArrayList = ListProj() For i As Integer = 0 To al.Count - 1 Dim pr As ProjectItem = al(i) Dim n As String = pr.Name For j As Integer = 1 To pr.FileCodeModel.CodeElements.Count Dim code As CodeElement = pr.FileCodeModel.CodeElements.Item(j) Dim ep As EditPoint = code.StartPoint.CreateEditPoint() |