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
|
||||
*.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
|
||||
|
||||
|
8
Makefile
8
Makefile
@ -36,4 +36,10 @@ test: os.bin
|
||||
usb: os.bin
|
||||
./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 атак.
|
||||
Вставил флешку → перезагрузился → система дампит память.
|
||||
|
||||
## Сборка
|
||||
## Сборка и создание 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
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
55
README.md
55
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) для краткой инструкции.
|
||||
|
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 "[*] Создаю разделы на флешке..."
|
||||
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 раздел для дампа готов"
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user