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

домашняя создания 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           ; передаем управление расшифрован. коду



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