|
@ -0,0 +1,76 @@ |
|
|
|
|
|
using System; |
|
|
|
|
|
using System.IO; |
|
|
|
|
|
using UnityEngine; |
|
|
|
|
|
using Steamworks; |
|
|
|
|
|
|
|
|
|
|
|
namespace IPA.Utilities.AntiPiracy |
|
|
|
|
|
{ |
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Provides checks for whether or not the game is pirated.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static class PiracyChecks |
|
|
|
|
|
{ |
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Runs through a list of checks to detect whether a game is pirated
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static bool IsPirated |
|
|
|
|
|
{ |
|
|
|
|
|
get |
|
|
|
|
|
{ |
|
|
|
|
|
// Check for spoofed Steam Client
|
|
|
|
|
|
if (BeatSaber.ReleaseType == BeatSaber.Release.Steam && IsSpoofedSteam()) |
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
// Check for the presence of known pirated files
|
|
|
|
|
|
if (HasKnownFiles()) |
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
// If we get here, probably not a pirate
|
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Check common Steam Emulator values for red flags
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
static bool IsSpoofedSteam() |
|
|
|
|
|
{ |
|
|
|
|
|
// Always resolves to "IGGGAMES"
|
|
|
|
|
|
string userName = SteamFriends.GetFriendPersonaName(SteamUser.GetSteamID()); |
|
|
|
|
|
|
|
|
|
|
|
// Always resolves to "SteamFriends"
|
|
|
|
|
|
string friendName = SteamFriends.GetFriendPersonaName(new CSteamID(76561198042581607)); |
|
|
|
|
|
|
|
|
|
|
|
// Return if they both resolve to known spoofed values
|
|
|
|
|
|
return userName == "IGGGAMES" && friendName == "SteamFriends"; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Check for files that are present in pirated copies
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
static bool HasKnownFiles() |
|
|
|
|
|
{ |
|
|
|
|
|
// All known files
|
|
|
|
|
|
string[] paths = new string[] |
|
|
|
|
|
{ |
|
|
|
|
|
Path.Combine(Application.dataPath, "Plugins", "valve.ini"), |
|
|
|
|
|
Path.Combine(Application.dataPath, "Plugins", "steam.ini"), |
|
|
|
|
|
Path.Combine(Application.dataPath, "Plugins", "huhuvr.ini"), |
|
|
|
|
|
Path.GetFullPath(Path.Combine(Application.dataPath, "..", "SmartSteamEmu.ini")), |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// Check for the existence of each file
|
|
|
|
|
|
foreach (string path in paths) |
|
|
|
|
|
{ |
|
|
|
|
|
// If one is found, probably pirated
|
|
|
|
|
|
if (File.Exists(path)) |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |