В последнее время наблюдается рост коммерческих приложений в Linux. Таким образом, возникает потребность в реинженеринге защитных механизмов в новых условиях. Крекеры, пришедшие с Windows не находят удобных инструментов, да и «родные» не знают о многих из них.
В данном обзоре я постараюсь восполнить информацию об инструментах крекера в Linux. Статья не претендует на полноту, эксклюзивность и ориентирована на новичков. (поиск юзал, такой темы не нашел)
Анализаторы файлов
Прежде чем ломать программу, необходимо проанализировать ее. Для этих целей служат следующие программы:
file - Показывает информацию о файле: тип, архитектуру, факт использования разделяемых библиотек, была ли удалена символьная информация командой strip.
nm - Выводит таблицу внешних символов. Показывает имена переменных, функций, метки. (Это справедливо только для файлов, не обработанных командой strip)
size - Выводит размеры всех секций программы (при указании флага -А).
strings - Выводит все текстовые строки, содержащиеся в файле. Бывает очень полезна при поиске регистрационных кодов, хранящихся в открытом виде. (на практике все еще попадается такая слабая защита).
ldd - Показывает зависимости программы от динамических библиотек. Программистам пользы больше, чем крекерам.
readelf - Исследует файл. Выводит намного больше информации, чем команда file. Показывает тип файла, архитектуру, точку входа и другие не менее важные для крекера данные. Просматривает содержимое секций ELF-файла.
Дизассемблеры
Objdump - Больше, чем просто дизассемблер. Показывает заголовки программы, секции файла (флаг -х), дизассемблирует файл (флаг -D), показывает содержимое секций в шестнадцатеричном виде (флаг -s), и т.д.
Замечание. При дизассемблировании файла, лучше скидывать листинг в файл: objdump -D > ./file, чтобы хоть как-то уменьшить вероятность вывиха обеих глаз.
Dissy - «Обертка» для утилит nm, readelf и objdump. (из-за этого файлы без символьной информации не анализируются)
Имеет графический интерфейс, работать намного приятнее, чем с objdump. Главное окно разделено на две части, в верхней – имена функций, в нижней – их дизассемблерный листинг. Программа показывает переходы, осуществляет навигацию по ним и по вызовам процедур.
Lida (Linux Interactive DisAssembler) - Довольно интересный дизассемблер, включающий в себя модули поиска по строкам, криптоанализ, возможность ставить закладки и пр.
LDasm (Linux Disassembler) - Еще одна оболочка для objdump/binutils, написанная на Perl/Tk. По словам автора, "to imitate the look'n'feel of W32Dasm" Так что не мешает ознакомиться. К сожалению, не обновлялся с декабря 2002 года.
Bastard - Дизассемблер под Linux&FreeBSD, понимаетELF/PE/bin-форматы.
Шестнадцатеричные редакторы
Отобразить в шестнадцатеричном виде файлы могут утилиты objdump, hexdump, od.
KHexEdit - Входит в среду KDE. Имеет графический интерфейс.
Bless - Написанный на моно шестнадцатеричный редактор. Поддерживает вкладки.
Biew - Консольный редактор. Позволяет просматривать и редактировать файлы в текстовом, шестнадцатеричном, ассемблерном виде.
HTE - Также консольный редактор, но функционально на голову выше прочих. Дизассемблирует файлы, поддерживает перекрестные ссылки, указывает имена функций и пр.
В Linux достаточно много шестнадцатеричных редакторов, я указал лишь самые интересные (на мой взгляд).
Дамперы
В случае, когда программа запакована, необходимо снять дамп памяти с запущенного процесса.
Я нашел только два достойных дампера.
PD (by ilo) - Опубликованный в журнале Phrack. Мне так и не удалось получить запускаемый дамп с помощью этой программы.
Process Dumper (pd) - Программа довольно неплохо снимает дамп с запущенных процессов. Запуск:
pd -p pid > dump
Далее нужно обработать файл напильником. Например, в KHexEdit. Удаляем символьный мусор до заголовка. Таким образом мне получилось сделать запускающийся дамп с программой, запакованной UPX.
Отладчики
gdb и все, все, все (графические оболочки) - Довольно мощный отладчик, но при работе можно вывихнуть руки (А без рук и без глаз какой же вы крекер?). Работать с ним довольно сложно, но можно. Вердикт: для гуру.
EDB - Сравнительно недавно появился отладчик, напоминающий OllyDbg, только для Linux. Причем он написан с нуля, а не является оберткой для других утилит. Окно разделено на 4 части: дизассемблер, стек, дамп памяти со вкладками, содержание регистров. В работе этот отладчик очень удобен и интуитивно понятен. Программа позволяет ставить точки прерывания, искать строки, переходы к регистрам, и имеет очень много других полезных функций.
Linice - Неофициальный порт Softice под Linux. При установке требует древнее ядро и квалифицированного шамана с бубном. (Даже не стал париться)
Также не помешает исследовать виртуальную файловую систему /proc для взлома программ.
LINKS:
PD by ilo: http://www.reversing.org
Process Dumper: http://www.trapkit.de/research/forensic/pd/
Dissy: http://www.ipd.bth.se/ska/sim_home/dissy.html
EDB: http://www.codef00.com
Linice: www.linice.com
HTE: www.hte.sourceforge.net
LDasm: http://www.feedface.com/projects/ldasm.html
Lida: http://lida.sourceforge.net/
Bastard: http://bastard.sourceforge.net/
Другие утилиты входят в поставку стандартного дистрибутива.