Для кого она нужна?

1) начинающих реверсеров, знающих особенности обратного проектирования, и желающих изучить такой отладчик как GDB

2) как подсказка тем кто постоянно работает с IDA, Ghidra или любым другим мощным и надежным инструментом, но в силу тех или иных обстоятельств решить задачу проще и быстрее с помощью GDB, и не очень хочется залезать в официальную документацию и снова все вспоминать

Основные команды

Запуск

Общий синтаксис выбора исполняемого файла для анализа

gdb program_name

Запустить выполнение программы

run | r

Присоединиться к gdbserver

target remote host:port

Присоединиться к процессу, отключиться от него

attach PID / detach

Выйти из gdb

quit | q
CTRL + D

Статический анализ

Выбрать синтаксис ассемблера

set disassembly-flavor intel/att

Просмотреть информацию об архитектуре, секциях

info file 

Получение списка функций

info functions | i func

Получение asm-листинга функции

disas func_name
disas address 

Если у вас есть исходники (можем собрать с опцией -g3 для gcc) или исследуемая программа содержит отладочную информацию, можем посмотреть листинг ее исходного кода

list func_name

Динамический анализ

Установить аргументы для каждого запуска программы и посмотреть их

set args
show args

Распределение виртуальной памяти

info proc mappings

Просмотр регистров

registers

Отладка

Шаг с заходом в функцию

step | s

Шаг с прыжком через вызываемую подпрограмму

next | n

Выполнить до нужной строки, адреса

until | u number_of_list_string
until | u *func_name+offset
until | u *address

Информация об аргументах функции, локальных переменных (для файлов, содержащих отладочную информацию) и фрейме текущей функции

info args
info locals
info frame

Просмотреть список процессов и выбрать интересующий

info threads
thread number

Способы расстановки breakpoints

b func_name
b *func_name+offset
b *address

Посмотреть список точек останова, включить или отключить, удалить breakpoint

info break
disable/enable breakpoint_number
delete breakpoint_number
ignore breakpoint_number n  //  остановится на этой точке пройдя ее n раз

Продолжить выполнение до следующего breakpoint-а

continue | c

Просмотр стека

telescope
telescope $rsp+64

Для отображения значения по указанному адресу используется команда x, где через “/” указывается формат вывода

x/i - инструкция
x/x - hex
x/s - строка
x/a - адрес

а также размер вывода

x/b - 8-bit
x/h - 16-bit
x/w - 32-bit
x/g - 64-bit

Пример

x/64bx
x/i $pc

Передача аргумента командной строки

run $(python -c "print('A'*32 + 'xdexad')")
run $(echo "asdf\xdexad")

Для передачи значений функциям ввода

run <<< $(python -c "print('A1'*3)")
run <<< $(echo "asdfxdexad")

Gdb Сервер

Запустить сервер gdb для отладки

gdbserver host:port program

Reverse Debug

Все мы проходили через этот неловкий момент когда во время отладки мы проскочили интересующую нас функцию, и теперь снова надо перезапускать отладчик, проходить тот же путь на CFG и т.п. Чтобы избежать этого, в gdb есть такая фишка как Reverse Debug, позволяющая сохранить состояние программы и обратно отладить до него.

Для этого, после запуска отладчика укажем gdb, что хотим начать использовать reverse debug и стоит сохранять состояния программы

record

После этого станут доступны следующие команды

reverse-step
reverse-next

Создание дампа

Сдампить участок памяти ( часто необходимо при работе с распаковщиками )

dump memory output_file start_addr end_addr

Настройка для работы

Для того чтобы закрепить вывод команды, скажем просмотр инструкций во время отладки и отображения регистров можно воспользоваться командой display

display/5i $pc
display/g $rax
display/g $rbx
display/g $rcx

Делаем жизнь проще с GEF

Для эффективного использования gdb лучше воспользоваться плагином gef, он уже включает в себя удобный закрепленный вывод, используемый при динамическом анализе, а также набор собственных команд расширяющий возможности нашего универсального отладчика. Рассмотрим некоторые наиболее полезные.

Посмотреть состояние aslr, включить/отключить

aslr
aslr on/off

Для проверки исполняемого файла на наличие ASLR, Canary, PIE и т.д.

checksec

Посмотреть чанки

heap chunks

Находясь в функции можем получить значение канарейки и адрес, где она расположена

canary

Чуть более удобный вывод, чем info proc mappings

vmmap

Просмотр регистра флагов и изменение их

flags
flags -Flag_name +Flag_name

Помощь для поиска уязвимостей форматной строки (установка на них точек останова, информация по найденным функциям)

format-string-helper

Создание паттерна и его поиск

pattern create 128
pattern search 0x61616167
pattern search $rbp

Поиск строк по шаблону

search-pattern pattern

Патчинг

patch byte/word/dword/qword address value

Печать массива в формате удобном для копирования в python код. Параметр b должен быть 8/16/32/64, l контролирует длину массива

Пример

print-format -b 64 -l 1  $rsp

Для поиска шеллкода по шаблону

shellcode search pattern
shellcode get shellcode_number

Ксорим значения в памяти и регистрах

xor display address/register size xor_key
xor patch address/register size xor_key

Let’s block ads! (Why?)

Read More

Recent Posts

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

1 день ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

1 день ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

2 дня ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

2 дня ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

2 дня ago

Яндекс проведет гик-фестиваль Young Con

27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…

3 дня ago