Упаковщики исполняемых файлов в LINUX-BSD

       

сайт группы 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                       ; выходим из обработчика


Содержание раздела