Бинарные уязвимости/Инструменты поиска бинарных уязвимостей: различия между версиями
WGH (обсуждение | вклад) (→IDA: dead link) |
WGH (обсуждение | вклад) (→gdb: info proc mappings) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 87: | Строка 87: | ||
</pre> | </pre> | ||
− | == IDA | + | == IDA == |
Интерактивный дизассемблер и декомпилятор. | Интерактивный дизассемблер и декомпилятор. | ||
+ | |||
+ | Версия IDA Free вполне подходит для наших задач, её можно [https://hex-rays.com/ida-free/ скачать с официального сайта]. Ссылки на скачивание могут не открываться из РФ, вот на всякий случай зеркала: | ||
+ | |||
+ | * https://course.secsem.ru/idafree83_linux.run | ||
+ | * https://course.secsem.ru/idafree83_windows.exe | ||
+ | * https://course.secsem.ru/idafree83_mac.app.zip | ||
=== Шорткаты === | === Шорткаты === | ||
Строка 95: | Строка 101: | ||
{{клавиша|F5}} | {{клавиша|F5}} | ||
</center> | </center> | ||
− | ==== | + | ==== Режим дизассемблера ==== |
* {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора | * {{клавиша|P}} — создать функцию, начиная с текущей позиции курсора | ||
* {{клавиша|F5}} — декомпилировать функцию | * {{клавиша|F5}} — декомпилировать функцию | ||
Строка 106: | Строка 112: | ||
* {{клавиша|R}} — переопределить число в инструкции как строку (<code>mov rdx, 335F47414C465Fh</code> -> <code>mov rdx, '3_GALF_'</code>) | * {{клавиша|R}} — переопределить число в инструкции как строку (<code>mov rdx, 335F47414C465Fh</code> -> <code>mov rdx, '3_GALF_'</code>) | ||
− | ==== Hex-Rays ==== | + | ==== Режим декомпилятора (Hex-Rays) ==== |
* {{клавиша|N}} — переименовать | * {{клавиша|N}} — переименовать | ||
* {{клавиша|Y}} — поменять тип | * {{клавиша|Y}} — поменять тип | ||
Строка 127: | Строка 133: | ||
* <code>x/10i $pc</code> - посмотреть несколько инструкций вперед. | * <code>x/10i $pc</code> - посмотреть несколько инструкций вперед. | ||
* <code>layout asm</code> - переключиться в псевдографический режим с листингом ассемблерных команд. | * <code>layout asm</code> - переключиться в псевдографический режим с листингом ассемблерных команд. | ||
+ | * <code>info proc mappings</code> - показать карту памяти процесса | ||
== Примеры с занятия == | == Примеры с занятия == | ||
Бинарник, который были рассмотрен на семинаре: [[Media:2023 reverse examples.zip]] (плюс сорцы). | Бинарник, который были рассмотрен на семинаре: [[Media:2023 reverse examples.zip]] (плюс сорцы). |
Текущая версия на 02:25, 2 ноября 2023
Содержание
strings
Выводит константные строки, которые есть в бинарнике. Строки определяются эвристикой, поэтому часто бывают ложные срабатывания. IDA тоже умеет определять строки.
$ strings reverse_example_1 /lib64/ld-linux-x86-64.so.2 libcrypto.so.1.0.0 _ITM_deregisterTMCloneTable /lib64/ld-linux-x86-64.so.2 libcrypto.so.1.0.0 _ITM_deregisterTMCloneTable __gmon_start__ _Jv_RegisterClasses _ITM_registerTMCloneTable MD5_Final MD5_Init MD5_Update libc.so.6 fopen __stack_chk_fail fgets malloc stderr fwrite __sprintf_chk __libc_start_main free GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.2.5 OPENSSL_1.0.0 D$(1 T$(dH3 AUATH D$h1 |$hdH3<%( x[]A\A] AWAVA AUATL []A\A]A^A_ %02X ./cd-key.txt failed to open CD key file failed to read CD key file invalid cdkey Good job! ;*3$" .shstrtab .interp .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .jcr .dynamic .got.plt .data .bss
strace
Выводит трассу системных вызовов. Полезно, чтобы определить, какие файлы читает программа, и как вообще взаимодействует с внешним миром (в том числе сеть).
$ strace ./reverse_example_1 ... openat(AT_FDCWD, "./cd-key.txt", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=24, ...}) = 0 read(3, "AAAAA-BBBBB-CCCCC-DDDDD\n", 4096) = 24 write(2, "invalid cdkey\n", 14) = 14 exit_group(1) = ?
IDA
Интерактивный дизассемблер и декомпилятор.
Версия IDA Free вполне подходит для наших задач, её можно скачать с официального сайта. Ссылки на скачивание могут не открываться из РФ, вот на всякий случай зеркала:
- https://course.secsem.ru/idafree83_linux.run
- https://course.secsem.ru/idafree83_windows.exe
- https://course.secsem.ru/idafree83_mac.app.zip
Шорткаты
F5
Режим дизассемблера
- P — создать функцию, начиная с текущей позиции курсора
- F5 — декомпилировать функцию
- ↵ Enter — проследовать по курсору (например, перейти к функции или массиву)
- Esc — назад (противоположность ↵ Enter)
- X — показать ссылки на то, что под курсором (на функцию, переменную, строку, etc.)
- C — переопределить байты, начиная с курсора, как код.
- D — переопределить байты, начиная с курсора, как данные (последовательные нажатия переключают размер переменной byte-word-dword(-qword))
- A — переопределить байты, начиная с курсора, как строку
- R — переопределить число в инструкции как строку (
mov rdx, 335F47414C465Fh
->mov rdx, '3_GALF_'
)
Режим декомпилятора (Hex-Rays)
- N — переименовать
- Y — поменять тип
- Может показаться, что с помощью Y можно и переименовать, или с помощью N задать тип, однако это не так
- ↵ Enter — проследовать по курсору
- Esc — назад
- Tab ↹ — перейти к данному месту из декомпилированного в дизассемблированный код и обратно
Полный список на официальном сайте.
gdb
С gdb можно познакомиться по любому туториалу в интернете.
Однако в отладке приложений без исходников есть некоторая специфика, и тут могут быть особенно полезные такие команды:
b * 0x400155
- поставить брэйкпоинт на адрес.p (char*)$rdi
- напечатать как строку содержимое памяти, на которую указывает регистрrdi
. См. также статью про соглашения вызовов на Википедии.help x
- почитать справку по командеx
, которая очень полезна для изучения содержимого памяти.x/10i $pc
- посмотреть несколько инструкций вперед.layout asm
- переключиться в псевдографический режим с листингом ассемблерных команд.info proc mappings
- показать карту памяти процесса
Примеры с занятия
Бинарник, который были рассмотрен на семинаре: Media:2023 reverse examples.zip (плюс сорцы).