<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Flopo4o</title><author><name>Flopo4o</name></author><id>https://teletype.in/atom/flopo4o</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/flopo4o?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@flopo4o?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=flopo4o"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/flopo4o?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-10T09:13:04.592Z</updated><entry><id>flopo4o:csgo-idle</id><link rel="alternate" type="text/html" href="https://teletype.in/@flopo4o/csgo-idle?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=flopo4o"></link><title>IDLE на запросах.</title><published>2025-03-16T18:10:50.568Z</published><updated>2025-03-16T18:32:15.021Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b4/7b/b47b6e3c-e782-4837-9604-979a06ca7c80.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/e4/1d/e41d6681-35d3-43d4-8a97-d79aaa0d3ae7.png&quot;&gt;IDLE на запросах.</summary><content type="html">
  &lt;blockquote id=&quot;6gvl&quot;&gt;Данная статья носит исключительно образовательный характер. Автор не несёт ответственности за любой ущерб, причинённый читателями третьим лицам или сервисам при использовании полученных знаний.&lt;/blockquote&gt;
  &lt;blockquote id=&quot;kqiZ&quot;&gt;Любые упоминания сторонних лиц и сервисов в статье используются исключительно в контексте изложения материала и не несут рекламного характера.&lt;/blockquote&gt;
  &lt;p id=&quot;OnzJ&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Вступление&quot;&gt;Вступление&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Trlx&quot;&gt;Хола бола, у микрофона &lt;a href=&quot;https://t.me/flopo4o&quot; target=&quot;_blank&quot;&gt;Флопа&lt;/a&gt;.&lt;/p&gt;
    &lt;p id=&quot;bXw7&quot;&gt;В данной статье будет рассмотрен способ IDLE-фарма без окон.&lt;/p&gt;
    &lt;p id=&quot;dHAi&quot;&gt;Наверняка каждый олд помнит, как прекрасно было фармить кейсы без прайма. Для этого необходимо было приобрести специальный сервер.&lt;/p&gt;
    &lt;p id=&quot;7gG2&quot;&gt;Сервер состоял из минималистичной карты и ключевого элемента – плагина &amp;quot;&lt;strong&gt;Drop Summoner&lt;/strong&gt;&amp;quot;. Этот плагин был создан разработчиками кастомных серверов Steam исключительно для развлечения. Однако авторы не осознавали истинный потенциал своего творения, чего не скажешь о фермерах, которые быстро поняли его практическую ценность.&lt;/p&gt;
    &lt;p id=&quot;Nld8&quot;&gt;Суть фарма заключалась в следующем: нужно было одновременно подключить к серверу не менее двух аккаунтов(максимум 64) и удерживать их на сервере в течение 4 часов. &lt;strong&gt;Плагин каждые 5 минут пытался призвать выпадение дропа для каждого подключенного аккаунта.&lt;/strong&gt; Если аккаунт успешно получал дроп, плагин автоматически исключал его из списка активных участников.&lt;/p&gt;
    &lt;p id=&quot;i5N1&quot;&gt;Самым известным поставщиком серверов был Rexto, который, в том числе, использовал плагин от разработчика под ником Феникс.&lt;/p&gt;
    &lt;p id=&quot;Ziuo&quot;&gt;В конечном итоге данный плагин инициировал запрос k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops, это единственное для чего он нужен был, в версиях дороже была отправка о дропе в ТГ канал.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;YyCc&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Безопасность&quot;&gt;Безопасность&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Lrpo&quot;&gt;На самом деле IDLE-фарм был самым безопасным методом из всех существовавших и существующих на текущий момент. &lt;strong&gt;Ни клиент, ни сервер не передавали никакой информации о действиях игроков на сервере.&lt;/strong&gt; Steam воспринимал одинаково, бегаете ли вы или стоите без движения. Единственной информацией, передаваемой в систему, были количество убийств и текущий опыт.&lt;/p&gt;
    &lt;p id=&quot;j0c0&quot;&gt;Скорее всего, именно из-за этого Valve приняли решение изменить систему дропа, так как определить и заблокировать аккаунты по паттерну &amp;quot;афк на сервере&amp;quot; было невозможно, ведь Steam не имел данных о реальном поведении игроков.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;NQsq&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Немного-о-Tedon&quot;&gt;Немного о Tedon&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;pZqt&quot;&gt;На просторах GitHub появился проект &lt;a href=&quot;https://github.com/yourmnbbn/tiny-steam-client&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;tiny-csgo-client&lt;/strong&gt;&lt;/a&gt;. Именно на его базе и был создан известный фарм без окон, когда множество процессов Steam запускались через песочницу, и к каждому подключался Tiny Client.&lt;/p&gt;
    &lt;p id=&quot;zPLq&quot;&gt;&lt;strong&gt;В конечном итоге Tedon взял этот проект без каких-либо модификаций и нагло выдал его за свою разработку.&lt;/strong&gt; Изначально всё было понятно, когда софт для фарма на запросах работает, а обыкновенная программа для запуска аккаунтов в авасте постоянно вылетает. Что было своровано, а что разработано)&lt;/p&gt;
    &lt;p id=&quot;l28O&quot;&gt;До сих пор у этих ребят осталась своя фишка в виде бесконечного обилия багов.&lt;/p&gt;
    &lt;p id=&quot;mkAY&quot;&gt;К большому удивлению, Tedon не воспользовался смежным проектом — &lt;a href=&quot;https://github.com/yourmnbbn/tiny-csgo-server&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;tiny-csgo-server&lt;/strong&gt;&lt;/a&gt;, который позволял запускать IDLE-сервер без возможности прямого подключения игроков, но при этом корректно выполнял все запросы, необходимые для выпадения кейсов.&lt;/p&gt;
    &lt;p id=&quot;Y4m2&quot;&gt;Данная часть написана не с целью кого-либо оскорбить, а для того, чтобы отдать должное настоящим разработчикам, заслуживающим внимания и признания, чьи проекты были использованы без упоминания авторства.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;fnFN&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Техническая-реализация-Tiny-Client&quot;&gt;Техническая реализация Tiny Client&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;gwRY&quot;&gt;Поскольку Steam Client написан на C++ это даёт возможность вызывать методы через публичные интерфейсы, они были разработаны для внутриигрового взаимодействия. Старые версии этих интерфейсов имели скрытые возможности по авторизации, получения &lt;strong&gt;TICKET &lt;/strong&gt;для игр Valve с помощью вызова метода, этим и воспользовался разработчик. Он подключался к уже существующему Steam клиенту и вызывал методы, как это делает игра.&lt;/p&gt;
    &lt;p id=&quot;4MIU&quot;&gt;Информация о них расположена тут: &lt;a href=&quot;https://github.com/alliedmodders/hl2sdk/tree/csgo&quot; target=&quot;_blank&quot;&gt;https://github.com/alliedmodders/hl2sdk/tree/csgo&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;zpY9&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Техническая-реализация-нашей-версии&quot;&gt;Техническая реализация нашей версии&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;RVKn&quot;&gt;Проект для фарма без окон и без использования Steam-клиентов был реализован на .NET с помощью библиотеки &lt;a href=&quot;https://github.com/SteamRE/SteamKit&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;SteamKit2&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
    &lt;p id=&quot;4849&quot;&gt;Основой сетевого клиентского обмена информацией в Steam является протокол &lt;strong&gt;Protobuf&lt;/strong&gt;.&lt;/p&gt;
    &lt;p id=&quot;NoeH&quot;&gt;В самой библиотеке SteamKit2 уже присутствует множество примеров авторизации, доступных в официальном репозитории, поэтому здесь мы сразу перейдём к сути процесса.&lt;/p&gt;
    &lt;p id=&quot;SOYm&quot;&gt;Система работы была следующей:&lt;/p&gt;
    &lt;h3 id=&quot;Клиент:&quot;&gt;Клиент:&lt;/h3&gt;
    &lt;ol id=&quot;ntzi&quot;&gt;
      &lt;li id=&quot;ZTWf&quot;&gt;Подключение к игровому координатору (EGCBaseClientMsg.k_EMsgGCClientHello).&lt;/li&gt;
      &lt;li id=&quot;Nrj5&quot;&gt;Инициализация подключения к серверу матчмейкинга (ECsgoGCMsg.k_EMsgGCCStrike15_v2_MatchmakingGC2ClientHello).&lt;/li&gt;
      &lt;li id=&quot;f4ew&quot;&gt;Запрос на подключение к эмулированному IDLE-серверу (ECsgoGCMsg.k_EMsgGCCStrike15_v2_ClientRequestJoinServerData).&lt;/li&gt;
      &lt;li id=&quot;goS5&quot;&gt;Далее необходимо было создать так называемый &lt;strong&gt;TICKET&lt;/strong&gt;, подтверждающий прохождение проверки VAC. Одним из ключевых условий была защита сервера с помощью VAC, поэтому требовалось формировать подпись, подтверждающую успешную верификацию модуля VAC. Это являлось наиболее сложной частью программы, так как малейшая ошибка приводила к отказу подключения с соответствующей VAC-ошибкой, аналогичной той, которая периодически возникает и в официальном клиенте CS.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;p id=&quot;T4yn&quot;&gt;Созданный &lt;strong&gt;TICKET &lt;/strong&gt;отправлялся в Steam и передавался серверу, который также должен был отправить его в Steam для подтверждения корректности подключения.&lt;/p&gt;
    &lt;p id=&quot;6BOM&quot;&gt;После успешной верификации тикета у аккаунта появлялось 15 минут, в течение которых время нахождения на сервере засчитывалось Steam. По истечении этого времени тикет необходимо было обновлять и заново проходить процедуру верификации.&lt;/p&gt;
    &lt;h3 id=&quot;Сервер:&quot;&gt;Сервер:&lt;/h3&gt;
    &lt;ol id=&quot;3ybV&quot;&gt;
      &lt;li id=&quot;YJ6u&quot;&gt;Авторизация через анонимного пользователя, что доступно для игровых серверов.&lt;/li&gt;
      &lt;li id=&quot;Vvcb&quot;&gt;Отправка базовой информации сервера (порт, название и т.д.) с помощью сообщения (EMsg.GSServerType).&lt;/li&gt;
      &lt;li id=&quot;T6K2&quot;&gt;Инициализация подключения осуществлялась отправкой информации о текущих подключённых клиентах, их пинге и других параметрах (EMsg.AMGameServerUpdate).&lt;/li&gt;
      &lt;li id=&quot;XsBY&quot;&gt;При каждом новом подключении клиента сервер должен был отправлять обновления (EMsg.AMGameServerUpdate) с актуальной информацией о подключённых клиентах и сетевой статистикой.&lt;/li&gt;
      &lt;li id=&quot;TLvy&quot;&gt;Каждые 3 минуты отправлялся запрос (ECsgoGCMsg.k_EMsgGCCStrike15_v2_MatchmakingServerReservationResponse), подтверждающий, что клиент провёл необходимое время на сервере для засчитывания игрового времени Steam.&lt;/li&gt;
      &lt;li id=&quot;2NRk&quot;&gt;Каждые 5 минут отправлялся запрос (ECsgoGCMsg.k_EMsgGCCStrike15_v2_MatchEndRunRewardDrops), инициирующий процесс выпадения дропа на аккаунтах.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;p id=&quot;N5xj&quot;&gt;Благодаря эмуляции, серверу и клиенту не надо было иметь постоянное соединение через сокет, как это реализовано в Tiny Server и официальном сервере Steam. Надо было лишь уведомить Steam с помощью клиента и сервера, что аккаунт успешно авторизовался.&lt;/p&gt;
    &lt;p id=&quot;mzLs&quot;&gt;Также важной необходимо было поддерживать так называемый HeartBeat, специальные системные сообщения, которые говорят Steam сети, что клиент активен. Это надо делать со стороны сервера и клиента.&lt;/p&gt;
  &lt;/section&gt;

</content></entry></feed>