r2mods/ilspy_dump/ror2_csproj/SteamAPIValidator/SteamApiValidator.cs

76 lines
2.0 KiB
C#

using System;
using System.Runtime.InteropServices;
using System.Text;
namespace SteamAPIValidator;
public static class SteamApiValidator
{
private const int MAX_PATH_SIZE = 32767;
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern uint GetModuleFileName([In] IntPtr hModule, [Out] StringBuilder lpFilename, [In][MarshalAs(UnmanagedType.U4)] int nSize);
public static bool IsValidSteamApiDll()
{
string text = (Environment.Is64BitProcess ? "steam_api64.dll" : "steam_api.dll");
IntPtr intPtr = GetModuleHandle(text);
if (intPtr == IntPtr.Zero)
{
intPtr = LoadLibrary(text);
}
if (intPtr == IntPtr.Zero)
{
return false;
}
if (intPtr != IntPtr.Zero)
{
StringBuilder stringBuilder = new StringBuilder(32767);
if (GetModuleFileName(intPtr, stringBuilder, 32767) != 0)
{
return CheckIfValveSigned(stringBuilder.ToString());
}
}
return false;
}
public static bool IsValidSteamClientDll()
{
IntPtr moduleHandle = GetModuleHandle(Environment.Is64BitProcess ? "steamclient64.dll" : "steamclient.dll");
if (moduleHandle != IntPtr.Zero)
{
StringBuilder stringBuilder = new StringBuilder(32767);
if (GetModuleFileName(moduleHandle, stringBuilder, 32767) != 0)
{
return CheckIfValveSigned(stringBuilder.ToString());
}
}
return false;
}
private static bool CheckIfValveSigned(string filePath)
{
try
{
IntPtr phCertStore = IntPtr.Zero;
IntPtr phMsg = IntPtr.Zero;
IntPtr ppvContext = IntPtr.Zero;
if (!WinCrypt.CryptQueryObject(1, Marshal.StringToHGlobalUni(filePath), 16382, 14, 0, out var _, out var pdwContentType, out var _, ref phCertStore, ref phMsg, ref ppvContext))
{
return false;
}
return pdwContentType == 10;
}
catch
{
return false;
}
}
}