Инструменты, которые нам нужны:
* Detect It Easy (https://github.com/horsicq/detect-it-easy)
* dnSpyEx (https://github.com/dnSpyEx/dnSpy)
* pyinstxtractor (https://github.com/extremecoders-re/pyinstxtractor)
* Сайт CyberChef (https://gchq.github.io/CyberChef/)
* Сайт Pylingual (https://pylingual.io/)
Общий алгоритм анализа:
У нас есть .exe файл (лучше сразу изменить расширение .exe на .bin, чтобы случайно его не запустить). Закидываем его в Detect It Easy и смотрим, что он покажет.
1.Go-файлы
Часто встречается ситуация, когда утилита пишет что-то вроде: Packer: UPX (5.02) [LZMA, brute], а вес файла составляет около 3.5 МБ. С вероятностью 99% это WebRat. Он написан на Go и упакован в UPX.
Чтобы его распаковать, нужно скачать UPX (https://github.com/upx/upx) и прописать в командной строке (cmd):
upx.exe -d имяфайла.exe
После выполнения этой команды размер файла должен увеличиться примерно до 12 МБ. Если снова закинуть его в Detect It Easy, то в строке компилятора будет указано: Compiler: Go (1.18.X-1.24.0), Language: Go.
2. .NET Framework
Также часто встречаются программы, в которых указано что-то типо: Library: .NET Framework (CLR 4.0.30319) (Language: VB.NET, Language: MSIL/C#). Чаще всего это RAT (Xworm, Liberium, SheetRat), стиллеры (Antarctida Stealer, SentinelStealer, Umbral) или биндеры (xbinder, megajoiner).
Для их анализа можно воспользоваться dnSpy: просто перетащите (Drag-and-Drop) Exe файл в окно программы. Если в "Обозревателе сборок" вы увидите вполне читаемый текст отлично, билд не был обфусцирован. Часто там встречаются имена классов вроде client, leb128, stub, stub.Helper. Но если вы видите просто структуру PE, где при раскрытии видны только всякие секции, то этот способ анализа вам не подойдёт.
Существует два метода анализа такого EXE: динамический и статический.
Динамический анализ
Обычно он быстрый и относительно легкий, но иногда палки в колёса вставляет Anti-Debug, Anti-VM и другие механизмы защиты.
Для безопасного динамического дешифрования вам обязательно понадобится виртуальная машина:
1. Перекиньте файл в dnSpy и нажмите на зелёный треугольник (Старт).
2. В появившемся окне в поле "Остановиться в" выберите "Точка входа".
3. В верхнем меню перейдите в: Отладка -> Окна -> Статические поля.
4. Нажимайте клавишу F10 (Шаг через).
Если программа сразу вылетела или быстро завершила работу, значит, у файла есть защита (Anti-Debug / Anti-VM). Обычно эти проверки вызываются где-то в начале кода или в классе с конфигурацией. Если обфускации нет, найти их не составит труда. Если она есть, придётся искать вручную методом тыка или ускорить процесс с помощью ИИ.
Самый правильный вариант — отследить, где именно программа закрывается, используя в dnSpy пошаговую отладку кнопками F11 (Шаг внутрь) и F10 (Шаг через). Когда найдёте код, который мешает, его нужно вырезать. Например, вот такой фрагмент из GomoRat:
Config.Antivirtual = EncryptString.Decode(Config.Antivirtual);
bool flag = Config.Antivirtual == EncryptString.Decode("Lv83lsaoJTgWQoNoJYcAmg==");
if (flag)
{
AntiVirtual.RunAntiAnalysis();
}
Просто нажимаем правой кнопкой мыши по этим строкам кода и выбираем "Изменить метод". В появившемся окне удаляем эти строчки и нажимаем "Компилировать". (Если среда выдаёт ошибку, закройте окно изменения метода и выберите "Изменить класс" — это должно сработать).
Теперь можно спокойно запускать отладчик дальше и смотреть в окне "Статические поля", как зашифрованные переменные дешифруются сами. Если файл всё ещё вылетает, возможно, вы вырезали не все проверки или у билда есть проблемы с самим кодом.
Статический анализ
Этот метод сложнее, особенно если файл сильно обфусцирован и его тяжело читать. Также могут помешать зашифрованные строки. Например, в SheetRat используется обычный шифр ROT. Вам нужно просто узнать два алфавита (алфавит шифрования и дешифрования) и написать (или попросить нейросеть написать) простенький скрипт на Python. Скрипт будет подставлять символы: например, если символ 'a' из зашифрованной строки находится в алфавите шифрования на 13-м месте (индексация с 0), то в алфавите дешифрования на 13-м месте стоит символ 'k'. Прогнав строку через такой алгоритм, вы получите чистый текст.
Однако алгоритм дешифрования не всегда такой лёгкий. Например, в GomoRat 1.9 строки шифруются по цепочке: XOR -> AES -> ChaCha20 -> XOR -> Base64. Распутать такое вручную уже гораздо сложнее.
Если файл сильно обфусцирован (например ConfuserEx), против этого часто помогает утилита de4dot (или её модификации ex, cex). Она проста в использовании, инструкции по ней легко найти в интернете.
Анализ биндеров и крипторов
Часто они просто хранят внутри себя зашифрованные исполняемые файлы, которые при запуске расшифровываются в какую-то директорию на диске и запускаются. Например, чтобы достать скрытые EXE-файлы из xbinder динамическим путём, нужно удалить проверку окружения:
if (Program.DetectVirtualMachine() | Program.Emulator() | Program.DetectDebugger() | Program.DetectSandboxie() | Program.anyrun())
{
Environment.FailFast(null);
}
Сохраните изменения, нажав Ctrl + Shift + S, закройте всё в "Обозревателе сборок" dnSpy и закиньте туда новый, уже сохранённый EXE-файл. Запустите отладку. Как обычно, в окне со статическими полями появится строка вида:
"hi.exe|True|False|True|%Temp%|False|False|False"
Когда программа отработает, в целевой папке (в данном примере это %Temp%) появится скрытый файл (например, hi.exe). Если вы его не видите, включите в настройках Проводника Windows отображение скрытых и системных файлов.
3. Скомпилированные Python-скрипты
Если Detect It Easy пишет что-то вроде: Language: Python (3.13) и Packer: PyInstaller [modified], значит, файл написан на Python и собран с помощью PyInstaller. Обычно в таком формате встречаются дропперы файлов или аналогичный вредоносный софт, реже — полноценные ратники или стиллеры. Такой файл зачастую можно легко распаковать.
Для этого используем инструмент pyinstxtractor. В консоли вводим команду:
python pyinstxtractor.py "путь_к_файлу.exe"
Утилита создаст директорию с именем имяфайла_extracted. Внутри этой папки будет лежать файл с расширением .pyc (обычно с тем же названием, что и исходный .exe, либо с именем main). Этот файл представляет собой скомпилированный байт-код Python. Чтобы превратить его в нормальный, читаемый исходный код, загрузите этот .pyc файл на сайт Pylingual — сервис декомпилирует его, и вы получите чистый Python-скрипт.
Примечание: Этот способ работает не всегда. Если при компиляции исполняемого файла использовалась защита вроде Nuitka или другие специализированные протекторы, декомпилировать такой бинарник будет сложнее.
гайд по анализу вирусов
Ахуенный пост бро. Если не сложно, можешь написать про анализ вирусов на линуксе? Я могу тебе даже дать свой для проверки.
If you plan on decompiling Nuitka (Python) binaries (which won't produce the original source code, but rather large code fragments), here's a quick guide (EN):
Step 0.
Obviously, scan the file with Detect It Easy. I'm assuming you already know how to do that from the previous post.
Step 1.
Download Nuitka Extractor from https://github.com/extremecoders-re/nuitka-extractor.
Select your .exe file and extract it like this:
nuitka-extractor.exe your-file.exe
This will create a folder. Open it, and you'll find a file named pythonX.XX. That's the file we'll be using.
Step 2.
Use a string extractor to extract strings from the .dll. I recommend saving the output to a .txt file.
About 90% of the .dll is filled with Python license text, so search for the main code fragments instead. For example, if you think the program interacts with Discord, search for strings like "send" or "discord".
You can then identify the relevant source code segments and ignore the rest.
Step 3.
You're done! You can now view partial source code.
EXTRA:
When decompiling a PyInstaller archive, use https://pychaos.io as an alternative to https://pylingual.io. The waiting times on Pylingual are usually much longer.
Good luck!
Step 0.
Obviously, scan the file with Detect It Easy. I'm assuming you already know how to do that from the previous post.
Step 1.
Download Nuitka Extractor from https://github.com/extremecoders-re/nuitka-extractor.
Select your .exe file and extract it like this:
nuitka-extractor.exe your-file.exe
This will create a folder. Open it, and you'll find a file named pythonX.XX. That's the file we'll be using.
Step 2.
Use a string extractor to extract strings from the .dll. I recommend saving the output to a .txt file.
About 90% of the .dll is filled with Python license text, so search for the main code fragments instead. For example, if you think the program interacts with Discord, search for strings like "send" or "discord".
You can then identify the relevant source code segments and ignore the rest.
Step 3.
You're done! You can now view partial source code.
EXTRA:
When decompiling a PyInstaller archive, use https://pychaos.io as an alternative to https://pylingual.io. The waiting times on Pylingual are usually much longer.
Good luck!
[quote=admin]
Ахуенный пост бро. Если не сложно, можешь написать про анализ вирусов на линуксе? Я могу тебе даже дать свой для проверки.
[/quote]
Спасибо! Я никогда не смотрел вирусы на линукс, было бы интересно. Можешь скинуть ссылку на файлообменник с билдом?
Ахуенный пост бро. Если не сложно, можешь написать про анализ вирусов на линуксе? Я могу тебе даже дать свой для проверки.
[/quote]
Спасибо! Я никогда не смотрел вирусы на линукс, было бы интересно. Можешь скинуть ссылку на файлообменник с билдом?
Login to reply.