134 lines
2.5 KiB
C#
134 lines
2.5 KiB
C#
using System.Diagnostics;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Reflection;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace AxCopilot.Security;
|
|
|
|
internal static class AntiTamper
|
|
{
|
|
private static readonly string[] TrustedIpPrefixes = new string[6] { "11.99.", "11.90.", "11.96.", "12.25.", "12.23.", "12.24." };
|
|
|
|
private static readonly string[] KnownDebuggers = new string[16]
|
|
{
|
|
"dnspy", "dnspy-x86", "ilspy", "dotpeek", "de4dot", "ollydbg", "x64dbg", "x32dbg", "windbg", "ida",
|
|
"ida64", "ghidra", "cheatengine", "processhacker", "fiddler", "wireshark"
|
|
};
|
|
|
|
[DllImport("kernel32.dll")]
|
|
private static extern bool IsDebuggerPresent();
|
|
|
|
[DllImport("kernel32.dll")]
|
|
private static extern bool CheckRemoteDebuggerPresent(nint hProcess, ref bool isDebuggerPresent);
|
|
|
|
public static void Check()
|
|
{
|
|
}
|
|
|
|
private static bool IsBeingDebugged()
|
|
{
|
|
if (Debugger.IsAttached)
|
|
{
|
|
return true;
|
|
}
|
|
try
|
|
{
|
|
if (IsDebuggerPresent())
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
try
|
|
{
|
|
bool isDebuggerPresent = false;
|
|
CheckRemoteDebuggerPresent(Process.GetCurrentProcess().Handle, ref isDebuggerPresent);
|
|
if (isDebuggerPresent)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static bool IsDecompilerRunning()
|
|
{
|
|
try
|
|
{
|
|
Process[] processes = Process.GetProcesses();
|
|
Process[] array = processes;
|
|
foreach (Process process in array)
|
|
{
|
|
try
|
|
{
|
|
string text = process.ProcessName.ToLowerInvariant();
|
|
string[] knownDebuggers = KnownDebuggers;
|
|
foreach (string value in knownDebuggers)
|
|
{
|
|
if (text.Contains(value))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static bool IsTrustedNetwork()
|
|
{
|
|
try
|
|
{
|
|
IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName());
|
|
IPAddress[] array = hostAddresses;
|
|
foreach (IPAddress iPAddress in array)
|
|
{
|
|
if (iPAddress.AddressFamily != AddressFamily.InterNetwork)
|
|
{
|
|
continue;
|
|
}
|
|
string text = iPAddress.ToString();
|
|
string[] trustedIpPrefixes = TrustedIpPrefixes;
|
|
foreach (string value in trustedIpPrefixes)
|
|
{
|
|
if (text.StartsWith(value))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool VerifyAssemblyIntegrity()
|
|
{
|
|
try
|
|
{
|
|
Assembly executingAssembly = Assembly.GetExecutingAssembly();
|
|
AssemblyName name = executingAssembly.GetName();
|
|
return name.Version != null && name.Name == "AxCopilot";
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|