Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

.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()

Назад на стр. 066-058-3  Содержание  Вперед на стр. 066-058-5