Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Виртуальная машина на страже порядка

GPcH

Хакер, номер #077, стр. 077-106-2


Но тут я тебя обрадую, бесплатных декомпиляторов, способных разобрать программу до самого исходника - нет, а коммерческие стоят так дорого, что крэкеру они будут просто не по карману. Да и интереса у него не будет покупать этот декомпилятор, так как шаровар, скомпилированных в p-код, в сети крайне мало.

Я надеюсь, тебе стало интересно, что же такого визуальный бэйсик наворотил в exe-файле, что программа стала работать на p-коде? Давай посмотрим.

Точка входа в программе будет выглядеть так:

push offset VB_Header

call MSVBVM60.DLL::ThunRTMain

Любая программа, написанная на VB, начинает свою работу с функции ThunRTMain. Единственный параметр, который ей передается - ссылка на VB_Header, структуру, полностью описывающую настройки программы, содержащиеся в ней функции и ссылки на таблицу переходников импорта, а также ссылки на массивы форм. В этих структурах для описания объектов форм активно используется технология COM, понятная интерпретатору VB.

Самое главное, что нужно функции ThunRTMain понять из этих структур – это во что откомпилирована программа. Если в p-код, то VB подключает к работе свой интерпретатор, иначе же настраивает объекты и передает управление main-функции программы. Ты не подумай ничего плохого, интерпретатор тоже, в конечном счете, будет выполнять main, но она же будет в виде промежуточного кода! А выполнение промежуточного кода – это отнюдь не то же самое, что и запуск native. Каждый, даже самый маленький кусочек p-кода будет выполнен в самом движке, что чрезвычайно затруднит отладку программы крэкером, так как, по сути, ему придется отлаживать не программу, а виртуальную машину. Это если браться за дело с каким-нибудь стандартным отладчиком вроде Olly или SI.

К великой радости крэкера для p-кода существует специальный отладчик (не декомпилятор), который даст возможность взломщику не париться с отладкой интерпретатора, а мучать сразу промежуточный код. Более того, он бесплатен! Но, честно говоря, он не сильно упрощает взлом программы. Отладчик этот довольно глючный, а распакованные программы вообще отказывается отлаживать, потому не забудь перед релизом сжать программу любым EXE упаковщиком, например FSG или nSpack'ом, чтобы крэкеру уж совсем хреново было.

В общем, если ты пишешь программы на VB, не забывай об этой хорошей возможности защитить свой код.

[виртуальная машина .NET]

На платформе .NET на каком бы ты языке не писал, твоя программа будет компилироваться в интерпретируемый код. Если в VB 6.0 библиотека интерпретатора (виртуальная машина), требуемая твоей программе после ее компиляции занимала 1.3 Мб, то здесь разработчики пошли дальше - .NET Framework занимает целых 20 мегов. Если его нет на машине клиента, то программы, написанные для платформы .NET работать не будут. Интерпретируемый язык этой платформы называется IL (сокращение от Intermediate Language) и значительно лучше реализован, чем бэйсиковский p-код. На данный момент существуют несколько декомпиляторов IL (в том числе и моя любимая Ida Pro – прим. Горл), которые без особого геморроя переведут exe-файл твоей программы в исходник, поэтому не защита программы получится, а наоборот. Хотя авторы компилятора тоже не лохи, они сделали две примочки, чтобы ухудшить жизнь крэкеру:

Назад на стр. 077-106-1  Содержание  Вперед на стр. 077-106-3