дизассемблерный листинг
Достаточно просто установить точку сразу же за концом расшифровщика (в данном случае она расположена по адресу 80495F9h) после чего в нашем распоряжении окажется расшифрованный elf с которого можно снять дамп. В случае с dbg последовательность команд будет выглядеть приблизительно так:
root@5[elf_crypt]#objdump -f elfcrypt-demo # определяем точку входа в файл
elfcrypt-demo: формат файла elf32-i386
архитектура: i386, флаги 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
начальный адрес 0x080495dc
root@5[elf_crypt]# gdb elfcrypt-demo
(gdb) b *0x80495DC # ставим точку останова на точку входа
Breakpoint 1 at 0x80495dc
gdb) r # пускаем программу
Starting program: /home/elf_crypt/elfcrypt-demo
Breakpoint 1, 0x080495dc in ?? () # сработала точка останова
(gdb) display/i $pc # говорим отображать команды ассемблера
1: x/i $pc 0x80495dc: jmp 0x80495e0
(gdb) si # начинаем трассировать программу
0x080495e0 in ?? ()
1: x/i
$pc 0x80495e0: pusha # продолжаем трассировать
...
0x080495f7 in ?? ()
1: x/i $pc 0x80495f7: loop 0x80495f3 # видим
цикл
(gdb) b *0x80495F9 # ставим точку останова за его концом
Breakpoint 2 at 0x80495f9
(gdb) c # запускаем программу "вживую"
Continuing.
Breakpoint 2, 0x080495f9 in ?? () # точка останова достигнута
1: x/i
$pc 0x80495f9: popf # программа расшифрована! кушать подано!