added ci/cd + iso
Some checks failed
Build YACBA ISO / build-iso (push) Failing after 1m10s

This commit is contained in:
Lain Iwakura 2025-06-22 21:51:00 +03:00
parent 45d131e162
commit 30f65e05d8
No known key found for this signature in database
GPG Key ID: C7C18257F2ADC6F8
8 changed files with 261 additions and 19 deletions

View 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
View File

@ -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

View File

@ -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

View File

@ -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
``` ```
## Использование ## Использование

View File

@ -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
View 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

View File

@ -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 раздел для дампа готов"

View File

@ -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