MyTetra Share
Делитесь знаниями!
Cracking в Linux
Время создания: 02.01.2009 12:24
Текстовые метки: Ассемблер, assembler, машинный код
Раздел: Компьютер - Linux - Ассемблер
Запись: xintrea/mytetra_syncro/master/base/0000000685/text.html на raw.github.com

В последнее время наблюдается рост коммерческих приложений в 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/

Другие утилиты входят в поставку стандартного дистрибутива.

 
MyTetra Share v.0.59
Яндекс индекс цитирования