private static void HookBeforeResourcesPacking() { if (!ACTkSettings.Instance.InjectionDetectorEnabled || !InjectionRoutines.IsInjectionPossible()) { return; } if (EditorApplication.isPlayingOrWillChangePlaymode || hookBeforeResourcesPackingExecuted || hookBeforeResourcesPackingError || !BuildPipeline.isBuildingPlayer) { return; } try { hookBeforeResourcesPackingExecuted = true; EditorApplication.LockReloadAssemblies(); InjectionWhitelistBuilder.GenerateWhitelist(); } catch (Exception e) { Debug.LogError(ACTkConstants.LogPrefix + "Error at HookBeforeResourcesPacking:\n" + e); hookBeforeResourcesPackingError = true; } finally { EditorApplication.UnlockReloadAssemblies(); } }
public void OnPostBuildPlayerScriptDLLs(BuildReport report) { if (!ACTkSettings.Instance.InjectionDetectorEnabled || !InjectionRoutines.IsTargetPlatformCompatible()) { return; } InjectionWhitelistBuilder.GenerateWhitelist(); }
public void OnPreprocessBuild(BuildReport report) { if (!ACTkSettings.Instance.InjectionDetectorEnabled || !InjectionRoutines.IsTargetPlatformCompatible()) { return; } Prepare(); }
protected override bool DrawUniqueDetectorProperties() { if (!ACTkSettings.Instance.InjectionDetectorEnabled) { using (GUITools.Vertical(GUITools.PanelWithBackground)) { EditorGUILayout.Separator(); EditorGUILayout.HelpBox("Injection Detector support is not enabled! Injection Detector will not work properly", MessageType.Error, true); using (new GUILayout.HorizontalScope()) { if (GUILayout.Button("Enable Now")) { ACTkSettings.Instance.InjectionDetectorEnabled = true; } if (GUILayout.Button("Enable In settings...")) { ACTkSettings.Show(); } } EditorGUILayout.Separator(); } return true; } if (SettingsUtils.IsIL2CPPEnabled()) { EditorGUILayout.HelpBox("Mono Injections are not possible in IL2CPP, this detector is not needed in IL2CPP builds", MessageType.Info, true); return true; } if (!InjectionRoutines.IsTargetPlatformCompatible()) { EditorGUILayout.HelpBox("Injection Detection is only supported in Standalone and Android builds", MessageType.Warning, true); return true; } return false; }
private static void DidReloadScripts() { InjectionRoutines.Cleanup(); }
private static void PostBuildHook(BuildTarget buildTarget, string pathToBuildProject) { InjectionRoutines.Cleanup(); }
public void OnPostprocessBuild(BuildReport report) { InjectionRoutines.Cleanup(); }
private static void OnHierarchyChanged() { if (!injectionValidated && !ACTkSettings.Instance.DisableInjectionDetectorValidation) { var instance = InjectionDetector.Instance; if (instance != null) { if (InjectionRoutines.IsInjectionPossible()) { if (!ACTkSettings.Instance.InjectionDetectorEnabled) { var result = EditorUtility.DisplayDialogComplex("Anti-Cheat Toolkit Validation", "ACTk noticed you're using Injection Detector but you have build detection support disabled.\n" + "Injection Detector needs it enabled in order to work properly.\nWould you like to enable it now?", "Yes", "Open Settings", "No, never ask again"); if (result == 0) { ACTkSettings.Instance.InjectionDetectorEnabled = true; } else if (result == 1) { ACTkSettings.Show(); return; } else { ACTkSettings.Instance.DisableInjectionDetectorValidation = true; } } } } injectionValidated = true; } if (!wallhackValidated && !ACTkSettings.Instance.DisableWallhackDetectorValidation) { var instance = WallHackDetector.Instance; if (instance != null && instance.CheckWireframe) { if (!SettingsGUI.IsWallhackDetectorShaderIncluded()) { var result = EditorUtility.DisplayDialog("Anti-Cheat Toolkit Validation", "ACTk noticed you're using Wallhack Detector with Wireframe option enabled but you have no required shader added" + " to the Always Included Shaders.\n" + "Would you like to exit Play Mode and open Settings to include it now?", "Yes", "No, never ask again"); if (result) { EditorApplication.isPlaying = false; ACTkSettings.Show(); } else { ACTkSettings.Instance.DisableWallhackDetectorValidation = true; } } } wallhackValidated = true; } }