using System; using System.Reflection; using HarmonyLib; namespace undead_universal_patch_il2cpp.Patches { [HarmonyPatch] public class BestHTTP_Unob { static string TargetTypeName = "BestHTTP.HTTPManager"; static string TargetMethodName = "SendRequest"; static string Description = "Unobfuscated BestHTTP request URL rewrite patch"; static readonly Type targetType = AccessTools.TypeByName(TargetTypeName); static readonly Type requestType = AccessTools.TypeByName("BestHTTP.HTTPRequest"); static readonly MethodInfo targetMethod = AccessTools.Method(targetType, TargetMethodName, [requestType]); static bool Prepare() { if (targetType == null) { Plugin.Log.LogWarning($"'{Description}' disabled. The type for this patch was not found."); return false; } if (targetMethod == null) { Plugin.Log.LogWarning($"'{Description}' disabled. The method for this patch was not found."); return false; } Plugin.Log.LogInfo($"'{Description}' succeeded validation."); return true; } static MethodBase TargetMethod() => targetMethod; [HarmonyPrefix] static bool Prefix(ref object request) { PropertyInfo uriProperty = AccessTools.Property(requestType, "Uri"); if (uriProperty == null) { Plugin.Log.LogFatal("BestHTTP_Unob failed: uriProperty was null."); return false; } var uriInstance = (Il2CppSystem.Uri)uriProperty.GetValue(request, null); if (uriInstance == null) { Plugin.Log.LogFatal("BestHTTP_Unob failed: uriInstance was null."); return false; } if (GenericConfig.LogAllRequests.Value) Plugin.Log.LogInfo($"BestHTTP_Unob request (Before) URL: {uriInstance.ToString()}"); Il2CppSystem.Uri newUri = new(uriInstance.ToString().Contains("ns.rec.net") ? NameserverConfig.NewUrl.Value : uriInstance.ToString()); if (GenericConfig.LogAllRequests.Value) Plugin.Log.LogInfo($"BestHTTP_Unob request (After) URL: {newUri.ToString()}"); uriProperty.SetValue(request, NameserverConfig.Rewrite.Value ? newUri : uriInstance, null); return true; } } }