Русский
Русский
English
Статистика
Реклама

Шпаргалка полезных команд GDB

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


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


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


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


Запуск


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


gdb program_name

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


run | r

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


target remote host:port

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


attach PID / detach

Выйти из gdb


quit | qCTRL + D

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


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


set disassembly-flavor intel/att

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


info file 

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


info functions | i func

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


disas func_namedisas address 

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


list func_name

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


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


set argsshow args

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


info proc mappings

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


registers

Отладка

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


step | s

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


next | n

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


until | u number_of_list_stringuntil | u *func_name+offsetuntil | u *address

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


info argsinfo localsinfo frame

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


info threadsthread number

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


b func_nameb *func_name+offsetb *address

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


info breakdisable/enable breakpoint_numberdelete breakpoint_numberignore breakpoint_number n  //  остановится на этой точке пройдя ее n раз

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


continue | c

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


telescopetelescope $rsp+64

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


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

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


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

Пример


x/64bxx/i $pc

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


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

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


run <<< $(python -c "print('A1'*3)")run <<< $(echo "asdf\xde\xad")

Gdb Сервер

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


gdbserver host:port program

Reverse Debug

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


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


record

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


reverse-stepreverse-next

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

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


dump memory output_file start_addr end_addr

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


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


display/5i $pcdisplay/g $raxdisplay/g $rbxdisplay/g $rcx

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


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


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


aslraslr on/off

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


checksec

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


heap chunks

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


canary

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


vmmap

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


flagsflags -Flag_name +Flag_name

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


format-string-helper

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


pattern create 128pattern search 0x61616167pattern 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 patternshellcode get shellcode_number

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


xor display address/register size xor_keyxor patch address/register size xor_key
Источник: habr.com
К списку статей
Опубликовано: 03.01.2021 08:10:12
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Реверс-инжиниринг

Реверс-инжиниринг для новичков

Gdb

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru