{
  "version": 1,
  "comment": "Sicherheitsregeln für Code-Mods. Gleiche Datei im Spiel (Resources/ModScanRegeln.json) und im Portal (scanner.php). Eine Mod, die eine dieser Schnittstellen benutzt, wird blockiert – sie könnte sonst Daten von Spielern sammeln oder verschicken. Mods speichern eigene Daten über Context.ReadText/WriteText.",
  "assemblies": ["netstandard", "mscorlib", "System.Runtime", "System.Core", "System.Collections", "System.Linq", "System.Runtime.Extensions", "Assembly-CSharp", "Newtonsoft.Json", "UnityEngine", "UnityEngine.*", "Unity.Mathematics", "Unity.InputSystem"],
  "rules": [
    { "ns": "System.Net", "prefix": true, "reason": "Netzwerkzugriff (Daten könnten ins Internet geschickt werden)" },
    { "ns": "UnityEngine.Networking", "prefix": true, "reason": "Netzwerkzugriff (Daten könnten ins Internet geschickt werden)" },
    { "ns": "UnityEngine", "type": "WWW", "reason": "Netzwerkzugriff (Daten könnten ins Internet geschickt werden)" },
    { "ns": "UnityEngine", "type": "WWWForm", "reason": "Netzwerkzugriff (Daten könnten ins Internet geschickt werden)" },
    { "ns": "UnityEngine", "type": "Application", "members": ["OpenURL", "ExternalCall", "ExternalEval"], "reason": "Öffnet Webseiten (Daten könnten in der Adresse mitgeschickt werden)" },
    { "ns": "System.IO", "type": "File", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "Directory", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "FileInfo", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "DirectoryInfo", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "FileSystemInfo", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "FileStream", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "StreamReader", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "StreamWriter", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "DriveInfo", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO", "type": "FileSystemWatcher", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO.IsolatedStorage", "prefix": true, "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System.IO.Pipes", "prefix": true, "reason": "Verbindung zu anderen Programmen" },
    { "ns": "System.IO.MemoryMappedFiles", "prefix": true, "reason": "Verbindung zu anderen Programmen" },
    { "ns": "System.IO.Compression", "type": "ZipFile", "reason": "Dateizugriff außerhalb des Mod-Ordners" },
    { "ns": "System", "type": "Environment", "allow": ["get_NewLine", "get_TickCount", "get_ProcessorCount", "get_CurrentManagedThreadId"], "reason": "Liest Systeminformationen (Benutzername, Ordner, Umgebungsvariablen)" },
    { "ns": "System", "type": "AppDomain", "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "System", "type": "Activator", "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "System", "type": "Type", "members": ["GetType", "GetTypeFromProgID", "GetTypeFromCLSID", "InvokeMember", "GetMethod", "GetMethods", "GetField", "GetFields", "GetProperty", "GetProperties", "GetMember", "GetMembers", "GetConstructor", "GetConstructors", "GetEvent", "GetEvents", "GetNestedType", "GetNestedTypes", "get_Assembly", "get_Module"], "reason": "Lädt oder verändert Programmcode zur Laufzeit (Reflection)" },
    { "ns": "System.Reflection", "prefix": true, "except": ["AssemblyCompanyAttribute", "AssemblyConfigurationAttribute", "AssemblyCopyrightAttribute", "AssemblyDescriptionAttribute", "AssemblyFileVersionAttribute", "AssemblyInformationalVersionAttribute", "AssemblyMetadataAttribute", "AssemblyProductAttribute", "AssemblyTitleAttribute", "AssemblyTrademarkAttribute", "AssemblyVersionAttribute", "DefaultMemberAttribute", "AssemblyCultureAttribute", "AssemblyKeyFileAttribute", "AssemblyDelaySignAttribute"], "reason": "Lädt oder verändert Programmcode zur Laufzeit (Reflection)" },
    { "ns": "System.Runtime.Loader", "prefix": true, "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "System.Linq.Expressions", "prefix": true, "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "System.CodeDom", "prefix": true, "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "Microsoft.CSharp", "prefix": true, "reason": "Lädt oder verändert Programmcode zur Laufzeit" },
    { "ns": "System.Diagnostics", "type": "Process", "reason": "Startet andere Programme" },
    { "ns": "System.Diagnostics", "type": "ProcessStartInfo", "reason": "Startet andere Programme" },
    { "ns": "Microsoft.Win32", "prefix": true, "reason": "Greift auf die Windows-Registry zu" },
    { "ns": "System.Runtime.InteropServices", "type": "Marshal", "reason": "Ruft Systemfunktionen direkt auf" },
    { "ns": "System.Runtime.InteropServices", "type": "DllImportAttribute", "reason": "Ruft Systemfunktionen direkt auf" },
    { "ns": "System.Runtime.InteropServices", "type": "NativeLibrary", "reason": "Ruft Systemfunktionen direkt auf" },
    { "ns": "System.Security.Cryptography", "type": "ProtectedData", "reason": "Liest geschützte Daten des Benutzers" },
    { "ns": "System.Security.Principal", "prefix": true, "reason": "Liest Systeminformationen (Benutzerkonto)" },
    { "ns": "UnityEngine", "type": "GUIUtility", "members": ["get_systemCopyBuffer", "set_systemCopyBuffer"], "reason": "Liest die Zwischenablage" },
    { "ns": "UnityEngine", "type": "Microphone", "reason": "Zugriff auf Mikrofon" },
    { "ns": "UnityEngine", "type": "WebCamTexture", "reason": "Zugriff auf Kamera" },
    { "ns": "UnityEngine.Windows", "prefix": true, "reason": "Zugriff auf Kamera, Mikrofon oder Windows-Funktionen" },
    { "ns": "UnityEngine", "type": "SystemInfo", "members": ["get_deviceUniqueIdentifier", "get_deviceName"], "reason": "Liest eindeutige Gerätekennung" },
    { "ns": "DreamSky.Modding", "type": "ModManager", "reason": "Greift in die Mod-Verwaltung ein (andere Mods installieren oder freischalten)" },
    { "ns": "DreamSky.Modding", "type": "ModRepository", "reason": "Netzwerkzugriff über das Mod-Portal" },
    { "ns": "DreamSky.Modding", "type": "ModContent", "reason": "Greift in die Mod-Verwaltung ein" },
    { "ns": "DreamSky.Modding", "type": "ModScanner", "reason": "Greift in die Mod-Verwaltung ein" },
    { "ns": "DreamSky.Core", "type": "SaveSystem", "members": ["get_Folder", "Delete"], "reason": "Dateizugriff außerhalb des Mod-Ordners" }
  ]
}
