<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@brainwashingmachine</title><generator>teletype.in</generator><description><![CDATA[@brainwashingmachine]]></description><link>https://teletype.in/@brainwashingmachine?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=brainwashingmachine</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/brainwashingmachine?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/brainwashingmachine?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Thu, 30 Apr 2026 02:46:30 GMT</pubDate><lastBuildDate>Thu, 30 Apr 2026 02:46:30 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@brainwashingmachine/5YL6VkgdBUK</guid><link>https://teletype.in/@brainwashingmachine/5YL6VkgdBUK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=brainwashingmachine</link><comments>https://teletype.in/@brainwashingmachine/5YL6VkgdBUK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=brainwashingmachine#comments</comments><dc:creator>brainwashingmachine</dc:creator><title>[HTB_Sherlock] Novitas Write-Up</title><pubDate>Thu, 03 Jul 2025 19:53:00 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/ca/df/cadfcaab-892c-4424-b027-6e31208ce038.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/3a/f0/3af0ffdb-878d-421b-afad-a461474891a2.jpeg"></img>тгк: https://t.me/brainwashingmachine]]></description><content:encoded><![CDATA[
  <p id="82j1">тгк: <a href="https://t.me/brainwashingmachine" target="_blank">https://t.me/brainwashingmachine</a></p>
  <p id="8aYe">На этот раз я проводил анализ вредоносного файла, не имея самого файла. Вместо него есть кое-что получше — сырой бинарный дамп оперативной памяти, сделанный на заражённой системе через DumpIt. Что это значит? Это просто побайтовый «снимок» содержимого RAM как есть — один огромный файл без какой-то структуры.</p>
  <p id="KV7L">Почему так вышло? Давайте почитаем описание:</p>
  <p id="Gk3N">«Recently, Binz received a request via email to create a 3D model for a client&#x27;s family. Upon downloading and opening the provided files, he observed unusual system behavior that raised suspicion. Acting on instinct, he promptly deleted the files; however, he remained concerned that the system might still be compromised. In response, we acquired a full memory dump from the affected machine for in-depth malware analysis. The objective of this investigation is to identify indicators of compromise (IOCs) that can be integrated into our Endpoint Detection and Response (EDR) systems, as we suspect the use of a novel and sophisticated infection vector.»</p>
  <p id="lncl">Пользователь открыл вредоносный файл, который злоумышленник прислал на почту, открыл его, понял, что что-то не так, испугался и удалил все файлы в надежде на то, что это исправит ситуацию. Тем самым, он оставил нас без сэмпла и теперь, прежде чем приступить к анализу файла, надо его ещё как-то восстановить из дампа.</p>
  <p id="JGGH">В целом, имея такой расклад, есть не так много опций:</p>
  <p id="Dofb">1. Вы можете закинуть дамп в HxD или в другой hex-редактор и искать какие-то артефакты. Я вот, к примеру, выгрузил все строки через strings и у меня вышло около 900к строк — искать там что-то тяжело, особенно если не знаешь что именно ты ищешь. Ещё я придумал, что можно по заголовку PE-файла искать бинари, которые были загружены в памяти во время снятия дампа, но получилось около 2к .exe-шников, искать среди них что-то тоже сложно, если не знаешь что именно ищешь и по какому адресу. Однако, забегая вперёд, могу сказать, что кое-что я всё же смог обнаружить путём простого поиска.</p>
  <p id="CTIR">2. Использовать volatility3, либо volatility2. У них немного разный функционал, 2 версия, например, умеет дампить память процесса, а 3 версия так не умеет. А ещё 2 версия написана на python2, так что придётся ещё и его накатить - впрочем, гайдов по установке в интернете хватает.</p>
  <p id="fHBo">3. Использовать MemProcFS – эта тулза проанализирует дамп, создаст на вашей системе отдельный том и разместит в нём всю собранную информацию, раскидав всё по папкам — штука удобная, полезная, быстрая.</p>
  <p id="jtT0"></p>
  <p id="GKgT">Перейдём к заданиям:</p>
  <h3 id="VHBL"><strong>0x0 | Узнать когда был запущен «подозрительный» процесс.</strong></h3>
  <p id="tPt0">Задание подразумевает, что необходимо обнаружить «подозрительный» процесс, который был запущен после того, как был открыт вредоносный файл.</p>
  <p id="e3C4">Первое, что приходит на ум — посмотреть список процессов с отображением того, как они были запущены через командную строку.</p>
  <p id="2AMv">Выполняем команду:</p>
  <p id="abmV"><strong>«vol -f %здесь_путь_до_дампа% windows.cmdline.CmdLine»</strong></p>
  <p id="CuR8">И смотрим что есть. Надо полагать, мы ищем процесс, в котором фигурирует какой-нибудь подозрительный файл.</p>
  <p id="7Vzr">И такой файл находится:</p>
  <figure id="3qdJ" class="m_column">
    <img src="https://img2.teletype.in/files/5e/6b/5e6b7632-6b72-44b6-b0a1-cd309a3a41e1.png" width="1906" />
  </figure>
  <p id="fC0o">Теперь можно сказать как именно файл попал в систему и что он начал делать после запуска. Это msc-скрипт, под видом изображения был отправлен жертве, хотя вроде даже не замаскирован никак. Очень странно, что пользователь не обратил внимание на его расширение. Можно увидеть, что он лежит в директории, куда MSEdge сохраняет скачанные файлы, значит пользователь получил его откуда-то с почты, открытой в браузере, скачал, открыл файлик и вредоносный процесс стартовал. PID процесса 3120 — посмотрим на этот процесс через другую опцию, которая покажет время запуска:</p>
  <p id="tmxK"><strong>«vol -f %здесь_путь_до_дампа% windows.pslist –pid 3120»</strong></p>
  <figure id="bC9k" class="m_column">
    <img src="https://img3.teletype.in/files/20/74/20748e9d-99a9-434d-badd-0485474319c7.png" width="1362" />
  </figure>
  <p id="YpGK">Получаем время запуска процесса и ответ к первому заданию.</p>
  <p id="cEZ4"></p>
  <h3 id="RRNi">0x1 | Узнать размер архива, в котором содержится вредоносное ПО.</h3>
  <p id="zQhq">Покопавшись в дампе, нашёл веб-запросы, через которые был получен даже не family_image.msc, а family_image.zip! И даже можно глянуть сурс этого файла.</p>
  <figure id="bG41" class="m_column">
    <img src="https://img1.teletype.in/files/80/60/80602997-eff0-40c0-940d-3244b22d23ce.png" width="1018" />
  </figure>
  <p id="e0Yh">То есть изначально пользователь получил архив. К сожалению, поскольку пользователь удалил все эти файлы, то в файловой системе искать их смысла нету. Но есть вариант попробовать поискать архивы через hex-редактор напрямую в дампе.</p>
  <p id="89Bm">Для этого надо вспомнить какая вообще структура у zip-архива:</p>
  <figure id="jo95" class="m_original">
    <img src="https://img2.teletype.in/files/d7/9f/d79f5881-d6b9-4409-a5d0-b62fb519c7a2.png" width="733" />
  </figure>
  <p id="wrS4">Есть некоторый local file header, по которому мы можем поискать какие-то заархивированные файлы в памяти. Можно также поискать central directory file хэдеры, чтобы понять сколько файлов в архиве.</p>
  <p id="E6rU">Проблема в том, что файл архива «разбросан» по дампу и собрать его при всём желании не получится. Однако, можно найти directory file header, посмотреть сколько файлов в архиве, их размер, добавить также размер заголовков и мы получим по идее размер архива.</p>
  <p id="nWMw">Структура CentralDirectoryFileHeader выглядит так:</p>
  <figure id="o7Ej" class="m_column">
    <img src="https://img4.teletype.in/files/fa/75/fa753ccd-c8d3-4622-b8ce-a7df6bc1fd69.png" width="1345" />
  </figure>
  <p id="D2ne">Ищем “family_image.msc” и рядом байтики 0x50, 0x4b, 0x01, 0x02:</p>
  <figure id="xb7H" class="m_column">
    <img src="https://img2.teletype.in/files/90/6e/906ee8f9-ca78-44a4-9a2e-79721d804d94.png" width="1218" />
  </figure>
  <p id="U5mi">Долго искать не приходится, я выделил всё, на что стоит обратить внимание — есть второй файл, есть его сжатый размер (поле CompressedSize), ну и размер первого файла.</p>
  <p id="SkZA">0x180f5b + 0x6042c = 0x1e1387 = 1971079 байт сжатых данных.</p>
  <p id="bMv1">Прибавим заголовки, размер которых составит здесь 354 байта — это и поля фиксированного размера, и всякие FileName, ExtraField, .ZIP file comment field, где размер может быть произвольным.</p>
  <p id="3y3r">Получится 1971433 байта. Конечно, я мог бы использовать какие-то инструменты, но мне стало интересно сколько я смогу выжать из дампа, не используя никаких инструментов.</p>
  <p id="ODhQ">А так можно было бы глянуть через RBCmd удалённые файлы, можно было бы найти там архив и его размер.</p>
  <p id="YXJB">Также я решил ради любопытства глянуть где мог засветиться размер архива и можно было ли как-то ещё его узнать, не используя инструментов и не собирая размер заголовков и сжатых данных вручную. И вот что я нашёл:</p>
  <figure id="sDud" class="m_column">
    <img src="https://img4.teletype.in/files/f3/a7/f3a721f9-f9b5-4f9b-94b6-fbd4bd23ef82.png" width="769" />
  </figure>
  <figure id="Bhq4" class="m_original">
    <img src="https://img2.teletype.in/files/1e/f4/1ef41946-249e-4079-ac84-3b10ad15a7fd.png" width="639" />
  </figure>
  <figure id="Fy2R" class="m_column">
    <img src="https://img3.teletype.in/files/22/9c/229c0741-4e0c-4bec-a3ec-f76d5989f465.png" width="837" />
  </figure>
  <p id="vhP7">Вот пища для размышлений. Удалённый файл оставил довольно много артефактов в дампе.</p>
  <p id="owaw">Выделен размер файла. В целом, если вы знаете название файла, можете попробовать поискать такие записи — вбиваете название файла, разделяя каждый символ байтом 0x00, отсчитываете 7 байт от первого символа и можете получить его размер. Есть шанс, что это сработает.</p>
  <p id="WyBH">К слову, я по началу даже решил слепить архив из того, что удалось найти и даже смог его распаковать! Но архив был неполный и я получил только часть вредоносного файла — буквально первую сотню строк. В процессе всего этого, я обнаружил, что архив запаролен и умудрился в дампе отыскать пароль:</p>
  <figure id="GkP0" class="m_column">
    <img src="https://img4.teletype.in/files/76/f4/76f4ab0f-0a37-4ef4-afd6-d08b1d52fc90.png" width="1210" />
  </figure>
  <p id="4Isp">Из задания я понял, что пользователя зовут Binz, ну и решил поискать что-то в дампе, связанное с именем пользователя. В результате чего я получил текст письма, где содержался пароль от архива с вредоносным файлом.</p>
  <p id="Igds">Ну вдобавок нашёл какие-то данные самого пользователя:</p>
  <figure id="I4Q4" class="m_column">
    <img src="https://img3.teletype.in/files/ee/63/ee631d38-6f80-4fad-9dda-1589ae114d1f.png" width="809" />
  </figure>
  <p id="NFtW">В письме злоумышленник представился как Lyoko и это позволило мне отыскать почту, с которой пришло письмо.</p>
  <figure id="hj8G" class="m_column">
    <img src="https://img3.teletype.in/files/63/dc/63dc4939-4bc5-4add-98f9-c5706baf0e46.png" width="1037" />
  </figure>
  <p id="mZzu">Понятное дело, что задание не требует от меня искать эту информацию, но в контексте реального расследования инцидента это могло бы пригодиться, как мне кажется.</p>
  <p id="r2gF"></p>
  <h3 id="vf9Q">0х2 | Перечислить содержимое архива, содержащего вредоносный файл</h3>
  <p id="624W">см. 0х1</p>
  <p id="QZ2m">family_image.zip, family_image.obj</p>
  <p id="MZtQ"></p>
  <h3 id="qhuZ">0х3 | Сколько нативных модулей было загружено во вредоносный процесс.</h3>
  <p id="DkTr">В первую очередь надо понять что есть нативный модуль. Процесс в Windows может использовать системные библиотеки.</p>
  <p id="tqlO">Эти библиотеки могут быть написаны, к примеру, на С или каком-нибудь другом языке. Так вот, нативный модуль — это библиотека, написанная на С/С++, к примеру, которая скомпилирована в нативный машинный код, который выполняется процессором напрямую.</p>
  <p id="HLjj">Чтобы упростить жизнь разработчикам ПО, Microsoft придумали также платформу .NET и CLR-модули (Common Language Runtime), которые в сущности позволяют писать какие-то программы на разных ЯП, а также дают кроссплатформенность. Но об этом лучше почитать в гугле самостоятельно.</p>
  <p id="J73k">Нативные модули лежат в C:\Windows\system32\</p>
  <p id="uzEq">А CLR-модули лежат в C:\Windows\assembly\</p>
  <p id="DTFc">Пока что это всё, что нужно знать.</p>
  <p id="Btb7">Итак, под модулями подразумеваются .dll, значит надо глянуть список библиотек, загруженных процессом.</p>
  <p id="SxyN">Выполняем такую команду:</p>
  <figure id="HuAE" class="m_column">
    <img src="https://img1.teletype.in/files/ca/63/ca6324d9-9433-4476-a98d-19c78c96d311.png" width="1418" />
  </figure>
  <p id="jj88">И получаем список из 102 модулей, включая сам mmc.exe</p>
  <p id="BoUB">В списке есть 4 библиотеки, которые лежат в C:\Windows\assembly и являются CLR-модулями. Таким образом, получается 98 нативных модулей.</p>
  <p id="9zob"></p>
  <h3 id="StA1">0х4 | Выяснить адреса сборки CLR-модулей которые были загружены во вредоносный процесс.</h3>
  <p id="AhGS">Из полученного списка мы можем увидеть 4 CLR-модуля:</p>
  <figure id="vi8n" class="m_column">
    <img src="https://img1.teletype.in/files/03/50/0350dc2b-2def-497d-a584-6c32e15a2a50.png" width="1700" />
  </figure>
  <p id="gDWt">mscorlib.ni.dll</p>
  <p id="rIL8">System.ni.dll</p>
  <p id="KZGr">System.Xml.ni.dll</p>
  <p id="e2Us">SystemCore.ni.dll</p>
  <p id="trsV">Но задание намекает, что модулей 5. Вообще, я на этом этапе уже успел изучить отрывок MMC-файла и понял, что он подгружает ещё одну .dll в процессе выполнения и она, конечно же, не отображается в файловой системе. Что делать? На помощь приходит MemProcFS, который сразу сделает дампы процессов в разнообразных формах. Надо лишь забросить такой дамп в WinDbg, он умеет искать в дампах CLR-модули и может показать нам оставшийся модуль.</p>
  <p id="uWDC">Адрес сборки это уникальное значение, которое присваивается модулю в процессе его использования — он каждый раз будет разным и найти его просто так в сыром дампе — ну очень, очень проблемно.</p>
  <p id="DJue">Кстати, если сделать дамп памяти процесса через Volatility2, то WinDbg почему то его не кушает и ругается, поэтому кроме как через MemProcFS других вариантов и не осталось.</p>
  <p id="xoLG">Идём в \\MemProcFS\pid\3120\minidump и открываем minidump.dmp в WinDbg</p>
  <p id="C6QF">Открываем View → Command</p>
  <p id="qTf0">И вводим следующее:</p>
  <p id="gIkg">!dumpdomain</p>
  <p id="m6bU">Модуль SOS подгрузит информацию о CLR-модулях, которые присутствуют в дампе памяти процесса.</p>
  <p id="hipc">Получим ответ:</p>
  <p id="H8Ls">0000000004e62fd0,0000000004e630f0,0000000004f63690,0000000004f638d0,0000000004f63b10</p>
  <p id="BvAd"></p>
  <h3 id="ivLW">0x5 | Выяснить название вредоносного модуля</h3>
  <p id="JYfh">Выгрузив информацию о CLR-модулях — там так же присутствуют и имена.</p>
  <figure id="EFsp" class="m_column">
    <img src="https://img3.teletype.in/files/ec/e8/ece83530-272a-48b8-9a38-1b194a72a137.png" width="1675" />
  </figure>
  <p id="cIaO">Модуль называется <strong>Ad00bce9305554c87927205710b17699f.dll</strong></p>
  <p id="dhPJ"></p>
  <h3 id="EzSm">0x6 | Сдампить модуль и выяснить его хэш-сумму.</h3>
  <p id="wR4d">Чтобы всё это сделать, неплохо было бы восстановить сам файлик family_image.msc, точнее нагрузку, которую он в себе содержит, но в сыром дампе её строки разбросаны по кусочкам. В целом, вполне реально эти кусочки собрать — мне это удалось (не знаю, я просто решил посмотреть получится или нет). Поскольку сама нагрузка закодирована в URL и у меня было начало файла — я понял с чего начинается каждая строка, какая у неё длина. Строки обрывались на половине и чтобы понять какой фрагмент идёт следующим, я смотрел на байты файла в его раскодированном виде, искал окончание текущего фрагмента, после него сразу шли байты начала следующего. Но там ещё шеллкод довольно большой — это не самая лучшая затея.</p>
  <p id="MYL4">И потому неплохо бы вспомнить про дампы виртуальной памяти — там целостность файла должна сохраниться более менее — это значит, что его можно скопировать просто без мучений. MemProcFS как раз делает такие дампы, но их много — и всё же это лучше, чем собирать файл по кусочкам из сырого дампа.</p>
  <p id="HVq8">0x000000000006500000.vmem – это тот файлик, который нужен.</p>
  <p id="drBw">Открываем его в hex-редакторе и все, что лежит в выделенных мною скобочках, копируем.</p>
  <figure id="OWkS" class="m_column">
    <img src="https://img4.teletype.in/files/bb/b9/bbb92110-2152-4690-9ead-3c3f3b1d717a.png" width="1215" />
  </figure>
  <p id="HIWA">Я раскодировал всё из URL просто через Burp, lol – там много декодеров есть, прям CyberChef – только десктопный и работает без интернета.</p>
  <p id="ZDQx">И перед нами предстаёт такая картина:</p>
  <figure id="PNRH" class="m_column">
    <img src="https://img1.teletype.in/files/86/b6/86b654a7-ce48-4305-8f09-ff64a72c7c1c.png" width="1460" />
  </figure>
  <p id="H1Bi">Я как-то не хотел по началу запускать VBScript и как-то копаться в нём — я саму .dll извлёк путём нехитрых манипуляций с удалением лишнего, декодировал Base64 в том же Burp, ну и просто все байты закинул в HxD. Чтобы это стало читабельно я ещё использовал экстрактор из DetectItEasy, потому что это не чистый бинарь — там ещё были «мусорные» байты в начале и в конце.</p>
  <p id="WXPh">Ну и конечно я потом просто снял MD5 с получившегося файла</p>
  <figure id="lxg3" class="m_original">
    <img src="https://img4.teletype.in/files/7a/37/7a37085a-059d-48b5-8b68-6eb9c2fb6490.png" width="365" />
  </figure>
  <p id="JLRo">Хэш-сумма — e67f5692a35b8e40049e30ad04c12b41</p>
  <p id="oURK"></p>
  <h3 id="8lh9">0x7 | Выяснить какой ключ используется для XOR-шифрования строк во вредоносной .dll</h3>
  <p id="lIp9">Открываем этот файлик в dnSpy</p>
  <p id="eiHa">Сразу в глаза бросаются какие-то манипуляции со строками, закодированными в Base64</p>
  <figure id="uXSc" class="m_column">
    <img src="https://img3.teletype.in/files/eb/95/eb95b420-4c3a-4051-8fcd-63d6629bf179.png" width="1394" />
  </figure>
  <p id="Fh4T">На самом деле тут названия функций были обфусцированы — я просто попытался до этого придать им какие-то осмысленные названия.</p>
  <p id="l4EL">Логику функции смотрим и сразу видим, что это XOR-шифрование строки и ключа, который указан как один из аргументов</p>
  <figure id="6mKa" class="m_column">
    <img src="https://img4.teletype.in/files/ff/81/ff81f662-a185-424d-a969-6dbc663f544d.png" width="764" />
  </figure>
  <p id="SJ3r">Возвращаемся и видим ключ:</p>
  <figure id="hZw5" class="m_column">
    <img src="https://img2.teletype.in/files/d2/16/d2167000-80ff-4ef0-b4a4-71019e7c3e19.png" width="1372" />
  </figure>
  <p id="fmmx">Ещё можно найти функцию, которая расшифровывает кучу строк:</p>
  <figure id="t9BY" class="m_column">
    <img src="https://img2.teletype.in/files/90/de/90de771f-9463-4e59-bfc9-8a677011c98b.png" width="1333" />
  </figure>
  <p id="o4Cn">Ключ там будет один и тот же — значит это то, что нам нужно для ответа.</p>
  <p id="zY3b">Ключ для XOR-шифрования — a7ad965a-50b4-4846-bfb2-2282839f8d0c</p>
  <h3 id="BkVI"></h3>
  <h3 id="yNRI">0x8 | Выяснить IP-адрес C2-сервера, к которому подключается малварь</h3>
  <p id="IPNg">Чтобы это сделать, необходимо проанализировать шеллкод, который непосредственно всё это делает. Вредоносная .dll, которую я смотрел выше — собирает этот шеллкод и обеспечивает его работу в отдельном процессе, имеющем pid 7736 — процесс 3120 является для него родительским.</p>
  <p id="r0rC">Начинается он так:</p>
  <figure id="GhjQ" class="m_column">
    <img src="https://img2.teletype.in/files/1e/43/1e4302c1-571e-42c8-8f32-c71e828ba8e7.png" width="1776" />
  </figure>
  <p id="O6z0">Ну и дальше идут 562 аналогичных строки, это всё размещается в переменных окружения на системе и оттуда .dll их подхватывает для сборки.</p>
  <p id="vJtD">Мои попытки провернуть с шеллкодом всё то же самое, что и с вредоносной .dll, не увенчались успехом (хотя я вроде повторил процесс сборки, который был в .dll), потому придётся дебажить VBScript, который мы вырезали из дампа памяти процесса.</p>
  <p id="890b">Процесс сборки выглядит так:</p>
  <figure id="Tt2R" class="m_column">
    <img src="https://img2.teletype.in/files/17/83/1783516e-329c-4d7e-96d9-e579cf8589d1.png" width="911" />
  </figure>
  <p id="iti6">И я, конечно, пытался его воспроизвести:</p>
  <figure id="5sc3" class="m_original">
    <img src="https://img2.teletype.in/files/15/e2/15e25f09-5378-4f4e-ac21-cd9a3a90f5ae.png" width="670" />
  </figure>
  <p id="xl4g">И у меня получилось слепить шеллкод, но почему-то в оригинале, который я получил потом, было на несколько /x00 байт больше — я так и не понял почему — судя по всему, где-то в процессе сборки эти байты добавляются.</p>
  <p id="69aT">Потому я пошёл другим путём — начал пытаться задебажить VBScript. Visual Studio наотрез отказывался мне в этом помогать, выкидывая разные ошибки о невозможности присоединиться к процессу, запущенному cscript, но я нашёл программу, которая помогла мне в дебаге — VBSEdit.</p>
  <figure id="joun" class="m_column">
    <img src="https://img1.teletype.in/files/82/b8/82b8f44f-18f7-459e-9fd4-bd411c45c739.png" width="1425" />
  </figure>
  <p id="b6Da">Добавляем строчку o.CreateInstance(entry_class), ставим на неё бряку, запускаем отладку, в DNSpy прикрепляемся к cscript.exe, под которым запускается скрипт (это часть WSH – Windows Script Host) — встроенного механизма отладки.</p>
  <p id="VAr6">Шагаем до места в программе, которое идёт сразу после сборки шеллкода и сохраняем массив array как файл.</p>
  <figure id="TpB9" class="m_column">
    <img src="https://img3.teletype.in/files/2c/9e/2c9ebb80-0861-472f-a7c6-0036cde0b741.png" width="1277" />
  </figure>
  <p id="XaYl">Ну и всё, что остаётся — проанализировать массив скриптом из GitHub (<a href="https://raw.githubusercontent.com/DidierStevens/DidierStevensSuite/refs/heads/master/1768.py" target="_blank">https://raw.githubusercontent.com/DidierStevens/DidierStevensSuite/refs/heads/master/1768.py</a>)</p>
  <p id="VMfH">Получаем IP-адрес и порт C2-сервера:</p>
  <figure id="8UCr" class="m_column">
    <img src="https://img1.teletype.in/files/c9/6e/c96e28b7-eb94-46a0-b5ee-0fe4aa9ecb63.png" width="1657" />
  </figure>
  <p id="hO6k">Это шеллкод от Cobalt Strike – стареющая классика.</p>
  <p id="R451"></p>
  <h3 id="H8DA">0x9 | Снять MD5 хэш-сумму шеллкода</h3>
  <figure id="qkMC" class="m_column">
    <img src="https://img1.teletype.in/files/0b/36/0b3668f2-e843-4738-a4b8-6b4a61145692.png" width="1601" />
  </figure>
  <p id="QdJQ"></p>
  <h3 id="xilt">0xff | Эпилог</h3>
  <p id="ZgSM">В завершении скажу, что это было самое сложное, что я когда-либо решал. Многое мне тут было в новинку — особенно разбираться с CLR-модулями и отладкой VBScript – это вам не нативные бинари реверсить. Опыта было получено колоссальное количество. Путь был длинный — это заняло около месяца — конечно, я не сидел сутками за задачей, но обычно со сложными задачами справляюсь максимум за неделю плотной работы, а тут пришлось сильно запотеть.</p>
  <p id="m1F2">Атака, следы которой я искал в рамках данного задания, называется GrimResource, почитать поподробнее можно тут: <a href="https://www.elastic.co/security-labs/grimresource" target="_blank">https://www.elastic.co/security-labs/grimresource</a></p>

]]></content:encoded></item></channel></rss>