From 30f65e05d83f5c91df21e010b8ef145ba67aed32 Mon Sep 17 00:00:00 2001 From: Lain Iwakura Date: Sun, 22 Jun 2025 21:51:00 +0300 Subject: [PATCH] added ci/cd + iso --- .gitea/workflows/build.yml | 95 ++++++++++++++++++++++++++++++++++++++ .gitignore | 5 +- Makefile | 8 +++- QUICK_START.md | 24 +++++++--- README.md | 55 +++++++++++++++++++++- build-iso.sh | 87 ++++++++++++++++++++++++++++++++++ create_boot_usb.sh | 3 -- extract_dump.sh | 3 -- 8 files changed, 261 insertions(+), 19 deletions(-) create mode 100644 .gitea/workflows/build.yml create mode 100755 build-iso.sh diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..c24d8ab --- /dev/null +++ b/.gitea/workflows/build.yml @@ -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 \ No newline at end of file diff --git a/.gitignore b/.gitignore index da903cb..2a3da3f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,12 +3,12 @@ *.o *.elf *.img -*.iso os.bin kernel.bin bootloader.bin +*.iso +yacba-coldboot-*.iso -# OS specific .DS_Store .DS_Store? ._* @@ -29,7 +29,6 @@ Thumbs.db *.temp *.log -# Memory dumps memdump_*.bin *.dump diff --git a/Makefile b/Makefile index a6a391d..5a71244 100644 --- a/Makefile +++ b/Makefile @@ -36,4 +36,10 @@ test: os.bin usb: os.bin ./create_usb.sh -.PHONY: all clean test usb \ No newline at end of file +iso: os.bin + ./build-iso.sh + +docker-iso: + ./docker-build.sh && ./build-iso.sh + +.PHONY: all clean test usb iso docker-iso \ No newline at end of file diff --git a/QUICK_START.md b/QUICK_START.md index 8522895..8b75e62 100644 --- a/QUICK_START.md +++ b/QUICK_START.md @@ -4,22 +4,32 @@ Автономная флешка с собственной ОС для cold-boot атак. Вставил флешку → перезагрузился → система дампит память. -## Сборка +## Сборка и создание ISO -**macOS/Windows (Docker):** +**Автоматический способ:** ```bash -./docker-build.sh +make docker-iso # через Docker (любая ОС) +make iso # нативная сборка (Linux) ``` -**Linux:** +**Пошагово:** ```bash -./build.sh +# Сборка +./docker-build.sh # или ./build.sh на Linux + +# Создание ISO +./build-iso.sh ``` -## Создание флешки +## Создание носителя +**Из ISO (рекомендуется):** ```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 ``` ## Использование diff --git a/README.md b/README.md index 40d6b0f..d81c66a 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,24 @@ ## Архитектура +**Система:** - `bootloader.asm` - Загрузчик в стиле OpenBSD - `kernel.c` - Минимальное ядро без зависимостей - `gdt.asm`, `print32.asm`, `switch_pm.asm` - Системные компоненты - `linker.ld` - Скрипт компоновки + +**Сборка:** - `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 ``` -**Создание флешки:** +## Создание носителя + +**ISO образ (рекомендуется):** +```bash +chmod +x build-iso.sh +./build-iso.sh +# или +make iso +``` + +**Прямая запись на флешку:** ```bash 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) для краткой инструкции. diff --git a/build-iso.sh b/build-iso.sh new file mode 100755 index 0000000..bb7cbc1 --- /dev/null +++ b/build-iso.sh @@ -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 \ No newline at end of file diff --git a/create_boot_usb.sh b/create_boot_usb.sh index e864876..aa3efe4 100755 --- a/create_boot_usb.sh +++ b/create_boot_usb.sh @@ -33,7 +33,6 @@ fi echo "[*] Создаю разделы на флешке..." sudo umount ${DEVICE}* 2>/dev/null || true -# Создаем таблицу разделов sudo fdisk $DEVICE << EOF o n @@ -55,8 +54,6 @@ echo "[*] Записываю загрузчик..." sudo dd if=os.bin of=${DEVICE}1 bs=512 status=progress echo "[*] Инициализирую раздел данных..." -# Создаем RAW раздел без файловой системы -# Заполняем нулями первые 1MB для очистки sudo dd if=/dev/zero of=${DEVICE}2 bs=1M count=1 2>/dev/null echo "[*] RAW раздел для дампа готов" diff --git a/extract_dump.sh b/extract_dump.sh index 2dbaabd..49720dd 100755 --- a/extract_dump.sh +++ b/extract_dump.sh @@ -24,7 +24,6 @@ fi echo "=== YACBA Dump Extractor ===" echo "[*] Извлекаю дамп с $DATA_PARTITION" -# Читаем заголовок для определения размера echo "[*] Читаю заголовок дампа..." HEADER_FILE=$(mktemp) 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 fi -# Читаем размер дампа из заголовка (байты 8-11) 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") @@ -45,7 +43,6 @@ rm -f "$HEADER_FILE" echo "[*] Размер дампа: $DUMP_SIZE байт" echo "[*] Секторов данных: $SECTORS_COUNT" -# Извлекаем дамп (пропускаем заголовок) echo "[*] Копирую дамп памяти..." sudo dd if=$DATA_PARTITION of=$OUTPUT_FILE bs=512 skip=1 count=$SECTORS_COUNT status=progress 2>/dev/null