сайт группы TESO
Burneye — это экспериментальный протектор, распространяющийся на бесплатной основе. Сначала его исходные тексты были недоступны, но затем (под напором общественности) выложено ~30% от общего объема кода, а затем и весь проект целиком. Все это добро можно скачать с packetstorm'а.
Архив packetstorm.linuxsecurity.com/groups/teso/burneye-1.0-linux-static.tar.gz содержит откомпилированную версию, работающую под LINUX и частично под BSD ("частично" потому что иногда падает), в packetstorm.linuxsecurity.com/groups/teso/burneye-stripped.tar.gz лежит 30% исходных текстов и несколько статей с новыми, но так и не реализованными идеями по усилению защиты, а packetstorm.linuxsecurity.com/groups/teso/burneye-1.0.1-src.tar.bz2 включает в себя все исходные тексты.
Протектор умеет шифровать файлы по алгоритмам SHA1 и RC4, требуя от пользователя пароль при запуске. Теоретически взломать программу можно и без знания пароля (криптография не стоит на месте! и подходящий переборщик можно найти на http://byterage.hackaholic.org/source/UNFburninhell1.0c.tar.gz), но в практическом плане гораздо проще купить одну единственную лицензионную копию, а потом выложить ключ на всеобщее обозрение. Чтобы этого не произошло, в протектор заложена возможность "привязки" к оборудования пользователя (так называемый fingerprint). Это довольно интересная тема, но лучше оставим ее на потом, сосредоточившись исключительно на распаковке.
Burneye состоит из множества вложенных друг в друга расшифровщиков, генерируемых произвольным образом, что впрочем не сильно препятствует его трассировке, поскольку расшифровщики реализованы как процедуры. (Имеющиеся анти-дизассемблерные приемы сводятся к прыжку в середину команды и легко обходится как в IDA Pro, так и в hiew'e).
Во всем протекторе содержится всего один антиотладочный прием, препятствующий трассировке под gdb и отладчиком, интегрированным в IDA Pro.
LOAD:053714A7 mov ebx, 5 ; SIGTRAP
LOAD:053714AC mov ecx, offset anti_handler ; обработчик
LOAD:053714B1 mov edx, 30h ; signal
LOAD:053714B6 mov eax, edx
LOAD:053714B8 int 80h ; signal(SIGTRAP, anti_handler);
LOAD:053714BA add esi, offset word_5375A00
LOAD:053714C0 mov [ebp-2DCh], esi
LOAD:053714C6 int 3 ; Trap to Debugger
LOAD:053714C7 cmp anti_debug, 0 ; если ноль мы под отладчиком
LOAD:053714CE jnz short debugger_not_present
...
LOAD:05371A0C anti_handler: ; обработчик сигнала SIGTRAP
LOAD:05371A0C push ebp ; (получает управление только
LOAD:05371A0D mov ebp, esp ; при запуске без отладчика)
LOAD:05371A0F inc anti_debug ; увеличиваем секретную переменную
LOAD:05371A15 leave
LOAD:05371A16 retn ; выходим из обработчика