Проверка скрипта на вредоносные или шпионские команды
Посмотрите, нет ли в скрипте копирования, перемещения, передачи файлов или других вредоносных функций. Вот скрипт. Он получает информацию о жестком диске.
#!/bin/bash
# safe-vendor-check.sh
# Безопасная проверка доступности скрытых (vendor) ATA-команд (ТОЛЬКО ЧТЕНИЕ)
# Использует: hdparm, smartctl, hddsupertool (если есть), lsblk, lspci (опционально)
# Риск: минимальный (команды только для чтения). Ни одна команда не изменяет диск.
set -euo pipefail
usage() {
cat <<EOF
Использование:
sudo ./safe-vendor-check.sh /dev/sdX [OUTPUT_DIR]
Пример:
sudo ./safe-vendor-check.sh /dev/sda /root/reports
Если OUTPUT_DIR не указан — отчёт сохранится в ./report_<дата>/
EOF
exit 1
}
if [ $# -lt 1 ] || [ "${1:-}" = "-h" ]; then
usage
fi
DISK="$1"
OUTDIR="${2:-./report_$(date +%Y%m%d_%H%M%S)}"
# Проверки
if [ "$EUID" -ne 0 ]; then
echo "Запустите как root: sudo $0 $*"
exit 2
fi
if [ ! -b "$DISK" ]; then
echo "Устройство $DISK не найдено (не block device)."
exit 3
fi
mkdir -p "$OUTDIR"
echo "Отчёт будет записан в: $OUTDIR"
LOG="$OUTDIR/check.log"
exec > >(tee -a "$LOG") 2>&1
echo "=== SAFE VENDOR-ATA CHECK ==="
echo "Диск: $DISK"
echo "Дата: $(date)"
echo
# Инструменты: проверяем доступность
command -v hdparm >/dev/null 2>&1 || echo "Внимание: hdparm не установлен — некоторые проверки будут пропущены."
command -v smartctl >/dev/null 2>&1 || echo "Внимание: smartctl (smartmontools) не установлен — некоторые проверки будут пропущены."
command -v ./hddsupertool >/dev/null 2>&1 || command -v hddsupertool >/dev/null 2>&1 || echo "hddsupertool не найден в текущем каталоге — пропущу специфичные проверки."
echo "1) Список блочных устройств (lsblk)"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,LABEL || true
echo
echo "2) Базовая информация (hdparm -I) — это чтение"
if command -v hdparm >/dev/null 2>&1; then
echo ">>> hdparm -I $DISK"
hdparm -I "$DISK" || true
echo
else
echo "hdparm отсутствует"
fi
echo "3) Security / Frozen / HPA (hdparm --security-status, --dco-identify) — чтение"
if command -v hdparm >/dev/null 2>&1; then
echo ">>> hdparm --security-status $DISK"
hdparm --security-status "$DISK" || true
echo
echo ">>> hdparm --dco-identify $DISK (если поддерживается)"
hdparm --dco-identify "$DISK" || true
echo
else
echo "hdparm отсутствует (пропуск)"
fi
echo "4) SMART + расширённая информация (smartctl -x)"
if command -v smartctl >/dev/null 2>&1; then
echo ">>> smartctl -i -x $DISK (идентификация и расширённые данные)"
smartctl -i -x "$DISK" || true
echo
echo ">>> smartctl --scan"
smartctl --scan || true
echo
else
echo "smartctl отсутствует"
fi
echo "5) Проверка отклика на vendor/test-features (hddsupertool safe calls) — только если hddsupertool доступен"
# Попытаемся вызвать безопасные команды HDDSuperTool: identify, read-native-max, testfeatures (если есть)
HDDST=""
if [ -x "./hddsupertool" ]; then
HDDST="./hddsupertool"
elif command -v hddsupertool >/dev/null 2>&1; then
HDDST="hddsupertool"
fi
if [ -n "$HDDST" ]; then
echo "Используем hddsupertool: $HDDST"
echo ">>> $HDDST $DISK --command identify"
$HDDST "$DISK" --command identify || true
echo
echo ">>> $HDDST $DISK --command read-native-max"
$HDDST "$DISK" --command read-native-max || true
echo
# Некоторые сборки HDDSuperTool/Clone имеют тестfeatures или testcommands, попробуем безопасно
echo ">>> Проверяю наличие testfeatures/testcommands у hddsupertool"
if $HDDST "$DISK" --help 2>&1 | grep -iq "test"; then
echo "Команда testfeatures/testcommands обнаружена — выполню безопасную проверку"
# попробуем сначала --command testfeatures, потом --command testcommands
$HDDST "$DISK" --command testfeatures || true
$HDDST "$DISK" --command testcommands || true
else
echo "testfeatures / testcommands не найдены в --help (пропуск)"
fi
else
echo "hddsupertool не найден — пропускаем шаг с ним"
fi
echo
echo "6) Попытка прочитать часть идентифицирующих секторов (чтение LBA 0, MBR) — чтение"
echo ">>> hexdump -C -n 512 /dev/${DISK#/dev/} (внимание: будет читать сектор 0)"
# Используем dd с bs=512 count=1
dd if="$DISK" of="$OUTDIR/sector0.bin" bs=512 count=1 conv=sync,noerror 2>/dev/null || true
echo "Сохранён: $OUTDIR/sector0.bin (hexdump ниже)"
hexdump -C "$OUTDIR/sector0.bin" | sed -n '1,20p' || true
echo
echo "7) Лог dmesg (последние 200 строк) — поиск ошибок диска"
dmesg | egrep -i 'sd[a-z]|ata|sgx|scsi|disk' | tail -n 200 || true
echo
echo "8) PCI/контроллеры (опционально)"
if command -v lspci >/dev/null 2>&1; then
echo ">>> lspci -nn | egrep -i 'sata|raid|storage|nvme|eth|usb' "
lspci -nn | egrep -i 'sata|raid|storage|nvme|usb' || true
fi
echo
echo "=== FINISH ==="
echo "Отчёт сохранён: $LOG"
echo "Доп. файлы: $OUTDIR/sector0.bin"
echo
echo "ВАЖНО:"
echo "- Этот скрипт НЕ выполняет запись на диск."
echo "- Ни одна выполненная команда не изменяет SA/HPA/DCO/firmware."
echo "- Если вы захотите запустить vendor-команды или любые команды записи — сначала сделайте образ и проконсультируйтесь."