76 lines
2.0 KiB
C#
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;
|
||
|
}
|
||
|
}
|
||
|
}
|