домашняя создания JunkCode – создателя шифровщика ELFCrypt
Шифрует кодовую секцию (которой как правило является .text) и встраивает в elf-файл крохотный расшифровщик, возвращающий ее в исходный вид. Не содержит никаких антиотладочных приемов и замечательно распаковывается под отладчиком типа gdb или ald:
:entrypoint
.080495DC: EB02 jmps .0080495E0 ; переходим на расшифровщик
.080495DE: 06 push es ; \ мусор, оставленный...
.080495DF: C6 ??? ; / ...транслятором ассемблера
.080495E0: 60 pushad ; сохраняем все регистры в стеке
.080495E1: 9C pushfd ; сохраняем флаги в стеке
.080495E2: BEC0820408 mov esi, 0080482C0 ; начало расшифровываемого фрагмента
.080495E7: 8BFE mov edi, esi ; EDI
:= EDI
(расшифровка на месте)
.080495E9: B978000000 mov ecx, 000000078 ; кол-во двойных слов для расшифровки
.080495EE: BBBD03CC09 mov ebx, 009CC03BD ; ключ расшифровки
.080495F3: AD lodsd ; читаем очередной двойное слово <-----+
.080495F4: 33C3 xor eax,ebx ; расшифровываем через xor |
.080495F6: AB stosd ; записываем результат на место |
.080495F7: E2FA loop .0080495F3 ; мотаем цикл -------------------------+
.080495F9: 9D popfd ; восстанавливаем флаги из стека
.080495FA: 61 popad ; восстанавливаем все регистры
.080495FB: BDC0820408 mov ebp, 0080482C0 ; адрес оригинальной точки входа (OEP)
.08049600: FFE5 jmp ebp ; передаем управление расшифрован. коду