Видео-версия
Все новые прохождения появляются сначала на канале t.me/kiberdruzhinnik. Подпишись, чтобы не пропускать новые!
Пакер
Лениво с помощью Detect It Easy определяем, что файл упакован с помощью UPX.
Распаковка
Не менее лениво снимем упаковку с помощью утилиты upx:
$ upx -d C:\Users\WDAGUtilityAccount\Desktop\malware\update
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2024
UPX 4.2.2 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 3rd 2024
File size Ratio Format Name
-------------------- ------ ----------- -----------
29499 <- 9540 32.34% linux/amd64 update
Unpacked 1 file.
Реверс
Сразу же по строкам находим ссылку на текст вымогательства, из которого понимаем адрес биткоин кошелька и сумму выкупа: https://pastes.io/raw/foiawsmlsk
In shadows we dwell, unseen we act,
To claim what's ours, we've formed a pact.
With files concealed, and secrets locked,
We kindly ask, don't be too shocked.
A million pounds in Bitcoin bright,
Shall bring your data back to light.
To free your files from chains of gold,
Be swift, be brave, don't let them mold.
Send payment to our wallet deep,
BTC Address: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2,
To verify and make us weep.
For questions, visit us, don't fail,
Onion Address: xyzf3jv6xq3d7w5e.onion,
Customer service, there to hail.
The clock is ticking, time's a thief,
Pay heed to us, or face the grief.
In cyberspace, the sum we claim,
Address we send, to end this game.
Should you resist, or just ignore,
Your precious data, you'll see no more.
The choice is yours, we leave it here,
Weigh your options, with trembling fear.
For every sunset that slips away,
The price we ask, it will not stay.
So heed our words, and make it quick,
A million pounds, a ransom's trick.
На наше счастье из бинарника не вырезаны дебажные символы, поэтому это не реверс - это сказка.
В ходе реверса понимаем, что используется симметричное шифрование AES CBC. Важно помнить, что помимо ключа нам нужен инициализационный вектор IV.
Мимолетом находим шифруемые расширения файлов:
Функция скачивания ключа шифрования и инициализационного вектора с помощью curl
:
Функция кодирования ссылки, которая используется для получения ключа шифрования и инициализационного вектора:
Получаем ссылку, с помощью которой скачиваем ключ шифрования AES и инициализационный вектор IV:
encrypted = "\x0ACLIG\x0F\x1C\x1D\x01\x0C\x5D\x0A\x18\x45\x46\x1F\x1F\x45\x1B"
key = "b7894532snsmajuys6"
out = bytearray(len(encrypted))
for i in range(len(encrypted)):
out[i] = ord(key[i % len(key)]) ^ ord(encrypted[i])
print(out)
$ python3 decode.py
bytearray(b'https://rb.gy/3flsy')
$ wget https://rb.gy/3flsy
$ md5sum 3flsy
950efb05238d9893366a816e6609500f 3flsy
Если скачать эту ссылку с помощью браузера, то получим имя файла updater
.
Напишем декриптор для файлов (для этого просим какую-нибудь из доступных GPT, мне вывело примерно такой код):
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
def decrypt_file(filename, key, iv):
"""Decrypts a file using AES CBC mode with the given key and IV."""
cipher = AES.new(key, AES.MODE_CBC, iv)
with open(filename, "rb") as f:
ciphertext = f.read()
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
with open(filename.replace(".24bes", ""), "wb") as f:
f.write(plaintext)
def main():
"""Decrypts all files with the .24bes extension in the current directory."""
with open("3flsy", "rb") as f:
data = f.read()
key = data[0:32] # Extract first 32 bytes for key
iv = data[32:] # Extract next 16 bytes for IV
for filename in os.listdir():
if filename.endswith(".24bes"):
decrypt_file(filename, key, iv)
if __name__ == "__main__":
main()
Установим необходимую библиотеку pycryptodome
и расшифруем файлы:
python3 -m venv env
source env/bin/activate
pip install pycryptodome
python3 decryptor.py
Смотрим на расшифрованный PDF:
И также заглянем в расшифрованный текстовый документ: