This commit is contained in:
parent
45d131e162
commit
30f65e05d8
95
.gitea/workflows/build.yml
Normal file
95
.gitea/workflows/build.yml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
name: Build YACBA ISO
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, master ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main, master ]
|
||||||
|
release:
|
||||||
|
types: [ created ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-iso:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout код
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Установка зависимостей
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y nasm gcc binutils make genisoimage
|
||||||
|
|
||||||
|
- name: Проверка инструментов
|
||||||
|
run: |
|
||||||
|
nasm --version
|
||||||
|
gcc --version
|
||||||
|
genisoimage --version
|
||||||
|
|
||||||
|
- name: Сборка проекта
|
||||||
|
run: |
|
||||||
|
echo "=== Сборка YACBA ==="
|
||||||
|
make clean || true
|
||||||
|
|
||||||
|
echo "[*] Сборка загрузчика..."
|
||||||
|
nasm -f bin bootloader.asm -o bootloader.bin
|
||||||
|
|
||||||
|
echo "[*] Сборка ядра..."
|
||||||
|
gcc -m32 -ffreestanding -nostdlib -nodefaultlibs -fno-builtin \
|
||||||
|
-fno-stack-protector -c kernel.c -o kernel.o
|
||||||
|
|
||||||
|
echo "[*] Линковка ядра..."
|
||||||
|
ld -m elf_i386 -T linker.ld kernel.o -o kernel.bin
|
||||||
|
|
||||||
|
echo "[*] Создание образа ОС..."
|
||||||
|
cat bootloader.bin kernel.bin > os.bin
|
||||||
|
truncate -s 1440K os.bin
|
||||||
|
|
||||||
|
echo "[+] Сборка завершена"
|
||||||
|
ls -la *.bin
|
||||||
|
|
||||||
|
- name: Создание ISO образа
|
||||||
|
run: |
|
||||||
|
chmod +x build-iso.sh
|
||||||
|
./build-iso.sh
|
||||||
|
|
||||||
|
- name: Проверка ISO
|
||||||
|
run: |
|
||||||
|
ls -la *.iso
|
||||||
|
file *.iso
|
||||||
|
|
||||||
|
- name: Сохранение артефактов
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: yacba-iso-${{ github.sha }}
|
||||||
|
path: |
|
||||||
|
*.iso
|
||||||
|
os.bin
|
||||||
|
extract_dump.sh
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
- name: Релиз (только для тегов)
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.ref }}
|
||||||
|
release_name: YACBA ${{ github.ref }}
|
||||||
|
body: |
|
||||||
|
Автоматическая сборка YACBA Cold Boot Attack Tool
|
||||||
|
|
||||||
|
## Файлы:
|
||||||
|
- `yacba-coldboot-*.iso` - Загрузочный ISO образ
|
||||||
|
- `extract_dump.sh` - Скрипт извлечения дампа
|
||||||
|
|
||||||
|
## Использование:
|
||||||
|
1. Запишите ISO на CD/DVD/флешку
|
||||||
|
2. Загрузитесь с носителя на целевой системе
|
||||||
|
3. Дождитесь завершения дампа
|
||||||
|
4. Используйте extract_dump.sh для анализа
|
||||||
|
|
||||||
|
⚠️ **Только для образовательных целей!**
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -3,12 +3,12 @@
|
|||||||
*.o
|
*.o
|
||||||
*.elf
|
*.elf
|
||||||
*.img
|
*.img
|
||||||
*.iso
|
|
||||||
os.bin
|
os.bin
|
||||||
kernel.bin
|
kernel.bin
|
||||||
bootloader.bin
|
bootloader.bin
|
||||||
|
*.iso
|
||||||
|
yacba-coldboot-*.iso
|
||||||
|
|
||||||
# OS specific
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.DS_Store?
|
.DS_Store?
|
||||||
._*
|
._*
|
||||||
@ -29,7 +29,6 @@ Thumbs.db
|
|||||||
*.temp
|
*.temp
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
# Memory dumps
|
|
||||||
memdump_*.bin
|
memdump_*.bin
|
||||||
*.dump
|
*.dump
|
||||||
|
|
||||||
|
8
Makefile
8
Makefile
@ -36,4 +36,10 @@ test: os.bin
|
|||||||
usb: os.bin
|
usb: os.bin
|
||||||
./create_usb.sh
|
./create_usb.sh
|
||||||
|
|
||||||
.PHONY: all clean test usb
|
iso: os.bin
|
||||||
|
./build-iso.sh
|
||||||
|
|
||||||
|
docker-iso:
|
||||||
|
./docker-build.sh && ./build-iso.sh
|
||||||
|
|
||||||
|
.PHONY: all clean test usb iso docker-iso
|
@ -4,22 +4,32 @@
|
|||||||
Автономная флешка с собственной ОС для cold-boot атак.
|
Автономная флешка с собственной ОС для cold-boot атак.
|
||||||
Вставил флешку → перезагрузился → система дампит память.
|
Вставил флешку → перезагрузился → система дампит память.
|
||||||
|
|
||||||
## Сборка
|
## Сборка и создание ISO
|
||||||
|
|
||||||
**macOS/Windows (Docker):**
|
**Автоматический способ:**
|
||||||
```bash
|
```bash
|
||||||
./docker-build.sh
|
make docker-iso # через Docker (любая ОС)
|
||||||
|
make iso # нативная сборка (Linux)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Linux:**
|
**Пошагово:**
|
||||||
```bash
|
```bash
|
||||||
./build.sh
|
# Сборка
|
||||||
|
./docker-build.sh # или ./build.sh на Linux
|
||||||
|
|
||||||
|
# Создание ISO
|
||||||
|
./build-iso.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Создание флешки
|
## Создание носителя
|
||||||
|
|
||||||
|
**Из ISO (рекомендуется):**
|
||||||
```bash
|
```bash
|
||||||
sudo ./create_boot_usb.sh /dev/sdX # замените X на вашу флешку
|
# Запись на флешку
|
||||||
|
sudo dd if=yacba-coldboot-*.iso of=/dev/sdX bs=1M status=progress
|
||||||
|
|
||||||
|
# Или прямое создание флешки
|
||||||
|
sudo ./create_boot_usb.sh /dev/sdX
|
||||||
```
|
```
|
||||||
|
|
||||||
## Использование
|
## Использование
|
||||||
|
55
README.md
55
README.md
@ -8,12 +8,24 @@
|
|||||||
|
|
||||||
## Архитектура
|
## Архитектура
|
||||||
|
|
||||||
|
**Система:**
|
||||||
- `bootloader.asm` - Загрузчик в стиле OpenBSD
|
- `bootloader.asm` - Загрузчик в стиле OpenBSD
|
||||||
- `kernel.c` - Минимальное ядро без зависимостей
|
- `kernel.c` - Минимальное ядро без зависимостей
|
||||||
- `gdt.asm`, `print32.asm`, `switch_pm.asm` - Системные компоненты
|
- `gdt.asm`, `print32.asm`, `switch_pm.asm` - Системные компоненты
|
||||||
- `linker.ld` - Скрипт компоновки
|
- `linker.ld` - Скрипт компоновки
|
||||||
|
|
||||||
|
**Сборка:**
|
||||||
- `Makefile` - Сборка всей системы
|
- `Makefile` - Сборка всей системы
|
||||||
- `extract_dump.sh` - Извлечение дампа с флешки
|
- `build.sh` - Нативная сборка Linux
|
||||||
|
- `docker-build.sh` - Кроссплатформенная сборка
|
||||||
|
- `build-iso.sh` - Создание ISO образа
|
||||||
|
|
||||||
|
**Утилиты:**
|
||||||
|
- `create_boot_usb.sh` - Прямое создание загрузочной флешки
|
||||||
|
- `extract_dump.sh` - Извлечение дампа с носителя
|
||||||
|
|
||||||
|
**CI/CD:**
|
||||||
|
- `.gitea/workflows/build.yml` - Автоматическая сборка и релизы
|
||||||
|
|
||||||
## Принцип работы
|
## Принцип работы
|
||||||
|
|
||||||
@ -37,11 +49,26 @@ chmod +x docker-build.sh
|
|||||||
./docker-build.sh
|
./docker-build.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Создание флешки:**
|
## Создание носителя
|
||||||
|
|
||||||
|
**ISO образ (рекомендуется):**
|
||||||
|
```bash
|
||||||
|
chmod +x build-iso.sh
|
||||||
|
./build-iso.sh
|
||||||
|
# или
|
||||||
|
make iso
|
||||||
|
```
|
||||||
|
|
||||||
|
**Прямая запись на флешку:**
|
||||||
```bash
|
```bash
|
||||||
sudo ./create_boot_usb.sh /dev/sdX
|
sudo ./create_boot_usb.sh /dev/sdX
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Через Docker + ISO:**
|
||||||
|
```bash
|
||||||
|
make docker-iso
|
||||||
|
```
|
||||||
|
|
||||||
Вставить флешку в целевую систему и перезагрузиться. Система загрузится автоматически и начнет дамп.
|
Вставить флешку в целевую систему и перезагрузиться. Система загрузится автоматически и начнет дамп.
|
||||||
|
|
||||||
## Извлечение дампа
|
## Извлечение дампа
|
||||||
@ -53,6 +80,30 @@ sudo ./extract_dump.sh /dev/sdX
|
|||||||
|
|
||||||
Скрипт автоматически извлечет дамп и выполнит базовый анализ.
|
Скрипт автоматически извлечет дамп и выполнит базовый анализ.
|
||||||
|
|
||||||
|
## Использование ISO
|
||||||
|
|
||||||
|
**Запись ISO на флешку:**
|
||||||
|
```bash
|
||||||
|
sudo dd if=yacba-coldboot-20241222.iso of=/dev/sdX bs=1M status=progress
|
||||||
|
```
|
||||||
|
|
||||||
|
**Тестирование в VM:**
|
||||||
|
```bash
|
||||||
|
qemu-system-i386 -cdrom yacba-coldboot-20241222.iso
|
||||||
|
```
|
||||||
|
|
||||||
|
**Запись на CD/DVD:**
|
||||||
|
```bash
|
||||||
|
cdrecord -v dev=/dev/sr0 yacba-coldboot-20241222.iso
|
||||||
|
```
|
||||||
|
|
||||||
|
## Автоматическая сборка
|
||||||
|
|
||||||
|
Проект поддерживает автоматическую сборку через Gitea Actions:
|
||||||
|
- При каждом push в main создается артефакт с ISO
|
||||||
|
- При создании тега автоматически создается релиз
|
||||||
|
- Артефакты доступны в разделе Actions
|
||||||
|
|
||||||
## Быстрый старт
|
## Быстрый старт
|
||||||
|
|
||||||
См. [QUICK_START.md](QUICK_START.md) для краткой инструкции.
|
См. [QUICK_START.md](QUICK_START.md) для краткой инструкции.
|
||||||
|
87
build-iso.sh
Executable file
87
build-iso.sh
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "=== YACBA ISO Builder ==="
|
||||||
|
|
||||||
|
# Проверяем наличие os.bin
|
||||||
|
if [ ! -f "os.bin" ]; then
|
||||||
|
echo "[-] os.bin не найден. Сначала соберите проект:"
|
||||||
|
echo " ./build.sh или ./docker-build.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v genisoimage >/dev/null 2>&1 && ! command -v mkisofs >/dev/null 2>&1; then
|
||||||
|
echo "[-] Нужен genisoimage или mkisofs"
|
||||||
|
echo "[*] Ubuntu/Debian: apt install genisoimage"
|
||||||
|
echo "[*] macOS: brew install cdrtools"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ISO_TOOL="genisoimage"
|
||||||
|
if command -v mkisofs >/dev/null 2>&1; then
|
||||||
|
ISO_TOOL="mkisofs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ISO_DIR=$(mktemp -d)
|
||||||
|
BOOT_DIR="$ISO_DIR/boot"
|
||||||
|
mkdir -p "$BOOT_DIR"
|
||||||
|
|
||||||
|
echo "[*] Подготавливаем ISO структуру..."
|
||||||
|
|
||||||
|
cp os.bin "$BOOT_DIR/yacba.bin"
|
||||||
|
|
||||||
|
cat > "$BOOT_DIR/isolinux.cfg" << 'EOF'
|
||||||
|
DEFAULT yacba
|
||||||
|
LABEL yacba
|
||||||
|
KERNEL yacba.bin
|
||||||
|
APPEND
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$ISO_DIR/README.txt" << 'EOF'
|
||||||
|
YACBA - Yet Another Cold Boot Attack
|
||||||
|
|
||||||
|
Автономная система для cold-boot атак.
|
||||||
|
|
||||||
|
Для загрузки:
|
||||||
|
1. Запишите ISO на CD/DVD/флешку
|
||||||
|
2. Загрузитесь с носителя
|
||||||
|
3. Система автоматически начнет дамп памяти
|
||||||
|
|
||||||
|
Проект: https://git.iwakurahome.ru/lain/YACBA
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cp extract_dump.sh "$ISO_DIR/" 2>/dev/null || true
|
||||||
|
cp USAGE.txt "$ISO_DIR/" 2>/dev/null || true
|
||||||
|
|
||||||
|
ISO_NAME="yacba-coldboot-$(date +%Y%m%d).iso"
|
||||||
|
|
||||||
|
echo "[*] Создаем загрузочный ISO: $ISO_NAME"
|
||||||
|
|
||||||
|
$ISO_TOOL -o "$ISO_NAME" \
|
||||||
|
-b boot/yacba.bin \
|
||||||
|
-c boot/boot.cat \
|
||||||
|
-no-emul-boot \
|
||||||
|
-boot-load-size 4 \
|
||||||
|
-boot-info-table \
|
||||||
|
-R -J -v -T \
|
||||||
|
-V "YACBA_COLDBOOT" \
|
||||||
|
"$ISO_DIR"
|
||||||
|
|
||||||
|
rm -rf "$ISO_DIR"
|
||||||
|
|
||||||
|
if [ -f "$ISO_NAME" ]; then
|
||||||
|
echo "[+] ISO образ создан: $ISO_NAME"
|
||||||
|
echo "[*] Размер: $(ls -lh "$ISO_NAME" | awk '{print $5}')"
|
||||||
|
echo ""
|
||||||
|
echo "=== Использование ==="
|
||||||
|
echo "Запись на флешку:"
|
||||||
|
echo " sudo dd if=$ISO_NAME of=/dev/sdX bs=1M status=progress"
|
||||||
|
echo ""
|
||||||
|
echo "Тест в QEMU:"
|
||||||
|
echo " qemu-system-i386 -cdrom $ISO_NAME"
|
||||||
|
echo ""
|
||||||
|
echo "Запись на CD/DVD:"
|
||||||
|
echo " cdrecord -v dev=/dev/sr0 $ISO_NAME"
|
||||||
|
else
|
||||||
|
echo "[-] Ошибка создания ISO"
|
||||||
|
exit 1
|
||||||
|
fi
|
@ -33,7 +33,6 @@ fi
|
|||||||
echo "[*] Создаю разделы на флешке..."
|
echo "[*] Создаю разделы на флешке..."
|
||||||
sudo umount ${DEVICE}* 2>/dev/null || true
|
sudo umount ${DEVICE}* 2>/dev/null || true
|
||||||
|
|
||||||
# Создаем таблицу разделов
|
|
||||||
sudo fdisk $DEVICE << EOF
|
sudo fdisk $DEVICE << EOF
|
||||||
o
|
o
|
||||||
n
|
n
|
||||||
@ -55,8 +54,6 @@ echo "[*] Записываю загрузчик..."
|
|||||||
sudo dd if=os.bin of=${DEVICE}1 bs=512 status=progress
|
sudo dd if=os.bin of=${DEVICE}1 bs=512 status=progress
|
||||||
|
|
||||||
echo "[*] Инициализирую раздел данных..."
|
echo "[*] Инициализирую раздел данных..."
|
||||||
# Создаем RAW раздел без файловой системы
|
|
||||||
# Заполняем нулями первые 1MB для очистки
|
|
||||||
sudo dd if=/dev/zero of=${DEVICE}2 bs=1M count=1 2>/dev/null
|
sudo dd if=/dev/zero of=${DEVICE}2 bs=1M count=1 2>/dev/null
|
||||||
echo "[*] RAW раздел для дампа готов"
|
echo "[*] RAW раздел для дампа готов"
|
||||||
|
|
||||||
|
@ -24,7 +24,6 @@ fi
|
|||||||
echo "=== YACBA Dump Extractor ==="
|
echo "=== YACBA Dump Extractor ==="
|
||||||
echo "[*] Извлекаю дамп с $DATA_PARTITION"
|
echo "[*] Извлекаю дамп с $DATA_PARTITION"
|
||||||
|
|
||||||
# Читаем заголовок для определения размера
|
|
||||||
echo "[*] Читаю заголовок дампа..."
|
echo "[*] Читаю заголовок дампа..."
|
||||||
HEADER_FILE=$(mktemp)
|
HEADER_FILE=$(mktemp)
|
||||||
sudo dd if=$DATA_PARTITION of=$HEADER_FILE bs=512 count=1 2>/dev/null
|
sudo dd if=$DATA_PARTITION of=$HEADER_FILE bs=512 count=1 2>/dev/null
|
||||||
@ -36,7 +35,6 @@ if ! grep -q "YACBA" "$HEADER_FILE" 2>/dev/null; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Читаем размер дампа из заголовка (байты 8-11)
|
|
||||||
DUMP_SIZE=$(hexdump -s 8 -n 4 -e '1/4 "%u"' "$HEADER_FILE" 2>/dev/null || echo "0")
|
DUMP_SIZE=$(hexdump -s 8 -n 4 -e '1/4 "%u"' "$HEADER_FILE" 2>/dev/null || echo "0")
|
||||||
SECTORS_COUNT=$(hexdump -s 12 -n 4 -e '1/4 "%u"' "$HEADER_FILE" 2>/dev/null || echo "2048")
|
SECTORS_COUNT=$(hexdump -s 12 -n 4 -e '1/4 "%u"' "$HEADER_FILE" 2>/dev/null || echo "2048")
|
||||||
|
|
||||||
@ -45,7 +43,6 @@ rm -f "$HEADER_FILE"
|
|||||||
echo "[*] Размер дампа: $DUMP_SIZE байт"
|
echo "[*] Размер дампа: $DUMP_SIZE байт"
|
||||||
echo "[*] Секторов данных: $SECTORS_COUNT"
|
echo "[*] Секторов данных: $SECTORS_COUNT"
|
||||||
|
|
||||||
# Извлекаем дамп (пропускаем заголовок)
|
|
||||||
echo "[*] Копирую дамп памяти..."
|
echo "[*] Копирую дамп памяти..."
|
||||||
sudo dd if=$DATA_PARTITION of=$OUTPUT_FILE bs=512 skip=1 count=$SECTORS_COUNT status=progress 2>/dev/null
|
sudo dd if=$DATA_PARTITION of=$OUTPUT_FILE bs=512 skip=1 count=$SECTORS_COUNT status=progress 2>/dev/null
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user