[Реверс-инжиниринг] Шпаргалка полезных команд GDB
Автор
Сообщение
news_bot ®
Стаж: 6 лет 3 месяца
Сообщений: 27286
Для кого она нужна?
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 + '\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-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
===========
Источник:
habr.com
===========
Похожие новости:
- [Реверс-инжиниринг, Научно-популярное] Cотворение Мира как проект и Библия как его документация
- [Программирование, Реверс-инжиниринг, Читальный зал, История IT, Софт] Причуды обратной совместимости
- [Информационная безопасность, Go, Реверс-инжиниринг] Blackrota, самый обфусцированный backdoor, написанный на Go (перевод)
- [Реверс-инжиниринг, Программирование микроконтроллеров, Прототипирование, Интернет вещей, DIY или Сделай сам] Подключаемся к станку по изготовлению профлиста и считываем из него прокатную длинну
- [Информационная безопасность, Разработка под Android, Реверс-инжиниринг] Пасхалка в APK-файлах: что такое Frosting
- [Реверс-инжиниринг, Производство и разработка электроники, Игры и игровые приставки] Создаём модчипы для PlayStation 1 (перевод)
- [JavaScript, Реверс-инжиниринг, Софт] Frida изучаем эксплуатацию алгоритмов Heap
- [Информационная безопасность, Реверс-инжиниринг, Автомобильные гаджеты] Датчики давления в шинах автомобиля: пробуем провести DoS-атаку (перевод)
- [Информационная безопасность, Реверс-инжиниринг] CTF-соревнования 2020 для «белых хакеров». Старт регистрации участников
- [Реверс-инжиниринг, Игры и игровые приставки] «Heroes of Might and Magic IV»: баг с таверной или классика патчинга
Теги для поиска: #_reversinzhiniring (Реверс-инжиниринг), #_reversinzhiniring_dlja_novichkov (реверс-инжиниринг для новичков), #_gdb, #_reversinzhiniring (
Реверс-инжиниринг
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 16-Май 01:17
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 3 месяца |
|
Для кого она нужна? 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 + '\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-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 =========== Источник: habr.com =========== Похожие новости:
Реверс-инжиниринг ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 16-Май 01:17
Часовой пояс: UTC + 5