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

недетское вскрытие .NET

N|M{INT3 TEAM}{NIM@INT3.RU}

Спецвыпуск: Хакер, номер #066, стр. 066-044-3


В этой статье я часто говорю о «номерах строк». Если какие-то строки будут удалены, то, соответственно, и нумерация строк изменится. Наше исследование начинается с того, что мы обнаруживаем в конструкторе C1TrueDBGrid вот такую строку:

this.0WB = LicenseManager.Validate(typeof(C1.Win.C1TrueDBGrid.C1TrueDBGrid), this);

Здесь контрол использует стандартные возможности проверки лицензии с помощью класса System.ComponentModel.LicenseManager. Как видно из вызова, результат присваивается приватному полю класса private License 0WB. Чтобы упростить задачу по выявлению всех участков кода, которые обращаются к этому полю, мы просто удалим его. К сожалению, компилятор не выдает нам ошибки в местах, где используется данное поле, но когда запустим приложение, ошибки выявятся.

Открою несколько секретов быстрой навигации по IL-коду в VS2003. Зайти в меню Edit> Find & Replace> Find или просто нажать <Ctrl>+<F>, поставив галочку в пункте Use. Выбрать в combo-box’е опцию Wildcards (что-то вроде языка подстановочных символов в поисковике файлов Win). Теперь, чтобы найти наш класс, мы вводим такой запрос: [.]class*C1TrueDBGrid. И оказываемся в начале класса. Необходимое нам поле находится ниже. По запросу [.]field*0WB находим его в строке 74357, закомментируем его, а заодно найдем и закомментируем заполнение этого поля в конструкторе класса [.]class*C1TrueDBGrid -> [.]method.

Здесь есть два обращения к этому полю. При первом полю присваивается null. Тут комментируем строки IL_00ae*IL_00b0 (здесь и далее знак * указывает, что нужно комментировать все строки между этими метками включительно). Во втором обращении происходит заполнение поля объектом License, о чем я уже говорил. Комментируем IL_00c6*IL_00d7. Компилируем, запускаем — и ого! Trial’ное окно больше не появляется.

[вот самый быстрый взлом] .NET-компонента из всех проделанных мной. Прошло около трех минут! Оказалось, что взятое мной поле не используется нигде больше. Теперь, пожалуй, стоит немного почистить компонент от мусора. Первая вещь, которая относится к мусору, — это сама trial’ная форма.

Второе зло — trial’ное окно. Когда в дизайнере формы мы добавляем контрол на форму, после щелчка на нем правой кнопкой мыши можно увидеть в контекстном меню элемент About ComponentOne C1TrueDBGrid. При его выборе появляется trial’ное окно, которое мы и собрались удалить.

Самый быстрый и легкий способ узнать, какой класс создает окно, — сделать бряк в тот момент, когда оно появилось, то есть нужно просто перейти в отладчик и нажать <Ctrl>+Break. Итак, возвращаем все изменения, сделанные нами в методе C1TrueDBGrid::.ctor, и запускаем. Когда же появится trial’ное окно, брякаем. Чтобы узнать, в каком классе мы оказались, делаем SerchUP [.]class -> [.]NameSpace.

Назад на стр. 066-044-2  Содержание  Вперед на стр. 066-044-4