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

штурм зимнего .net'а

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

Спецвыпуск: Хакер, номер #065, стр. 065-042-5


Нам необходимо добиться, чтобы код выполнился внутри этого условия. Сразу после условия идет вызов ab.'at'::get_afy(). В такой функции нет ничего интересного, поэтому мы начинаем интересоваться серией переходов (ab.'at'::get_afy()->ab.au::af6(bool, bool)->ab.au::af8(class jungle.Deploy.NET.Launcher.Licensing.License, bool, bool)) — внимательно посмотри эту функцию в Reflector'е. Не знаю, что увидел ты, но я первым делом рассмотрел там: byte[] buffer2 = reader2.ReadBytes(num1); :). Вот и первая хитрая функция, извлекающая из ресурсов стандартную лицензию (ее я тоже запишу на диск). В этом загрузчике присутствуют всего три такие функции: для извлечения лицензии, конфигурации и шифрованной программы. Им соответствуют ресурсы: jungle.Deploy.NET.Launcher.License.resources, jungle.Deploy.NET.Launcher.Configuration.resources, jungle.Deploy.NET.Launcher.Archive.resources. Им же соответствуют функции для расшифровки: ab.au::af8(class jungle.Deploy.NET.Launcher.Licensing.License, bool, bool)), ab.au::af5(bool __0, bool __1), ab.ax::agz(Hashtable __0).

Остальные функции я нашел банальным поиском текста «MemoryStream stream3» — вряд ли автор стал бы писать разный алгоритм для этих трех функций. Copy-paste нам в помощь, товарищи :).

Как я узнал, что функции имеются в количестве всего трех штук? Дело в том, что эти три ресурса имеют нестандартный формат и редактор ресурсов .NET ругается на них. Когда знаешь, что ищешь, обязательно найдешь ;). Кроме того, из криптоколлекции строк в этих функциях извлекаются названия ресурсов, с которыми они работают, — так лишний раз подтвердилось, что я определил их правильно.

Вернемся к необфусцированному классу Licensing. Как я и предполагал, этот класс — просто мусор, и его патчинг не дал положительных результатов. Класс Licensing применяется в загрузчике, но использование идет вхолостую, поэтому перед распаковкой оригинального exe я попытался найти главную форму в загрузчике, чтобы пропатчить в ней trial'ные ограничения (в тот момент я не был полностью уверен, что имею дело с загрузчиком, а не с самой программой).

После распаковки выяснилось, что в ....Archive.resources лежат четыре файла: оригинальный exe и три dll. Для распаковки я создал метод DecryptResurceLauncherArchive, который доступен в том же месте, что и DumpCryptedStrings.

Назад на стр. 065-042-4  Содержание  Вперед на стр. 065-042-6