private static IntPtr[] GetPointers(IntPtr unityplayer, int unityplayer_size, string[] possible_signatures) { foreach (string signature in possible_signatures) { IntPtr[] ptrs = CppUtils.SigscanAll(unityplayer, unityplayer_size, signature); if (ptrs.Length > 0) { return(ptrs); } } return(null); }
public unsafe override void Setup() { if (!PatchMonoExport()) { Logger.Error("Web Connection based C# Methods may not work as intended."); return; } if (!PatchIl2CppExport()) { Logger.Error("Web Connection based C# Methods may not work as intended."); return; } IntPtr unityplayer = GetUnityPlayerModule(out int unityplayer_size); if (unityplayer == IntPtr.Zero) { return; } IntPtr[] ptrs = null; if (MelonUtils.IsGame32Bit()) { ptrs = CppUtils.SigscanAll(unityplayer, unityplayer_size, "A1 ?? ?? ?? ?? 85 C0 0F 85 68 01 00 00 A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? B8 ?? ?? ?? ?? C7 05"); } else { ptrs = CppUtils.SigscanAll(unityplayer, unityplayer_size, "48 8B 0D ?? ?? ?? ?? 48 85 C9 0F 85 DC 01 00 00 48 8B 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 89 05"); } if (ptrs.Length <= 0) { if (MelonUtils.IsGame32Bit()) { ptrs = CppUtils.SigscanAll(unityplayer, unityplayer_size, "A1 ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? 85 C0 0F 85 68 01 00 00 A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? A1 ?? ?? ?? ?? A3 ?? ?? ?? ?? B8 ?? ?? ?? ?? C7 05"); } else { ptrs = CppUtils.SigscanAll(unityplayer, unityplayer_size, "48 8B 0D ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 85 C9 0F 85 DC 01 00 00 48 8B 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 89 05"); } } if (ptrs.Length <= 0) { Logger.Error("InstallUnityTlsInterface was not found!"); Logger.Error("Web Connection based C# Methods may not work as intended."); return; } foreach (IntPtr ptr in ptrs) { byte *i = (byte *)ptr.ToPointer(); if (*i == 0 || (*i & 0xF) == 0xF) { continue; } Logger.Msg("Calling InstallUnityTlsInterface..."); dInstallUnityTlsInterface installUnityTlsInterface = (dInstallUnityTlsInterface)Marshal.GetDelegateForFunctionPointer(ptr, typeof(dInstallUnityTlsInterface)); installUnityTlsInterface(); break; } }