Decompiled source of bananas rundown v0.2.0
bananasTerminal.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using GameData; using HarmonyLib; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using LevelGeneration; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("bananasTerminal")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("bananasTerminal")] [assembly: AssemblyTitle("bananasTerminal")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BananasTerminal { [BepInPlugin("com.bananas.terminal", "BananasTerminal", "1.1.0")] public class Plugin : BasePlugin { public static ManualLogSource Log; private Harmony _harmony; public override void Load() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown Log = ((BasePlugin)this).Log; Log.LogInfo((object)"BananasTerminal Refactored 로드됨!"); _harmony = new Harmony("com.bananas.terminal"); _harmony.PatchAll(); } } public static class HackPuzzleState { public static bool AlphaServiceTagConfirmed = false; public static bool AlphaAuditIndexConfirmed = false; public static bool BetaChecksumConfirmed = false; public static bool Door201Unlocked = false; public static bool NodeEpsilonScanned = false; public static bool NodeAlphaReRouted = false; public static bool NodeBetaReRouted = false; public static bool Door202Unlocked = false; private static Dictionary<string, string> ActiveConnections = new Dictionary<string, string>(); public static void SetConnection(string nodeId, string ip) { string key = Normalize(nodeId); if (ActiveConnections.ContainsKey(key)) { ActiveConnections[key] = ip; } else { ActiveConnections.Add(key, ip); } } public static string GetConnection(string nodeId) { string key = Normalize(nodeId); return ActiveConnections.ContainsKey(key) ? ActiveConnections[key] : ""; } public static void ClearConnection(string nodeId) { string key = Normalize(nodeId); if (ActiveConnections.ContainsKey(key)) { ActiveConnections[key] = ""; } } public static void ResetAll() { AlphaServiceTagConfirmed = false; AlphaAuditIndexConfirmed = false; BetaChecksumConfirmed = false; Door201Unlocked = false; NodeEpsilonScanned = false; NodeAlphaReRouted = false; NodeBetaReRouted = false; Door202Unlocked = false; ActiveConnections.Clear(); } private static string Normalize(string s) { return (s ?? "UNKNOWN").Trim().ToUpperInvariant(); } } public class HackFile { public string Name; public string Size; public string Tags; public string ProbeText; public Action OnProbe; public HackFile(string name, string size, string tags, string probeText, Action onProbe = null) { Name = name; Size = size; Tags = tags; ProbeText = probeText; OnProbe = onProbe; } } public class HackHost { public string Ip; public string HostName; public string Status; public string Directory; public List<HackFile> Files = new List<HackFile>(); public HackHost(string ip, string hostName, string status, string directory, params HackFile[] files) { Ip = ip; HostName = hostName; Status = status; Directory = directory; Files.AddRange(files); } public HackFile FindFile(string fileName) { string text = (fileName ?? "").Trim().ToUpperInvariant(); foreach (HackFile file in Files) { if (file.Name.ToUpperInvariant() == text) { return file; } } return null; } } public class HackNode { public string NodeId; public string ZoneLabel; public string SubnetLabel; public string Intro; public string ScanFooter; public List<HackHost> Hosts = new List<HackHost>(); public HackNode(string nodeId, string zoneLabel, string subnetLabel, string intro, string scanFooter, params HackHost[] hosts) { NodeId = nodeId; ZoneLabel = zoneLabel; SubnetLabel = subnetLabel; Intro = intro; ScanFooter = scanFooter; Hosts.AddRange(hosts); } public HackHost FindHost(string ip) { foreach (HackHost host in Hosts) { if (host.Ip == ip) { return host; } } return null; } } public static class HackDatabase { private static Dictionary<string, HackNode> Nodes; public static HackNode GetNode(string nodeId) { EnsureBuilt(); string key = (nodeId ?? "UNKNOWN").Trim().ToUpperInvariant(); return Nodes.ContainsKey(key) ? Nodes[key] : null; } public static HackHost GetConnectedHost(string nodeId) { HackNode node = GetNode(nodeId); if (node == null) { return null; } string connection = HackPuzzleState.GetConnection(nodeId); return node.FindHost(connection); } private static void EnsureBuilt() { if (Nodes == null) { Nodes = new Dictionary<string, HackNode>(); Add(BuildAlpha()); Add(BuildBeta()); Add(BuildGamma()); Add(BuildDelta()); Add(BuildEpsilon()); Add(BuildZeta()); Add(BuildEta()); } } private static void Add(HackNode node) { Nodes[node.NodeId] = node; } private static HackNode BuildAlpha() { return new HackNode("NODE_ALPHA", "ZONE 200 :: ALPHA NODE", "192.168.1.0/24", "Establishing Alpha maintenance backbone handshake...", ">> SCAN COMPLETE: Alpha routing table contains 5 flagged hosts.", new HackHost("192.168.1.12", "SYS_CCTV_NODE04", "PORT 8022/CLOSED", "/mnt/storage/cctv/", new HackFile("archive_manifest.cfg", "1.2 KB", "", "\r\n>> PROBE: Parsing archive_manifest.cfg...\r\n File type : CONFIG / CCTV ARCHIVE INDEX\r\n Checksum : 0x4210 (verified)\r\n\r\n CAMERA ARCHIVE MANIFEST / NODE04\r\n\r\n cam01_stream.mp4 ward-corridor-a missing frames: 03:14:02 - 03:17:41\r\n cam02_stream.mp4 delta-junction missing frames: 03:17:02 - 03:17:39\r\n\r\n The manifest references service ticket A1B2 for camera relay replacement.\r\n Later security review marked A1B2 as a relay-only ticket, not a gate actuator tag.\r\n\r\n Cross-reference:\r\n - error_log_04.txt\r\n - sec_gateway_rotation.log"), new HackFile("error_log_04.txt", "4.2 KB", "", "\r\n>> PROBE: Parsing error_log_04.txt...\r\n File type : PLAIN TEXT / DEVICE ERROR LOG\r\n Checksum : 0x3311 (mismatch - partial recovery)\r\n\r\n [03:16:51] frame buffer underrun on camera bus 04\r\n [03:17:08] relay ticket A1B2 echoed by camera daemon\r\n [03:17:12] relay ticket rejected by non-camera validator\r\n [03:18:44] stale auth token B8C2 observed in crash buffer\r\n\r\n Maintenance note:\r\n A1B2 and B8C2 are camera-side artifacts. They may appear near the breach window,\r\n but neither belongs to the Z201 perimeter bridge."), new HackFile("frame_dropper.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing frame_dropper.sh...\r\n File type : SHELL SCRIPT / CAMERA DIAGNOSTIC\r\n Checksum : 0x0D04 (verified)\r\n\r\n #!/bin/sh\r\n echo 'dropping damaged frame groups'\r\n /usr/bin/camfix --node=04 --window=0317 --mask=relay\r\n\r\n Comment recovered from script tail:\r\n 'The 0317 outage is shared with Delta, but camera masks do not authorize locks.'")), new HackHost("192.168.1.35", "HYDRO_VALVE_CTRL", "PORT 5021/FILTERED", "/sys/io/hydro/", new HackFile("valve_pressure.dat", "8.4 KB", "", "\r\n>> PROBE: Parsing valve_pressure.dat...\r\n File type : DATA / HYDRO PRESSURE SNAPSHOT\r\n Checksum : 0x8135 (verified)\r\n\r\n Valve group H-35 reported an emergency pressure drop during the same cycle\r\n as the Z201 gate desync. The attached batch marker C3D4 was generated by\r\n the hydro controller after the drop, not before it.\r\n\r\n Audit remark:\r\n C3D4 appears in failure logs as FORMAT_ERROR when sent to the gate validator."), new HackFile("override_protocol.md", "2.1 KB", "", "\r\n>> PROBE: Parsing override_protocol.md...\r\n File type : MARKDOWN / HYDRO OVERRIDE PROCEDURE\r\n Checksum : 0x0A35 (verified)\r\n\r\n HYDRO OVERRIDE PROCEDURE\r\n\r\n 1. Isolate valve cluster.\r\n 2. Confirm drain pressure below 1.10 atm.\r\n 3. Use local hydro override only.\r\n\r\n Legacy field:\r\n HYDRO_OVERRIDE_TAG = C3D4\r\n\r\n Warning:\r\n Hydro override tags do not cross into security-door validation.\r\n If C3D4 is accepted anywhere, the destination is not the Delta gateway."), new HackFile("flow_rate_v2.cfg", "1.1 KB", "", "\r\n>> PROBE: Parsing flow_rate_v2.cfg...\r\n File type : CONFIG / HYDRO FLOW RATE\r\n Checksum : 0xF035 (verified)\r\n\r\n flow.max_safe = 78.2\r\n flow.lockout = TRUE\r\n validator.scope = HYDRO_LOCAL\r\n validator.export = FALSE\r\n\r\n No remote bridge export is enabled from this controller.")), new HackHost("192.168.1.50", "MAINT_SERVER_LOCAL", "PORT 0022/OPEN (SSHv2)", "/var/sys/main/net/cfg/", new HackFile("dhcp_lease.bak", "12.4 KB", "", "\r\n>> PROBE: Parsing dhcp_lease.bak...\r\n File type : BINARY BACKUP / DHCP TABLE\r\n Checksum : 0x3311 (mismatch - file may be corrupted)\r\n\r\n LEASE TABLE (partial recovery)\r\n IP MAC TTL\r\n 192.168.1.12 DE:AD:BE:EF:01:12 3600s\r\n 192.168.1.35 DE:AD:BE:EF:01:35 3600s\r\n 192.168.1.50 DE:AD:BE:EF:01:50 PERMANENT\r\n 192.168.1.77 -- redacted -- upstream gated\r\n\r\n Note:\r\n The permanent lease is the only Alpha host allowed to preserve pre-audit\r\n maintenance records after the 0317 outage."), new HackFile("network_alpha_01.txt", "2.2 KB", "", "\r\n>> PROBE: Parsing network_alpha_01.txt...\r\n File type : PLAIN TEXT / MAINTENANCE ROUTING MEMO\r\n Checksum : 0xA1F3 (verified)\r\n\r\n MAINTENANCE ROUTING MEMO / ALPHA BACKBONE\r\n\r\n The actuator assigned to the Z201 perimeter bridge was replaced after\r\n repeated lock desync failures. The replacement was filed before the second\r\n audit window, so the tag survived the later invalidation sweep.\r\n\r\n Replacement service tag:\r\n 4F2A\r\n\r\n Do not confuse this with camera relay ticket A1B2. Both appear near the\r\n 0317 outage, but only the actuator tag was physically installed on the\r\n perimeter bridge.\r\n\r\n Related records:\r\n - network_alpha_02.txt\r\n - sec_gateway_rotation.log", delegate { HackPuzzleState.AlphaServiceTagConfirmed = true; }), new HackFile("network_alpha_02.txt", "1.9 KB", "", "\r\n>> PROBE: Parsing network_alpha_02.txt...\r\n File type : PLAIN TEXT / AUDIT WINDOW REPORT\r\n Checksum : 0xB2C4 (verified)\r\n\r\n AUDIT WINDOW REPORT / ZONE 200\r\n\r\n Audit window 01 rejected all pre-incident service tags.\r\n Audit window 02 restored a narrow index range after Delta confirmed the\r\n actuator replacement was legitimate.\r\n\r\n Restored range:\r\n 99B0 - 99B4\r\n\r\n The Z201 bridge was re-indexed under the middle entry of that restored range.\r\n Later batches were test traffic and should not be trusted.\r\n\r\n Review note:\r\n Sequence matters. Service tag first, restored audit index second, accepted\r\n Delta checksum last.", delegate { HackPuzzleState.AlphaAuditIndexConfirmed = true; }), new HackFile("routing_tables.cfg", "4.4 KB", "", "\r\n>> PROBE: Parsing routing_tables.cfg...\r\n File type : CONFIG / ROUTING TABLE\r\n Checksum : 0xFFA0 (verified)\r\n\r\n Destination Gateway Metric Comment\r\n 192.168.1.0/24 0.0.0.0 0 alpha-local\r\n 192.168.3.0/24 192.168.1.254 80 delta-bridge archived\r\n 192.168.4.0/24 192.168.1.254 200 warden-reserved\r\n\r\n The Delta bridge entry was archived after Z201 relocation.\r\n If Epsilon exposes the Warden route, Alpha may forward a bridge packet to 192.168.4.5.")), new HackHost("192.168.1.102", "LIFT_MOTOR_ENG", "PORT 9000/SECURED", "/var/eng/motor/", new HackFile("gear_ratio_backup.txt", "5.5 KB", "", "\r\n>> PROBE: Parsing gear_ratio_backup.txt...\r\n File type : TEXT / LIFT ENGINEERING BACKUP\r\n Checksum : 0x8102 (verified)\r\n\r\n Lift engine L-102 was locked below Sublevel 4 after the 0317 outage.\r\n A stale service mark 5E6F was copied into the motor controller during rollback.\r\n\r\n Audit remark:\r\n 5E6F is a rollback artifact. Security logs list it as KEY_EXPIRED."), new HackFile("motor_fault_codes.csv", "19.3 KB", "", "\r\n>> PROBE: Parsing motor_fault_codes.csv...\r\n File type : CSV / MOTOR FAULT CODES\r\n Checksum : 0x102C (verified)\r\n\r\n code,meaning,bridge_scope\r\n 5E6F,rollback mark,LIFT_ONLY\r\n E771,shaft obstruction,LIFT_ONLY\r\n 0317,blackout window,SHARED_EVENT\r\n\r\n Shared event timestamps are not authorization values by themselves.")), new HackHost("192.168.1.144", "RECYCLING_PLANT_B", "PORT 1024/DISCONNECTED", "/usr/local/bin/", new HackFile("calibration_v1.cfg", "0.8 KB", "", "\r\n>> PROBE: Parsing calibration_v1.cfg...\r\n File type : CONFIG / RECYCLER CALIBRATION\r\n Checksum : 0x144A (verified)\r\n\r\n legacy.batch = B3F1\r\n legacy.mode = WARDEN_v1_COMPAT\r\n export.scope = LOCAL_RECYCLER\r\n\r\n B3F1 was valid before the Delta gateway migration. Current Z201 validators\r\n reject v1-compatible cache entries."), new HackFile("sorting_logic.py", "15.2 KB", "", "\r\n>> PROBE: Parsing sorting_logic.py...\r\n File type : PYTHON / RECYCLING SORT LOGIC\r\n Checksum : 0x144B (verified)\r\n\r\n recovered comment:\r\n 'B3F1 looks like an auth batch, but it came from recycler calibration.\r\n Do not send recycler cache to security bridge.'"))); } private static HackNode BuildBeta() { return new HackNode("NODE_BETA", "ZONE 200 :: BETA NODE", "192.168.1.x / SEC_CLUSTER", "Binding Beta security cluster interface...", ">> WARNING: Security Door Z201 command vector relocated to Delta cluster.", new HackHost("192.168.1.77", "SEC_LOG_SERVER", "PORT 0022/OPEN (AES-256)", "/var/log/security/", new HackFile("auth_fail.log", "412 KB", "", "\r\n>> PROBE: Parsing auth_fail.log...\r\n File type : PLAIN TEXT / AUTH FAILURE LOG\r\n Checksum : 0x0A1B (verified)\r\n\r\n Recent failures:\r\n [FAIL] KEY=A1B2-C3D4-E5F6 reason: WRONG_SEQUENCE\r\n [FAIL] KEY=B3F1-99B2-77E1 reason: LEGACY_PREFIX\r\n [FAIL] KEY=4F2A-99B1-77E1 reason: WRONG_AUDIT_INDEX\r\n [FAIL] KEY=4F2A-99B2-5E6F reason: EXPIRED_SUFFIX\r\n\r\n Failure logs are useful only for exclusion. They show what was tried,\r\n not what the gateway accepted."), new HackFile("firewall_dropped.bak", "1.1 MB", "", "\r\n>> PROBE: Parsing firewall_dropped.bak...\r\n File type : BACKUP / FIREWALL DROPPED PACKETS\r\n Checksum : 0xB077 (verified)\r\n\r\n 192.168.1.102 -> 192.168.3.44 token 5E6F dropped: expired lift rollback mark\r\n 192.168.1.35 -> 192.168.3.44 token C3D4 dropped: hydro local format\r\n 192.168.1.12 -> 192.168.3.44 token A1B2 dropped: camera relay ticket\r\n\r\n Delta gateway accepted only packets sourced from the maintenance server\r\n and security audit trail."), new HackFile("security_log.txt", "94.2 KB", "", "\r\n>> PROBE: Decrypting security_log.txt...\r\n File type : ENCRYPTED LOG / SECURITY AUDIT\r\n Checksum : 0x77E1 (verified post-decrypt)\r\n Entropy : 7.91 bits/byte before decrypt\r\n\r\n SECURITY AUDIT / SEC_LOG_SERVER\r\n\r\n Delta gateway rejected pre-decrypt checksums, failed login tokens, and\r\n local controller marks. It accepted only the post-decrypt audit checksum\r\n written after the actuator tag and audit index were reconciled.\r\n\r\n Final accepted audit checksum:\r\n 0x77E1\r\n\r\n Rejected values in same window:\r\n A1B2 - camera relay\r\n C3D4 - hydro local\r\n 5E6F - lift rollback expired\r\n B3F1 - legacy recycler cache\r\n\r\n Order reminder:\r\n physical actuator tag -> restored audit index -> accepted post-decrypt checksum", delegate { HackPuzzleState.BetaChecksumConfirmed = true; }), new HackFile("ssh_handshake.log", "12.5 KB", "", "\r\n>> PROBE: Parsing ssh_handshake.log...\r\n File type : PLAIN TEXT / SSH SESSION LOG\r\n Checksum : 0x5077 (verified)\r\n\r\n [OK] 192.168.1.50 -> 192.168.1.77 ESTABLISHED T+044s\r\n [FAIL] 192.168.1.33 -> 192.168.1.77 RST T+012s\r\n [FAIL] 192.168.1.80 -> 192.168.1.77 RST T+020s\r\n\r\n Beta accepted Alpha maintenance server as upstream, not the dummy vault."), new HackFile("intrusion_report.dat", "4.4 KB", "", "\r\n>> PROBE: Parsing intrusion_report.dat...\r\n File type : BINARY / INTRUSION DETECTION REPORT\r\n Checksum : 0x9F3A (verified)\r\n\r\n One anomaly flagged:\r\n Source IP : 192.168.1.102\r\n Event type : REPEATED_PORT_KNOCK\r\n Token echo : 5E6F\r\n\r\n The report predates the accepted Delta audit entry. Treat as background noise.")), new HackHost("192.168.1.80", "DUMMY_LOG_VAULT", "PORT 22/SECURED", "/var/sys/backup/", new HackFile("dummy_data_01.txt", "4.2 KB", "", "\r\n>> PROBE: Parsing dummy_data_01.txt...\r\n File type : TEXT / MIRRORED LOG EXTRACT\r\n Checksum : 0x8080 (verified)\r\n\r\n Mirrored line:\r\n 'B3F1 restored by cache replay.'\r\n\r\n Vault annotation:\r\n The line was copied from recycler calibration and lacks a Delta gateway signature."), new HackFile("old_manifest.cfg", "0.8 KB", "", "\r\n>> PROBE: Parsing old_manifest.cfg...\r\n File type : CONFIG / BACKUP MANIFEST\r\n Checksum : 0x8010 (verified)\r\n\r\n backup.source = RECYCLING_PLANT_B\r\n backup.mode = legacy\r\n bridge.valid = false\r\n\r\n This vault preserves old values for comparison only.")), new HackHost("192.168.1.89", "CRYOPOD_MGMT_01", "PORT 3011/SECURED", "/var/cryo/pod_01/", new HackFile("dummy_data_02.txt", "1.1 KB", "", "\r\n>> PROBE: Parsing dummy_data_02.txt...\r\n File type : TEXT / CRYOPOD TEMP NOTE\r\n Checksum : 0x8902 (verified)\r\n\r\n Pod controller echoed sequence 99B3 during a thaw alarm.\r\n Medical audit later confirmed pod-local indexing is offset by +1 from\r\n security audit windows.\r\n\r\n 99B3 is adjacent to the restored range, but not the bridge index."), new HackFile("debug_core.log", "88.4 KB", "", "\r\n>> PROBE: Parsing debug_core.log...\r\n File type : LOG / CRYOPOD DEBUG CORE\r\n Checksum : 0x8911 (verified)\r\n\r\n [DEBUG] thermal index 99B3 generated by cryopod local scheduler\r\n [DEBUG] scheduler export disabled\r\n [DEBUG] security bridge ignored cryopod-local scheduler marks")), new HackHost("192.168.1.91", "CRYOPOD_MGMT_02", "PORT 3011/SECURED", "/var/cryo/pod_02/", new HackFile("debug_core.log", "88.4 KB", "", "\r\n>> PROBE: Parsing debug_core.log...\r\n File type : LOG / CRYOPOD DEBUG CORE\r\n Checksum : 0x9111 (verified)\r\n\r\n Pod 02 contains only copied debug symbols from Pod 01.\r\n No Delta gateway signature found in this controller."), new HackFile("temp_build.bin", "104 KB", "[BINARY]", "\r\n>> PROBE: Reading temp_build.bin...\r\n File type : BINARY / TEMPORARY BUILD ARTIFACT\r\n Checksum : 0x9100 (verified)\r\n\r\n Strings recovered:\r\n 99B3\r\n CRYO_LOCAL\r\n DO_NOT_EXPORT\r\n\r\n The local scheduler string is not accepted by security validators.")), new HackHost("192.168.1.200", "GATEWAY_MIRROR_B", "PORT 443/FILTERED", "/var/sys/mirror/", new HackFile("mirror_index.txt", "3.2 KB", "", "\r\n>> PROBE: Parsing mirror_index.txt...\r\n File type : TEXT / GATEWAY MIRROR INDEX\r\n Checksum : 0x1200 (verified)\r\n\r\n Mirror captured a Delta banner but not the unlock vector.\r\n The visible suffix 77E1 is a checksum echo, not enough by itself."), new HackFile("temp_build.bin", "104 KB", "[BINARY]", "\r\n>> PROBE: Reading temp_build.bin...\r\n File type : BINARY / MIRROR SCRATCH BUFFER\r\n Checksum : 0x200B (mismatch)\r\n\r\n Recovered fragments are unordered and contain decoys:\r\n A1B2 C3D4 77E1 B3F1 5E6F\r\n\r\n Mirror buffers preserve failed attempts mixed with valid echoes."))); } private static HackNode BuildGamma() { return new HackNode("NODE_GAMMA", "ZONE 200 :: GAMMA NODE", "192.168.2.0/24", "Establishing localized Gamma data matrix link...", ">> SCAN COMPLETE: Standalone node routing isolated.", new HackHost("192.168.2.11", "LIGHTING_CORE_G", "PORT 80/OPEN", "/mnt/gamma/lighting/", new HackFile("gamma_sys.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing gamma_sys.cfg...\r\n File type : CONFIG / GAMMA SYSTEM PARAMETERS\r\n Checksum : 0x2A11 (verified)\r\n\r\n sys.mode = STANDBY\r\n sys.key_cache = B3F1\r\n sys.auth_profile = WARDEN_v1_COMPAT\r\n sys.bridge = GAMMA_LOCAL_ONLY\r\n\r\n B3F1 was valid before the Delta gateway migration. Current Z201 bridge\r\n rejects v1-compatible cache entries."), new HackFile("lighting_test.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing lighting_test.sh...\r\n File type : SHELL SCRIPT / LIGHTING DIAGNOSTIC\r\n Checksum : 0x2A12 (verified)\r\n\r\n #!/bin/sh\r\n /usr/bin/light_ctrl --zone=GAMMA --mode=TEST --mark=B3F1\r\n\r\n The mark is passed to a lighting controller only. It never reaches Delta.")), new HackHost("192.168.2.24", "DOOR_LINK_DUMMY_G", "PORT 443/SECURED", "/mnt/gamma/door/", new HackFile("fan_profile_v1.bak", "14.2 KB", "", "\r\n>> PROBE: Parsing fan_profile_v1.bak...\r\n File type : BACKUP / FAN PROFILE\r\n Checksum : 0x2424 (verified)\r\n\r\n Fan profile references index 99B1 as a damper position.\r\n Security review: 99B1 was tested against Delta and rejected as WRONG_AUDIT_INDEX."), new HackFile("error_dump.txt", "9.9 KB", "", "\r\n>> PROBE: Parsing error_dump.txt...\r\n File type : PLAIN TEXT / ERROR DUMP\r\n Checksum : 0x2499 (verified)\r\n\r\n [ERR] Auth sequence C3D4 failed validation - format error\r\n [ERR] Auth sequence 5E6F failed validation - key expired\r\n [WARN] Gamma dummy door link cannot forward unlock vectors")), new HackHost("192.168.2.33", "HVAC_SYS_NORTH", "PORT 23/OPEN", "/mnt/gamma/hvac/", new HackFile("hardware_map.json", "4.1 KB", "", "\r\n>> PROBE: Parsing hardware_map.json...\r\n File type : JSON / HARDWARE INVENTORY\r\n Checksum : 0x2333 (verified)\r\n\r\n { \"zone\":\"GAMMA\", \"bridge\":\"local\", \"nodes\":[\r\n { \"id\":\"G-01\", \"type\":\"LIGHTING\", \"status\":\"OK\" },\r\n { \"id\":\"G-02\", \"type\":\"HVAC\", \"status\":\"FAULT\" },\r\n { \"id\":\"G-03\", \"type\":\"POWER\", \"status\":\"OK\" }\r\n ] }\r\n\r\n No listed device owns the Z201 perimeter bridge."), new HackFile("gamma_sys.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing gamma_sys.cfg...\r\n File type : CONFIG / GAMMA SYSTEM PARAMETERS\r\n Checksum : 0x2A11 (verified)\r\n\r\n sys.mode = STANDBY\r\n sys.key_cache = B3F1\r\n sys.auth_profile = WARDEN_v1_COMPAT\r\n sys.bridge = GAMMA_LOCAL_ONLY\r\n\r\n Same cache value as Lighting Core. Still local-only.")), new HackHost("192.168.2.55", "POWER_BATTERY_G1", "PORT 8080/CLOSED", "/mnt/gamma/power/", new HackFile("power_recovery.log", "6.8 KB", "", "\r\n>> PROBE: Parsing power_recovery.log...\r\n File type : LOG / POWER RECOVERY\r\n Checksum : 0x2555 (verified)\r\n\r\n Gamma battery reported a recovery marker 4F29.\r\n The marker is one digit away from a valid actuator tag but belongs to\r\n power recovery, not lock hardware."), new HackFile("lighting_test.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing lighting_test.sh...\r\n File type : SHELL SCRIPT / LIGHTING DIAGNOSTIC\r\n Checksum : 0x2A12 (verified)\r\n\r\n Duplicate of lighting diagnostic. Gamma does not export to Delta.")), new HackHost("192.168.2.92", "WATER_PUMP_GAMMA", "PORT 110/FILTERED", "/mnt/gamma/pump/", new HackFile("pump_cycle.txt", "3.7 KB", "", "\r\n>> PROBE: Parsing pump_cycle.txt...\r\n File type : TEXT / PUMP CYCLE RECORD\r\n Checksum : 0x2920 (verified)\r\n\r\n Pump cycle used label 77E0 after a pressure reset.\r\n It is adjacent to a security checksum, but Beta logs show accepted values\r\n only after decryption, not pump labels."), new HackFile("hardware_map.json", "4.1 KB", "", "\r\n>> PROBE: Parsing hardware_map.json...\r\n File type : JSON / HARDWARE INVENTORY\r\n Checksum : 0x2333 (verified)\r\n\r\n Gamma hardware inventory copy. No Delta-owned bridge found."))); } private static HackNode BuildDelta() { return new HackNode("NODE_DELTA", "ZONE 200 :: DELTA NODE", "192.168.3.0/24", "Intercepting Delta broadcast beacons...", ">> ALERT: Integrated security bridge active on 192.168.3.44.", new HackHost("192.168.3.5", "AIR_FILTER_D1", "PORT 80/OPEN", "/mnt/delta/air/", new HackFile("air_ctrl.sys", "41.0 KB", "", "\r\n>> PROBE: Parsing air_ctrl.sys...\r\n File type : SYSTEM DATA / AIR FILTER CONTROL\r\n Checksum : 0x3005 (verified)\r\n\r\n Air filter D1 shares Delta power but does not share security authority.\r\n It recorded index 99B4 as a filter cassette ID during the audit window."), new HackFile("fan_speed_profile.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing fan_speed_profile.cfg...\r\n File type : CONFIG / FAN SPEED PROFILE\r\n Checksum : 0x3505 (verified)\r\n\r\n fan.profile = EMERGENCY_PURGE\r\n cassette.id = 99B4\r\n bridge.scope = AIR_LOCAL\r\n\r\n Cassette IDs are not audit indices.")), new HackHost("192.168.3.12", "PRESSURE_VALVE_D", "PORT 21/OPEN", "/mnt/delta/valve/", new HackFile("delta_valve.cfg", "1.2 KB", "", "\r\n>> PROBE: Parsing delta_valve.cfg...\r\n File type : CONFIG / PRESSURE VALVE\r\n Checksum : 0x3012 (verified)\r\n\r\n valve.mode = bleed\r\n safety.marker = C3D4\r\n export.to.lock = false\r\n\r\n C3D4 is visible in Delta but scoped to pressure safety."), new HackFile("psi_threshold.bak", "8.8 KB", "", "\r\n>> PROBE: Parsing psi_threshold.bak...\r\n File type : BACKUP / PRESSURE THRESHOLD\r\n Checksum : 0x3128 (verified)\r\n\r\n Old pressure threshold backup. No security bridge signature present.")), new HackHost("192.168.3.18", "COMPRESSOR_ENG_D", "PORT 8022/CLOSED", "/mnt/delta/compressor/", new HackFile("sensor_dump.log", "212 KB", "", "\r\n>> PROBE: Parsing sensor_dump.log...\r\n File type : SENSOR DATA LOG\r\n Checksum : 0x0F1E (corrupted - partial read)\r\n\r\n RPM: 3400 | TEMP: 88C | PRESSURE: 1.04 atm\r\n RPM: 3412 | TEMP: 89C | PRESSURE: 1.03 atm\r\n RPM: 0 | TEMP: 91C | PRESSURE: 0.00 atm [FAULT]\r\n\r\n Fault cycle produced marker E5F6. Auth logs reject E5F6 inside the common\r\n failed sequence A1B2-C3D4-E5F6."), new HackFile("compressor_core.bin", "2048 KB", "[BINARY]", "\r\n>> PROBE: Reading compressor_core.bin...\r\n File type : BINARY / COMPRESSOR CORE\r\n Checksum : 0x3180 (verified)\r\n\r\n Binary strings recovered:\r\n E5F6\r\n COMPRESSOR_FAULT\r\n AIR_LOCAL_ONLY")), new HackHost("192.168.3.44", "SEC_GATEWAY_INTEGRATED", "PORT 0022/OPEN (INTERLOCKED)", "/sys/lock/z201/", new HackFile("gate_interlock_core.bin", "1024 KB", "[SYSTEM_LOCK]", "\r\n>> PROBE: Reading gate_interlock_core.bin...\r\n File type : SYSTEM LOCK / GATE INTERLOCK CORE\r\n Checksum : 0x3440 (verified)\r\n\r\n Z201 interlock requires three ordered values from separate authorities:\r\n\r\n 1. Physical maintenance authority\r\n 2. Restored audit index\r\n 3. Accepted post-decrypt security checksum\r\n\r\n The module refuses values copied from local controllers, legacy caches,\r\n relay tickets, and failed attempt buffers."), new HackFile("bypass_vector_check.sys", "42.8 KB", "", "\r\n>> PROBE: Parsing bypass_vector_check.sys...\r\n File type : SYSTEM BINARY / VALIDATION MODULE\r\n Checksum : 0x9A2F (verified)\r\n\r\n Validator notes:\r\n - Slot 0 expects an actuator service tag, not a relay ticket.\r\n - Slot 1 expects the restored middle audit entry, not an adjacent index.\r\n - Slot 2 expects the accepted post-decrypt checksum, not a failed token.\r\n\r\n Registered slots: 3\r\n Values are masked in this module."), new HackFile("remote_unlock_vector.sh", "4.2 KB", "[READY_FOR_INPUT]", "\r\n>> PROBE: Executing remote_unlock_vector.sh diagnostic...\r\n File type : SHELL SCRIPT / UNLOCK VECTOR\r\n Checksum : 0x4D3C (verified)\r\n\r\n [STATUS] Vector payload initialized.\r\n [READY] Command interpreter armed for ordered auth stream.\r\n [INPUT] Awaiting 3-part value sequence.\r\n\r\n Format:\r\n AAAA-BBBB-CCCC\r\n\r\n The script does not reveal values. Source them from records that survived\r\n the 0317 reconciliation instead of from failed attempt logs.\r\n\r\n Use UNLOCK <key> to transmit authorization stream."), new HackFile("error_auth_failure.log", "122.5 KB", "", "\r\n>> PROBE: Parsing error_auth_failure.log...\r\n File type : PLAIN TEXT / AUTH FAILURE LOG\r\n Checksum : 0x3344 (verified)\r\n\r\n Recent failures:\r\n [FAIL] KEY=A1B2-C3D4-E5F6 reason: WRONG_SEQUENCE\r\n [FAIL] KEY=1111-2222-3333 reason: INVALID_FORMAT\r\n [FAIL] KEY=DEAD-BEEF-CAFE reason: INVALID_FORMAT\r\n [FAIL] KEY=0000-FFFF-0000 reason: KEY_EXPIRED\r\n [FAIL] KEY=9A3B-11CC-F200 reason: WRONG_SEQUENCE\r\n\r\n Failure logs are contaminated with decoys.")), new HackHost("192.168.3.80", "D_MAINT_CONSOLE_LINK", "PORT 1024/DISCONNECTED", "/mnt/delta/maint/", new HackFile("test_leak.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing test_leak.sh...\r\n File type : SHELL SCRIPT / TEST LEAK\r\n Checksum : 0x3080 (verified)\r\n\r\n Developer test value 9A3B was leaked in an old console test.\r\n Delta now rejects it as WRONG_SEQUENCE."), new HackFile("catalog_archive.dat", "94.0 KB", "", "\r\n>> PROBE: Parsing catalog_archive.dat...\r\n File type : DATA / CATALOG ARCHIVE\r\n Checksum : 0x3800 (verified)\r\n\r\n Archive contains mixed identifiers from air, valve, compressor, and lock\r\n systems. Only records with explicit gateway authority should be trusted."))); } private static HackNode BuildEpsilon() { return new HackNode("NODE_EPSILON", "ZONE 201 :: EPSILON NODE", "192.168.4.0/24", "WARDEN backbone interference detected. Initiating volatile bypass scan...", ">> [CRITICAL] WARDEN core route exposed. Firewall countermeasures active.", new HackHost("192.168.4.5", "WARDEN_CORE_OVERRIDE", "PORT 0443/INTERLOCKED", "/warden/kernel/override/", new HackFile("master_bypass.sys", "8.0 MB", "[UNLOCKED]", "\r\n>> PROBE: Parsing master_bypass.sys...\r\n File type : WARDEN KERNEL MODULE / OVERRIDE\r\n Checksum : 0xFEED (verified)\r\n\r\n WARDEN KERNEL OVERRIDE SEQUENCE INITIALIZED\r\n\r\n Epsilon accepts a reduced bypass phrase only after Alpha and Beta bridge\r\n packets are synchronized into the core route. The phrase reuses the physical\r\n actuator tag from the Z201 reconciliation and appends the override suffix.\r\n\r\n Format:\r\n XXXX-BYPASS\r\n\r\n Use UNLOCK <key> to execute kernel override."), new HackFile("override_journal.txt", "7.7 KB", "", "\r\n>> PROBE: Parsing override_journal.txt...\r\n File type : TEXT / WARDEN OVERRIDE JOURNAL\r\n Checksum : 0xE005 (verified)\r\n\r\n Alpha bridge packet: pending until LINK_ALPHA received.\r\n Beta bridge packet : pending until LINK_BETA received.\r\n\r\n Core route ignores local Epsilon decoys. It only trusts packets forwarded\r\n from Zone 200 records already reconciled by Delta.")), new HackHost("192.168.4.12", "BIO_WASTE_INCINERATOR", "PORT 80/CLOSED", "/var/log/warden/incinerator/", new HackFile("incinerator_lock.sh", "2.2 KB", "", "\r\n>> PROBE: Parsing incinerator_lock.sh...\r\n File type : SHELL SCRIPT / INCINERATOR LOCK\r\n Checksum : 0x4120 (verified)\r\n\r\n Incinerator lock used phrase BURN-0317 during disposal lockdown.\r\n Warden core marks it as facility safety language, not kernel override."), new HackFile("voltage_drop.txt", "0.9 KB", "", "\r\n>> PROBE: Parsing voltage_drop.txt...\r\n File type : TEXT / VOLTAGE DROP REPORT\r\n Checksum : 0x4121 (verified)\r\n\r\n Voltage drop coincided with 0317 but did not originate from the bridge.")), new HackHost("192.168.4.20", "VENTILATION_FAN_Z201", "PORT 8080/BYPASSED", "/var/log/warden/vent/", new HackFile("fan_rpm_diag.log", "112 KB", "", "\r\n>> PROBE: Parsing fan_rpm_diag.log...\r\n File type : LOG / FAN RPM DIAGNOSTIC\r\n Checksum : 0x4200 (verified)\r\n\r\n Fan controller echoes suffix BYPASS during emergency ventilation tests.\r\n It lacks the actuator prefix required by the kernel override module."), new HackFile("security_heartbeat.cfg", "1.4 KB", "", "\r\n>> PROBE: Parsing security_heartbeat.cfg...\r\n File type : CONFIG / SECURITY HEARTBEAT\r\n Checksum : 0x4201 (verified)\r\n\r\n heartbeat.route = EPSILON_LOCAL\r\n heartbeat.trust = false\r\n heartbeat.note = wait for Alpha/Beta bridge packets")), new HackHost("192.168.4.55", "SEC_CAM_Z201_A", "PORT 554/SECURED", "/var/log/warden/cam/", new HackFile("cam_stream_dump.bak", "4.5 MB", "", "\r\n>> PROBE: Parsing cam_stream_dump.bak...\r\n File type : BACKUP / CAMERA STREAM DUMP\r\n Checksum : 0x4555 (mismatch)\r\n\r\n Visible text recovered:\r\n 4F2A near frame tear, 0317 in timestamp overlay, BYPASS in warning banner.\r\n\r\n Camera dumps mix overlay text with real identifiers. Confirm values against\r\n Alpha and Beta records before trusting them."), new HackFile("security_heartbeat.cfg", "1.4 KB", "", "\r\n>> PROBE: Parsing security_heartbeat.cfg...\r\n File type : CONFIG / SECURITY HEARTBEAT\r\n Checksum : 0x4201 (verified)\r\n\r\n Duplicate heartbeat config. Epsilon still waits for external bridge packets.")), new HackHost("192.168.4.99", "SUB_STATION_FEEDER", "PORT 22/FILTERED", "/var/log/warden/power/", new HackFile("voltage_drop.txt", "0.9 KB", "", "\r\n>> PROBE: Parsing voltage_drop.txt...\r\n File type : TEXT / SUBSTATION VOLTAGE REPORT\r\n Checksum : 0x4999 (verified)\r\n\r\n Substation feeder generated tag FEED during power rollback.\r\n FEED is a checksum-like word, not a kernel override prefix."), new HackFile("feeder_journal.txt", "3.1 KB", "", "\r\n>> PROBE: Parsing feeder_journal.txt...\r\n File type : TEXT / FEEDER JOURNAL\r\n Checksum : 0x499A (verified)\r\n\r\n The feeder observed Alpha and Beta packets only after they were injected\r\n from their original terminals. Local replay failed."))); } private static HackNode BuildZeta() { return new HackNode("NODE_ZETA", "ZONE 201 :: ZETA NODE", "192.168.5.0/24", "Resolving Zeta secondary register paths...", ">> SCAN COMPLETE: Zeta active targets listed.", new HackHost("192.168.5.10", "INTERCOM_RELAY_ZETA", "PORT 5001/OPEN", "/mnt/zeta/intercom/", new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA INTERCOM CONFIG\r\n Checksum : 0x5100 (verified)\r\n\r\n <zeta relay='intercom' export='false'>\r\n <phrase>LINK_ZETA</phrase>\r\n <scope>VOICE_RELAY_ONLY</scope>\r\n </zeta>\r\n\r\n LINK_ZETA looks similar to Alpha/Beta bridge tokens, but the Warden core\r\n does not accept voice relay packets."), new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5101 (verified)\r\n\r\n Script copied from decontamination test system. It does not touch security routes.")), new HackHost("192.168.5.21", "DECONTAM_SPRAY_Z1", "PORT 5002/LOCKED", "/mnt/zeta/decon1/", new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5210 (verified)\r\n\r\n /usr/bin/decon --zone=ZETA --pattern=99B2\r\n\r\n Pattern 99B2 is used here as a spray timing preset copied from the restored\r\n audit range. Zeta cannot prove which audit entry Delta restored."), new HackFile("node_state_z.bak", "5.6 KB", "", "\r\n>> PROBE: Parsing node_state_z.bak...\r\n File type : BACKUP / ZETA NODE STATE\r\n Checksum : 0x5211 (verified)\r\n\r\n zeta.state = LOCKED\r\n zeta.route = LOCAL_ONLY\r\n zeta.bridge_export = FALSE")), new HackHost("192.168.5.22", "DECONTAM_SPRAY_Z2", "PORT 5002/LOCKED", "/mnt/zeta/decon2/", new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA DECON CONFIG\r\n Checksum : 0x5220 (verified)\r\n\r\n <zeta relay='decon' export='false'>\r\n <pattern>99B3</pattern>\r\n <source>CRYOPOD_MGMT_01</source>\r\n </zeta>\r\n\r\n 99B3 came from cryopod local indexing."), new HackFile("node_state_z.bak", "5.6 KB", "", "\r\n>> PROBE: Parsing node_state_z.bak...\r\n File type : BACKUP / ZETA NODE STATE\r\n Checksum : 0x5221 (verified)\r\n\r\n Zeta state backup confirms no outbound Warden bridge capability.")), new HackHost("192.168.5.64", "ELEVATOR_LOGIC_UNIT", "PORT 9100/CLOSED", "/mnt/zeta/elevator/", new HackFile("elevator_logic.txt", "6.4 KB", "", "\r\n>> PROBE: Parsing elevator_logic.txt...\r\n File type : TEXT / ELEVATOR LOGIC UNIT\r\n Checksum : 0x5640 (verified)\r\n\r\n Elevator logic saw actuator tag 4F2A in a copied maintenance memo but did\r\n not originate the tag. It cannot validate the second or third values."), new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA CONFIG COPY\r\n Checksum : 0x5641 (verified)\r\n\r\n Zeta config copy. Local-only route.")), new HackHost("192.168.5.90", "ZETA_MAINT_PORT", "PORT 22/SECURED", "/mnt/zeta/maint/", new HackFile("maint_note.txt", "2.5 KB", "", "\r\n>> PROBE: Parsing maint_note.txt...\r\n File type : TEXT / ZETA MAINTENANCE NOTE\r\n Checksum : 0x5900 (verified)\r\n\r\n Zeta maintenance staff attempted LINK_ZETA during Warden lockdown.\r\n Core rejected it. Only LINK_ALPHA and LINK_BETA are listed in the override journal."), new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5901 (verified)\r\n\r\n Decon test script copy."), new HackFile("bridge_protocol.txt", "3.1 KB", "", "\r\n>> PROBE: Parsing warden_bridge_protocol.txt...\r\n File type : TEXT / WARDEN BRIDGE REROUTE PROTOCOL\r\n Checksum : 0x5902 (verified)\r\n\r\n WARDEN ZONE 201 REROUTE AUTHORIZATION MEMO\r\n\r\n Re-routing Zone 200 nodes into the Warden core backbone\r\n requires a signed bridge token per node.\r\n\r\n Token format:\r\n LINK_[NODENAME]\r\n\r\n Authorized nodes for current reroute window:\r\n - ALPHA (maintenance backbone)\r\n - BETA (security cluster)\r\n\r\n Unauthorized nodes rejected by core:\r\n - ZETA (voice relay only -- LINK_ZETA denied at kernel level)\r\n - ETA (diagnostic bus only)\r\n\r\n Tokens must be transmitted via INJECT command\r\n from the originating node after bridge link is established."))); } private static HackNode BuildEta() { return new HackNode("NODE_ETA", "ZONE 201 :: ETA NODE", "192.168.6.0/24", "Mapping Eta hardware bus addresses...", ">> SCAN COMPLETE: Eta diagnostic structure closed.", new HackHost("192.168.6.3", "SIREN_ALARM_PROXY", "PORT 80/OPEN", "/mnt/eta/alarm/", new HackFile("alarm_proxy.conf", "0.8 KB", "", "\r\n>> PROBE: Parsing alarm_proxy.conf...\r\n File type : CONFIG / ALARM PROXY\r\n Checksum : 0x6030 (verified)\r\n\r\n alarm.phrase = BYPASS\r\n alarm.scope = AUDIO_WARNING\r\n export.route = FALSE\r\n\r\n BYPASS alone is a warning phrase, not an override key."), new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE\r\n Checksum : 0x6031 (verified)\r\n\r\n Flood gate data copied the 0317 timestamp as emergency label.\r\n Timestamp labels do not replace authorization values.")), new HackHost("192.168.6.14", "FLOOD_GATE_VALVE", "PORT 443/LOCKED", "/mnt/eta/flood/", new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE VALVE\r\n Checksum : 0x6140 (verified)\r\n\r\n valve.label = 77E2\r\n valve.scope = FLOOD_LOCAL\r\n\r\n 77E2 is adjacent to the accepted security checksum but came from flood valve\r\n telemetry."), new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR\r\n Checksum : 0x6141 (verified)\r\n\r\n Grid capacitor saw Beta checksum echoes only after the security server wrote them.")), new HackHost("192.168.6.45", "GRID_CAPACITOR_ETA", "PORT 23/OPEN", "/mnt/eta/grid/", new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR\r\n Checksum : 0x6450 (verified)\r\n\r\n Capacitor discharge code FEED was generated by power rollback.\r\n Warden kernel module treats FEED as a power word, not a prefix."), new HackFile("alarm_proxy.conf", "0.8 KB", "", "\r\n>> PROBE: Parsing alarm_proxy.conf...\r\n File type : CONFIG / ALARM PROXY COPY\r\n Checksum : 0x6451 (verified)\r\n\r\n Duplicate alarm proxy config. BYPASS suffix alone is incomplete.")), new HackHost("192.168.6.71", "HEPA_FAN_CONTROLLER", "PORT 8080/CLOSED", "/mnt/eta/hepa/", new HackFile("hepa_filter.log", "10.2 KB", "", "\r\n>> PROBE: Parsing hepa_filter.log...\r\n File type : LOG / HEPA FILTER\r\n Checksum : 0x6710 (verified)\r\n\r\n HEPA controller stored index 99B0 as filter lot number.\r\n It is the first value in the restored range, not the middle entry."), new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE COPY\r\n Checksum : 0x6711 (verified)\r\n\r\n Copied flood-gate local telemetry.")), new HackHost("192.168.6.100", "ETA_BACKUP_DIAG", "PORT 22/SECURED", "/mnt/eta/backup/", new HackFile("eta_backup_index.txt", "2.9 KB", "", "\r\n>> PROBE: Parsing eta_backup_index.txt...\r\n File type : TEXT / ETA BACKUP INDEX\r\n Checksum : 0x6100 (verified)\r\n\r\n Eta backup contains many copied strings from Alpha, Beta, and Epsilon.\r\n Backup copies are not authoritative unless another node confirms origin."), new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR COPY\r\n Checksum : 0x6101 (verified)\r\n\r\n Copied grid log. No original security authority."))); } } [HarmonyPatch(typeof(LG_ComputerTerminalCommandInterpreter))] [HarmonyPatch("ReceiveCommand")] public class TerminalCommandPatch { public static bool Prefix(LG_ComputerTerminalCommandInterpreter __instance, TERM_Command cmd, string inputLine, string param1, string param2) { try { string text = RundownManager.ActiveExpeditionUniqueKey ?? ""; if (!text.Contains("TierB")) { return true; } } catch { return true; } if (string.IsNullOrWhiteSpace(inputLine)) { return true; } LG_ComputerTerminal terminal = __instance.m_terminal; if ((Object)(object)terminal == (Object)null) { return true; } int zone = -1; string nodeId = "UNKNOWN"; try { LG_Zone val = ((terminal.SpawnNode != null) ? terminal.SpawnNode.m_zone : null); if ((Object)(object)val != (Object)null) { zone = val.Alias; } Dictionary<string, TerminalLogFileData> localLogs = terminal.GetLocalLogs(); if (localLogs != null && localLogs.Count > 0) { Enumerator<string, TerminalLogFileData> enumerator = localLogs.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair<string, TerminalLogFileData> current = enumerator.Current; if (current.Value != null && current.Value.FileName != null) { nodeId = current.Value.FileName.Replace(".log", "").ToUpperInvariant(); break; } } } } catch { } string text2 = inputLine.Trim().ToUpperInvariant().Split(' ')[0]; string text3 = (param1 ?? "").Trim().ToUpperInvariant(); switch (text2) { case "SCAN": HandleScan(terminal, zone, nodeId); return false; case "CONNECT": HandleConnect(terminal, text3, zone, nodeId); return false; case "PROBE": HandleProbe(terminal, text3, zone, nodeId); return false; case "UNLOCK": HandleUnlock(terminal, text3, zone, nodeId); return false; case "INJECT": HandleInject(terminal, text3, zone, nodeId); return false; case "DUMP": HandleDump(terminal, nodeId); return false; case "TRACE": HandleTrace(terminal, text3, nodeId); return false; default: return true; } } private static void HandleScan(LG_ComputerTerminal terminal, int zone, string nodeId) { HackNode node = HackDatabase.GetNode(nodeId); AddSep(terminal); if (node == null) { terminal.AddLine(">> INITIALIZING LOCAL STANDALONE SCAN [" + nodeId + "]...", true); terminal.AddLine(" [!] No routing tables found for unknown node mapping.", true); AddSep(terminal); return; } terminal.AddLine(">> INITIALIZING SUBNET DEEP SCAN [" + node.ZoneLabel + "]...", true); terminal.AddLine(" " + node.Intro, true); terminal.AddLine(" [OK] Protocol IPv4-TCP stack bound successfully.", true); terminal.AddLine(">> SCANNING SUBNET CHANNELS [" + node.SubnetLabel + "]...", true); terminal.AddLine(" ", true); terminal.AddLine(" [IP ADDRESS] [HOST NAME] [STATUS]", true); foreach (HackHost host in node.Hosts) { terminal.AddLine($" {host.Ip,-15} {host.HostName,-23} {host.Status}", true); } terminal.AddLine(" ", true); terminal.AddLine(node.ScanFooter, true); if (node.NodeId == "NODE_EPSILON") { HackPuzzleState.NodeEpsilonScanned = true; } AddSep(terminal); } private static void HandleConnect(LG_ComputerTerminal terminal, string ip, int zone, string nodeId) { terminal.AddLine(" ", true); HackNode node = HackDatabase.GetNode(nodeId); if (node == null) { terminal.AddLine("ERROR: No network interface available on this node.", true); } else if ((nodeId == "NODE_ALPHA" || nodeId == "NODE_BETA") && ip == "192.168.4.5") { if (!HackPuzzleState.NodeEpsilonScanned) { terminal.AddLine("ERROR: Route to 192.168.4.5 unknown.", true); terminal.AddLine(" Core override system not yet initiated from Zone 201.", true); return; } terminal.AddLine(">> Routing bridge: " + nodeId + " -> Zone 201 core (192.168.4.5)...", true); terminal.AddLine(" [OK] Bridge link established. Upstream sync pending.", true); terminal.AddLine(" Use INJECT <token> to transmit bridge packet.", true); HackPuzzleState.SetConnection(nodeId, "192.168.4.5"); } else if (nodeId == "NODE_BETA" && ip == "192.168.1.77" && (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed)) { terminal.AddLine(">> Connecting to 192.168.1.77 (SEC_LOG_SERVER)...", true); terminal.AddLine(" [!!] Connection refused.", true); terminal.AddLine(" Upstream data link integrity check FAILED.", true); terminal.AddLine(" Beta requires Alpha maintenance/audit reconciliation before decrypt access.", true); HackPuzzleState.ClearConnection(nodeId); } else if (nodeId == "NODE_EPSILON" && ip == "192.168.4.5" && (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed || !HackPuzzleState.BetaChecksumConfirmed || !HackPuzzleState.NodeAlphaReRouted || !HackPuzzleState.NodeBetaReRouted)) { terminal.AddLine(">> Connecting to 192.168.4.5 (WARDEN_CORE_OVERRIDE)...", true); terminal.AddLine(" [!!] ACCESS DENIED: Upstream Interlock Active.", true); terminal.AddLine(" Alpha and Beta bridge packets must be synchronized first.", true); HackPuzzleState.ClearConnection(nodeId); } else { HackHost hackHost = node.FindHost(ip); if (hackHost == null) { terminal.AddLine("ERROR: Connection to " + ip + " failed.", true); terminal.AddLine(" Host unreachable or not in routing table.", true); } else { PrintDirectory(terminal, nodeId, hackHost); HackPuzzleState.SetConnection(nodeId, ip); } } } private static void PrintDirectory(LG_ComputerTerminal terminal, string nodeId, HackHost host) { terminal.AddLine(">> Connecting to " + host.Ip + " (" + host.HostName + ")...", true); terminal.AddLine(" [OK] Access granted. Session bound.", true); terminal.AddLine(" Directory: " + host.Directory, true); foreach (HackFile file in host.Files) { string arg = (string.IsNullOrWhiteSpace(file.Tags) ? "" : (" " + file.Tags)); terminal.AddLine($" > {file.Name,-26} ({file.Size}){arg}", true); } terminal.AddLine(" Use PROBE <filename> to analyze.", true); } private static void HandleProbe(LG_ComputerTerminal terminal, string filename, int zone, string nodeId) { terminal.AddLine(" ", true); AddSep(terminal); if (string.IsNullOrWhiteSpace(filename)) { terminal.AddLine("ERROR: Missing filename. Use PROBE <filename>.", true); AddSep(terminal); return; } HackHost connectedHost = HackDatabase.GetConnectedHost(nodeId); if (connectedHost == null) { terminal.AddLine("ERROR: No active session. CONNECT to a host first.", true); AddSep(terminal); return; } HackFile hackFile = connectedHost.FindFile(filename); if (hackFile == null) { terminal.AddLine(">> PROBE: File '" + filename.ToLowerInvariant() + "' not found on connected host.", true); AddSep(terminal); return; } AddBlock(terminal, hackFile.ProbeText); if (hackFile.OnProbe != null) { hackFile.OnProbe(); } AddSep(terminal); } private static void HandleUnlock(LG_ComputerTerminal terminal, string key, int zone, string nodeId) { terminal.AddLine(" ", true); switch (nodeId) { case "NODE_BETA": terminal.AddLine(">> [CRITICAL] ACCESS DENIED: MAIN COMMAND VECTOR SHIFTED.", true); terminal.AddLine(" Error: Local encryption matrix lacks gate override privileges.", true); terminal.AddLine(" Security terminal authority delegated to: [NODE_DELTA] cluster gateway.", true); break; case "NODE_DELTA": { string connection2 = HackPuzzleState.GetConnection(nodeId); if (connection2 != "192.168.3.44") { terminal.AddLine("ERROR: UNLOCK rejected. No active session on SEC_GATEWAY_INTEGRATED.", true); terminal.AddLine(" CONNECT to 192.168.3.44 first.", true); } else if (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed || !HackPuzzleState.BetaChecksumConfirmed) { terminal.AddLine("ERROR: Security interlock active. Reconciled authority records missing.", true); terminal.AddLine(" Required authorities: actuator tag, restored audit index, post-decrypt checksum.", true); } else if (key == "4F2A-99B2-77E1") { AddSep(terminal); terminal.AddLine(">> KEY SIGNATURE ACCEPTED ON SEC_GATEWAY_INTEGRATED.", true); terminal.AddLine(" Validating ordered authority stream...", true); terminal.AddLine(" [OK] Physical maintenance authority confirmed.", true); terminal.AddLine(" [OK] Restored audit index confirmed.", true); terminal.AddLine(" [OK] Post-decrypt security checksum confirmed.", true); terminal.AddLine(" BROADCASTING FORCED DE-POLARIZATION TO ZONE 201...", true); terminal.AddLine(" STATUS: [SUCCESS] UNLINK SEQUENCE COMPLETE.", true); terminal.AddLine(" SECURITY DOOR Z201 — OPENED.", true); AddSep(terminal); HackPuzzleState.Door201Unlocked = true; OpenDoor(201); } else { terminal.AddLine(">> VALIDATION FAILED: Incorrect authorization stream.", true); terminal.AddLine(" Expected format: AAAA-BBBB-CCCC", true); } break; } case "NODE_EPSILON": { string connection = HackPuzzleState.GetConnection(nodeId); if (connection != "192.168.4.5") { terminal.AddLine("ERROR: UNLOCK rejected. No active session on WARDEN_CORE_OVERRIDE.", true); } else if (key == "4F2A-BYPASS") { AddSep(terminal); terminal.AddLine(">> WARDEN KERNEL OVERRIDE AUTHORIZED.", true); terminal.AddLine(" Injecting bypass vector into core interrupt handler...", true); terminal.AddLine(" [OK] Kernel crash sequence initiated.", true); terminal.AddLine(" SECURITY DOOR Z202 — OPENED.", true); AddSep(terminal); HackPuzzleState.Door202Unlocked = true; OpenDoor(202); } else { terminal.AddLine(">> ACCESS REJECTED: Key format invalid.", true); terminal.AddLine(" Expected format: XXXX-BYPASS", true); } break; } default: terminal.AddLine("ERROR: UNLOCK command has no valid target on this node.", true); break; } } private static void HandleInject(LG_ComputerTerminal terminal, string token, int zone, string nodeId) { terminal.AddLine(" ", true); string connection = HackPuzzleState.GetConnection(nodeId); if (nodeId == "NODE_ALPHA" && connection == "192.168.4.5") { if (token == "LINK_ALPHA") { terminal.AddLine(">> INJECT: Transmitting token LINK_ALPHA to WARDEN_CORE_OVERRIDE...", true); terminal.AddLine(" [OK] Packet accepted. Alpha bridge synchronized.", true); HackPuzzleState.NodeAlphaReRouted = true; HackPuzzleState.ClearConnection(nodeId); } else { terminal.AddLine("ERROR: Token rejected. Expected: LINK_ALPHA", true); } } else if (nodeId == "NODE_BETA" && connection == "192.168.4.5") { if (!HackPuzzleState.NodeAlphaReRouted) { terminal.AddLine("ERROR: Alpha bridge not yet synchronized. Inject LINK_ALPHA first.", true); } else if (token == "LINK_BETA") { terminal.AddLine(">> INJECT: Transmitting token LINK_BETA to WARDEN_CORE_OVERRIDE...", true); terminal.AddLine(" [OK] Packet accepted. Beta bridge synchronized.", true); HackPuzzleState.NodeBetaReRouted = true; HackPuzzleState.ClearConnection(nodeId); } else { terminal.AddLine("ERROR: Token rejected. Expected: LINK_BETA", true); } } else { terminal.AddLine("ERROR: INJECT has no valid target in current session context.", true); } } private static void HandleDump(LG_ComputerTerminal terminal, string nodeId) { terminal.AddLine(" ", true); terminal.AddLine(">> VOLATILE MEMORY CORE DUMP INITIATED [" + nodeId + "]...", true); terminal.AddLine(" Reading 65536 bytes from RAM address space...", true); terminal.AddLine(" ", true); switch (nodeId) { case "NODE_ALPHA": terminal.AddLine(" 0x0000: FF A3 00 1D 4E 00 FF 00 3C AA 11 00 FF 3D 00 A1", true); terminal.AddLine(" 0x0010: 00 00 FF 00 B2 4F 00 FF 00 1A 00 FF 3E 00 00 FF", true); terminal.AddLine(" 0x0020: A1 00 3D FF 00 4F 2A 00 FF 00 1D 00 FF A0 00 3C", true); break; case "NODE_BETA": terminal.AddLine(" 0x1000: 77 E1 FF 00 AA BC DD 22 11 FF 00 44 EE FF 88 AA", true); terminal.AddLine(" 0x1010: 00 77 FF E1 22 00 FF 11 44 AA 00 FF BB CC DD EE", true); terminal.AddLine(" 0x1020: FF 00 99 B2 00 FF 00 4F 2A 00 FF 77 E1 00 FF 00", true); break; case "NODE_GAMMA": terminal.AddLine(" 0x2000: AA BB CC DD EE FF 00 11 22 33 44 55 66 77 88 99", true); terminal.AddLine(" 0x2010: B3 F1 00 AA BB 00 FF CC 00 DD 11 EE 00 22 FF 33", true); terminal.AddLine(" 0x2020: 00 AA 00 FF BB CC 00 DD EE 11 00 FF 22 33 44 55", true); break; case "NODE_DELTA": terminal.AddLine(" 0x3000: 12 34 56 78 9A BC DE F0 4F 2A 99 B2 77 E1 FF AA", true); terminal.AddLine(" 0x3010: A1 B2 C3 D4 E5 F6 00 11 22 33 44 55 66 77 88 99", true); terminal.AddLine(" 0x3020: FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00", true); break; case "NODE_EPSILON": terminal.AddLine(" 0x4000: 00 00 00 00 FF FF FF FF AC AB AD AE 12 11 23 22", true); terminal.AddLine(" 0x4010: 4F 2A 00 FF 00 00 FF FF 00 00 00 FF 4F 2A FF 00", true); terminal.AddLine(" 0x4020: FF 00 FF 00 00 00 00 FF 00 FF 00 00 00 00 FF FF", true); break; case "NODE_ZETA": terminal.AddLine(" 0x5000: 4C 49 4E 4B 5F 5A 45 54 41 00 99 B2 00 FF AA 12", true); terminal.AddLine(" 0x5010: 00 FF 99 B3 00 FF 4F 2A 00 00 AA BB CC DD EE FF", true); break; case "NODE_ETA": terminal.AddLine(" 0x6000: 42 59 50 41 53 53 00 FE ED 00 77 E2 00 99 B0 FF", true); terminal.AddLine(" 0x6010: FF 00 FE ED 00 00 03 17 00 AA BB CC DD EE FF 00", true); break; default: terminal.AddLine(" 0xF000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00", true); break; } terminal.AddLine(" ...", true); terminal.AddLine(" ", true); terminal.AddLine(" [DUMP COMPLETE] 65536 bytes read.", true); terminal.AddLine(" Integrity check: FAILED — data may be corrupted or partially overwritten.", true); } private static void HandleTrace(LG_ComputerTerminal terminal, string targetIp, string nodeId) { terminal.AddLine(" ", true); terminal.AddLine(">> INITIATING NETWORK ROUTE TRACE TO [" + targetIp + "] FROM [" + nodeId + "]...", true); if (nodeId == "NODE_DELTA" && targetIp == "192.168.3.44") { terminal.AddLine(" Hop 1 : 192.168.3.1 (Delta Switch) 2ms", true); terminal.AddLine(" Hop 2 : 192.168.3.44 (SEC_GATEWAY_INTEGRATED) 5ms", true); terminal.AddLine(" Trace complete. Dedicated core uplink confirmed.", true); } else if (nodeId == "NODE_ALPHA" && targetIp == "192.168.1.50") { terminal.AddLine(" Hop 1 : 192.168.1.1 (Alpha Gateway) 1ms", true); terminal.AddLine(" Hop 2 : 192.168.1.50 (MAINT_SERVER_LOCAL) 4ms", true); terminal.AddLine(" Trace complete.", true); } else if ((nodeId == "NODE_ALPHA" || nodeId == "NODE_BETA") && targetIp == "192.168.4.5") { terminal.AddLine(" Hop 1 : local bridge interface 2ms", true); terminal.AddLine(" Hop 2 : WARDEN route unresolved until Epsilon scan", true); terminal.AddLine(" Trace complete with conditional route.", true); } else { terminal.AddLine(" Hop 1 : * * * no response", true); terminal.AddLine(" Hop 2 : * * * no response", true); terminal.AddLine(" Hop 3 : * * * no response", true); terminal.AddLine(" Trace terminated. Destination unreachable or ICMP blocked.", true); } } private static void AddSep(LG_ComputerTerminal terminal) { terminal.AddLine("==========================================================", true); } private static void AddBlock(LG_ComputerTerminal terminal, string text) { if (text != null) { string text2 = text.Replace("\r\n", "\n").Trim('\n'); string[] array = text2.Split('\n'); string[] array2 = array; foreach (string text3 in array2) { terminal.AddLine(text3.TrimEnd('\r'), true); } } } private static void OpenDoor(int targetZone) { //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown Il2CppArrayBase<LG_SecurityDoor> val = Object.FindObjectsOfType<LG_SecurityDoor>(); bool flag = default(bool); BepInExWarningLogInterpolatedStringHandler val2; if (val == null || val.Length == 0) { ManualLogSource log = Plugin.Log; val2 = new BepInExWarningLogInterpolatedStringHandler(21, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[DOOR] 보안문을 찾지 못했습니다."); } log.LogWarning(val2); return; } foreach (LG_SecurityDoor item in val) { try { if ((Object)(object)item == (Object)null || item.LinkedToZoneData == null || item.LinkedToZoneData.Alias != targetZone) { continue; } ManualLogSource log2 = Plugin.Log; BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(27, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" 문 발견, 열기 시도..."); } log2.LogInfo(val3); item.ForceOpenSecurityDoor(); ManualLogSource log3 = Plugin.Log; val3 = new BepInExInfoLogInterpolatedStringHandler(21, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" 문 열기 성공!"); } log3.LogInfo(val3); return; } catch (Exception ex) { ManualLogSource log4 = Plugin.Log; BepInExErrorLogInterpolatedStringHandler val4 = new BepInExErrorLogInterpolatedStringHandler(11, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val4).AppendLiteral("[DOOR] 오류: "); ((BepInExLogInterpolatedStringHandler)val4).AppendFormatted<string>(ex.Message); } log4.LogError(val4); } } ManualLogSource log5 = Plugin.Log; val2 = new BepInExWarningLogInterpolatedStringHandler(31, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("으로 연결된 문을 찾지 못했습니다."); } log5.LogWarning(val2); } } }
bananas_rundown/bananasTerminal.dll
Decompiled 2 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using GameData; using HarmonyLib; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem.Collections.Generic; using LevelGeneration; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("bananasTerminal")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("bananasTerminal")] [assembly: AssemblyTitle("bananasTerminal")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BananasTerminal { [BepInPlugin("com.bananas.terminal", "BananasTerminal", "1.1.0")] public class Plugin : BasePlugin { public static ManualLogSource Log; private Harmony _harmony; public override void Load() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown Log = ((BasePlugin)this).Log; Log.LogInfo((object)"BananasTerminal Refactored 로드됨!"); _harmony = new Harmony("com.bananas.terminal"); _harmony.PatchAll(); } } public static class HackPuzzleState { public static bool AlphaServiceTagConfirmed = false; public static bool AlphaAuditIndexConfirmed = false; public static bool BetaChecksumConfirmed = false; public static bool Door201Unlocked = false; public static bool NodeEpsilonScanned = false; public static bool NodeAlphaReRouted = false; public static bool NodeBetaReRouted = false; public static bool Door202Unlocked = false; private static Dictionary<string, string> ActiveConnections = new Dictionary<string, string>(); public static void SetConnection(string nodeId, string ip) { string key = Normalize(nodeId); if (ActiveConnections.ContainsKey(key)) { ActiveConnections[key] = ip; } else { ActiveConnections.Add(key, ip); } } public static string GetConnection(string nodeId) { string key = Normalize(nodeId); return ActiveConnections.ContainsKey(key) ? ActiveConnections[key] : ""; } public static void ClearConnection(string nodeId) { string key = Normalize(nodeId); if (ActiveConnections.ContainsKey(key)) { ActiveConnections[key] = ""; } } public static void ResetAll() { AlphaServiceTagConfirmed = false; AlphaAuditIndexConfirmed = false; BetaChecksumConfirmed = false; Door201Unlocked = false; NodeEpsilonScanned = false; NodeAlphaReRouted = false; NodeBetaReRouted = false; Door202Unlocked = false; ActiveConnections.Clear(); } private static string Normalize(string s) { return (s ?? "UNKNOWN").Trim().ToUpperInvariant(); } } public class HackFile { public string Name; public string Size; public string Tags; public string ProbeText; public Action OnProbe; public HackFile(string name, string size, string tags, string probeText, Action onProbe = null) { Name = name; Size = size; Tags = tags; ProbeText = probeText; OnProbe = onProbe; } } public class HackHost { public string Ip; public string HostName; public string Status; public string Directory; public List<HackFile> Files = new List<HackFile>(); public HackHost(string ip, string hostName, string status, string directory, params HackFile[] files) { Ip = ip; HostName = hostName; Status = status; Directory = directory; Files.AddRange(files); } public HackFile FindFile(string fileName) { string text = (fileName ?? "").Trim().ToUpperInvariant(); foreach (HackFile file in Files) { if (file.Name.ToUpperInvariant() == text) { return file; } } return null; } } public class HackNode { public string NodeId; public string ZoneLabel; public string SubnetLabel; public string Intro; public string ScanFooter; public List<HackHost> Hosts = new List<HackHost>(); public HackNode(string nodeId, string zoneLabel, string subnetLabel, string intro, string scanFooter, params HackHost[] hosts) { NodeId = nodeId; ZoneLabel = zoneLabel; SubnetLabel = subnetLabel; Intro = intro; ScanFooter = scanFooter; Hosts.AddRange(hosts); } public HackHost FindHost(string ip) { foreach (HackHost host in Hosts) { if (host.Ip == ip) { return host; } } return null; } } public static class HackDatabase { private static Dictionary<string, HackNode> Nodes; public static HackNode GetNode(string nodeId) { EnsureBuilt(); string key = (nodeId ?? "UNKNOWN").Trim().ToUpperInvariant(); return Nodes.ContainsKey(key) ? Nodes[key] : null; } public static HackHost GetConnectedHost(string nodeId) { HackNode node = GetNode(nodeId); if (node == null) { return null; } string connection = HackPuzzleState.GetConnection(nodeId); return node.FindHost(connection); } private static void EnsureBuilt() { if (Nodes == null) { Nodes = new Dictionary<string, HackNode>(); Add(BuildAlpha()); Add(BuildBeta()); Add(BuildGamma()); Add(BuildDelta()); Add(BuildEpsilon()); Add(BuildZeta()); Add(BuildEta()); } } private static void Add(HackNode node) { Nodes[node.NodeId] = node; } private static HackNode BuildAlpha() { return new HackNode("NODE_ALPHA", "ZONE 200 :: ALPHA NODE", "192.168.1.0/24", "Establishing Alpha maintenance backbone handshake...", ">> SCAN COMPLETE: Alpha routing table contains 5 flagged hosts.", new HackHost("192.168.1.12", "SYS_CCTV_NODE04", "PORT 8022/CLOSED", "/mnt/storage/cctv/", new HackFile("archive_manifest.cfg", "1.2 KB", "", "\r\n>> PROBE: Parsing archive_manifest.cfg...\r\n File type : CONFIG / CCTV ARCHIVE INDEX\r\n Checksum : 0x4210 (verified)\r\n\r\n CAMERA ARCHIVE MANIFEST / NODE04\r\n\r\n cam01_stream.mp4 ward-corridor-a missing frames: 03:14:02 - 03:17:41\r\n cam02_stream.mp4 delta-junction missing frames: 03:17:02 - 03:17:39\r\n\r\n The manifest references service ticket A1B2 for camera relay replacement.\r\n Later security review marked A1B2 as a relay-only ticket, not a gate actuator tag.\r\n\r\n Cross-reference:\r\n - error_log_04.txt\r\n - sec_gateway_rotation.log"), new HackFile("error_log_04.txt", "4.2 KB", "", "\r\n>> PROBE: Parsing error_log_04.txt...\r\n File type : PLAIN TEXT / DEVICE ERROR LOG\r\n Checksum : 0x3311 (mismatch - partial recovery)\r\n\r\n [03:16:51] frame buffer underrun on camera bus 04\r\n [03:17:08] relay ticket A1B2 echoed by camera daemon\r\n [03:17:12] relay ticket rejected by non-camera validator\r\n [03:18:44] stale auth token B8C2 observed in crash buffer\r\n\r\n Maintenance note:\r\n A1B2 and B8C2 are camera-side artifacts. They may appear near the breach window,\r\n but neither belongs to the Z201 perimeter bridge."), new HackFile("frame_dropper.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing frame_dropper.sh...\r\n File type : SHELL SCRIPT / CAMERA DIAGNOSTIC\r\n Checksum : 0x0D04 (verified)\r\n\r\n #!/bin/sh\r\n echo 'dropping damaged frame groups'\r\n /usr/bin/camfix --node=04 --window=0317 --mask=relay\r\n\r\n Comment recovered from script tail:\r\n 'The 0317 outage is shared with Delta, but camera masks do not authorize locks.'")), new HackHost("192.168.1.35", "HYDRO_VALVE_CTRL", "PORT 5021/FILTERED", "/sys/io/hydro/", new HackFile("valve_pressure.dat", "8.4 KB", "", "\r\n>> PROBE: Parsing valve_pressure.dat...\r\n File type : DATA / HYDRO PRESSURE SNAPSHOT\r\n Checksum : 0x8135 (verified)\r\n\r\n Valve group H-35 reported an emergency pressure drop during the same cycle\r\n as the Z201 gate desync. The attached batch marker C3D4 was generated by\r\n the hydro controller after the drop, not before it.\r\n\r\n Audit remark:\r\n C3D4 appears in failure logs as FORMAT_ERROR when sent to the gate validator."), new HackFile("override_protocol.md", "2.1 KB", "", "\r\n>> PROBE: Parsing override_protocol.md...\r\n File type : MARKDOWN / HYDRO OVERRIDE PROCEDURE\r\n Checksum : 0x0A35 (verified)\r\n\r\n HYDRO OVERRIDE PROCEDURE\r\n\r\n 1. Isolate valve cluster.\r\n 2. Confirm drain pressure below 1.10 atm.\r\n 3. Use local hydro override only.\r\n\r\n Legacy field:\r\n HYDRO_OVERRIDE_TAG = C3D4\r\n\r\n Warning:\r\n Hydro override tags do not cross into security-door validation.\r\n If C3D4 is accepted anywhere, the destination is not the Delta gateway."), new HackFile("flow_rate_v2.cfg", "1.1 KB", "", "\r\n>> PROBE: Parsing flow_rate_v2.cfg...\r\n File type : CONFIG / HYDRO FLOW RATE\r\n Checksum : 0xF035 (verified)\r\n\r\n flow.max_safe = 78.2\r\n flow.lockout = TRUE\r\n validator.scope = HYDRO_LOCAL\r\n validator.export = FALSE\r\n\r\n No remote bridge export is enabled from this controller.")), new HackHost("192.168.1.50", "MAINT_SERVER_LOCAL", "PORT 0022/OPEN (SSHv2)", "/var/sys/main/net/cfg/", new HackFile("dhcp_lease.bak", "12.4 KB", "", "\r\n>> PROBE: Parsing dhcp_lease.bak...\r\n File type : BINARY BACKUP / DHCP TABLE\r\n Checksum : 0x3311 (mismatch - file may be corrupted)\r\n\r\n LEASE TABLE (partial recovery)\r\n IP MAC TTL\r\n 192.168.1.12 DE:AD:BE:EF:01:12 3600s\r\n 192.168.1.35 DE:AD:BE:EF:01:35 3600s\r\n 192.168.1.50 DE:AD:BE:EF:01:50 PERMANENT\r\n 192.168.1.77 -- redacted -- upstream gated\r\n\r\n Note:\r\n The permanent lease is the only Alpha host allowed to preserve pre-audit\r\n maintenance records after the 0317 outage."), new HackFile("network_alpha_01.txt", "2.2 KB", "", "\r\n>> PROBE: Parsing network_alpha_01.txt...\r\n File type : PLAIN TEXT / MAINTENANCE ROUTING MEMO\r\n Checksum : 0xA1F3 (verified)\r\n\r\n MAINTENANCE ROUTING MEMO / ALPHA BACKBONE\r\n\r\n The actuator assigned to the Z201 perimeter bridge was replaced after\r\n repeated lock desync failures. The replacement was filed before the second\r\n audit window, so the tag survived the later invalidation sweep.\r\n\r\n Replacement service tag:\r\n 4F2A\r\n\r\n Do not confuse this with camera relay ticket A1B2. Both appear near the\r\n 0317 outage, but only the actuator tag was physically installed on the\r\n perimeter bridge.\r\n\r\n Related records:\r\n - network_alpha_02.txt\r\n - sec_gateway_rotation.log", delegate { HackPuzzleState.AlphaServiceTagConfirmed = true; }), new HackFile("network_alpha_02.txt", "1.9 KB", "", "\r\n>> PROBE: Parsing network_alpha_02.txt...\r\n File type : PLAIN TEXT / AUDIT WINDOW REPORT\r\n Checksum : 0xB2C4 (verified)\r\n\r\n AUDIT WINDOW REPORT / ZONE 200\r\n\r\n Audit window 01 rejected all pre-incident service tags.\r\n Audit window 02 restored a narrow index range after Delta confirmed the\r\n actuator replacement was legitimate.\r\n\r\n Restored range:\r\n 99B0 - 99B4\r\n\r\n The Z201 bridge was re-indexed under the middle entry of that restored range.\r\n Later batches were test traffic and should not be trusted.\r\n\r\n Review note:\r\n Sequence matters. Service tag first, restored audit index second, accepted\r\n Delta checksum last.", delegate { HackPuzzleState.AlphaAuditIndexConfirmed = true; }), new HackFile("routing_tables.cfg", "4.4 KB", "", "\r\n>> PROBE: Parsing routing_tables.cfg...\r\n File type : CONFIG / ROUTING TABLE\r\n Checksum : 0xFFA0 (verified)\r\n\r\n Destination Gateway Metric Comment\r\n 192.168.1.0/24 0.0.0.0 0 alpha-local\r\n 192.168.3.0/24 192.168.1.254 80 delta-bridge archived\r\n 192.168.4.0/24 192.168.1.254 200 warden-reserved\r\n\r\n The Delta bridge entry was archived after Z201 relocation.\r\n If Epsilon exposes the Warden route, Alpha may forward a bridge packet to 192.168.4.5.")), new HackHost("192.168.1.102", "LIFT_MOTOR_ENG", "PORT 9000/SECURED", "/var/eng/motor/", new HackFile("gear_ratio_backup.txt", "5.5 KB", "", "\r\n>> PROBE: Parsing gear_ratio_backup.txt...\r\n File type : TEXT / LIFT ENGINEERING BACKUP\r\n Checksum : 0x8102 (verified)\r\n\r\n Lift engine L-102 was locked below Sublevel 4 after the 0317 outage.\r\n A stale service mark 5E6F was copied into the motor controller during rollback.\r\n\r\n Audit remark:\r\n 5E6F is a rollback artifact. Security logs list it as KEY_EXPIRED."), new HackFile("motor_fault_codes.csv", "19.3 KB", "", "\r\n>> PROBE: Parsing motor_fault_codes.csv...\r\n File type : CSV / MOTOR FAULT CODES\r\n Checksum : 0x102C (verified)\r\n\r\n code,meaning,bridge_scope\r\n 5E6F,rollback mark,LIFT_ONLY\r\n E771,shaft obstruction,LIFT_ONLY\r\n 0317,blackout window,SHARED_EVENT\r\n\r\n Shared event timestamps are not authorization values by themselves.")), new HackHost("192.168.1.144", "RECYCLING_PLANT_B", "PORT 1024/DISCONNECTED", "/usr/local/bin/", new HackFile("calibration_v1.cfg", "0.8 KB", "", "\r\n>> PROBE: Parsing calibration_v1.cfg...\r\n File type : CONFIG / RECYCLER CALIBRATION\r\n Checksum : 0x144A (verified)\r\n\r\n legacy.batch = B3F1\r\n legacy.mode = WARDEN_v1_COMPAT\r\n export.scope = LOCAL_RECYCLER\r\n\r\n B3F1 was valid before the Delta gateway migration. Current Z201 validators\r\n reject v1-compatible cache entries."), new HackFile("sorting_logic.py", "15.2 KB", "", "\r\n>> PROBE: Parsing sorting_logic.py...\r\n File type : PYTHON / RECYCLING SORT LOGIC\r\n Checksum : 0x144B (verified)\r\n\r\n recovered comment:\r\n 'B3F1 looks like an auth batch, but it came from recycler calibration.\r\n Do not send recycler cache to security bridge.'"))); } private static HackNode BuildBeta() { return new HackNode("NODE_BETA", "ZONE 200 :: BETA NODE", "192.168.1.x / SEC_CLUSTER", "Binding Beta security cluster interface...", ">> WARNING: Security Door Z201 command vector relocated to Delta cluster.", new HackHost("192.168.1.77", "SEC_LOG_SERVER", "PORT 0022/OPEN (AES-256)", "/var/log/security/", new HackFile("auth_fail.log", "412 KB", "", "\r\n>> PROBE: Parsing auth_fail.log...\r\n File type : PLAIN TEXT / AUTH FAILURE LOG\r\n Checksum : 0x0A1B (verified)\r\n\r\n Recent failures:\r\n [FAIL] KEY=A1B2-C3D4-E5F6 reason: WRONG_SEQUENCE\r\n [FAIL] KEY=B3F1-99B2-77E1 reason: LEGACY_PREFIX\r\n [FAIL] KEY=4F2A-99B1-77E1 reason: WRONG_AUDIT_INDEX\r\n [FAIL] KEY=4F2A-99B2-5E6F reason: EXPIRED_SUFFIX\r\n\r\n Failure logs are useful only for exclusion. They show what was tried,\r\n not what the gateway accepted."), new HackFile("firewall_dropped.bak", "1.1 MB", "", "\r\n>> PROBE: Parsing firewall_dropped.bak...\r\n File type : BACKUP / FIREWALL DROPPED PACKETS\r\n Checksum : 0xB077 (verified)\r\n\r\n 192.168.1.102 -> 192.168.3.44 token 5E6F dropped: expired lift rollback mark\r\n 192.168.1.35 -> 192.168.3.44 token C3D4 dropped: hydro local format\r\n 192.168.1.12 -> 192.168.3.44 token A1B2 dropped: camera relay ticket\r\n\r\n Delta gateway accepted only packets sourced from the maintenance server\r\n and security audit trail."), new HackFile("security_log.txt", "94.2 KB", "", "\r\n>> PROBE: Decrypting security_log.txt...\r\n File type : ENCRYPTED LOG / SECURITY AUDIT\r\n Checksum : 0x77E1 (verified post-decrypt)\r\n Entropy : 7.91 bits/byte before decrypt\r\n\r\n SECURITY AUDIT / SEC_LOG_SERVER\r\n\r\n Delta gateway rejected pre-decrypt checksums, failed login tokens, and\r\n local controller marks. It accepted only the post-decrypt audit checksum\r\n written after the actuator tag and audit index were reconciled.\r\n\r\n Final accepted audit checksum:\r\n 0x77E1\r\n\r\n Rejected values in same window:\r\n A1B2 - camera relay\r\n C3D4 - hydro local\r\n 5E6F - lift rollback expired\r\n B3F1 - legacy recycler cache\r\n\r\n Order reminder:\r\n physical actuator tag -> restored audit index -> accepted post-decrypt checksum", delegate { HackPuzzleState.BetaChecksumConfirmed = true; }), new HackFile("ssh_handshake.log", "12.5 KB", "", "\r\n>> PROBE: Parsing ssh_handshake.log...\r\n File type : PLAIN TEXT / SSH SESSION LOG\r\n Checksum : 0x5077 (verified)\r\n\r\n [OK] 192.168.1.50 -> 192.168.1.77 ESTABLISHED T+044s\r\n [FAIL] 192.168.1.33 -> 192.168.1.77 RST T+012s\r\n [FAIL] 192.168.1.80 -> 192.168.1.77 RST T+020s\r\n\r\n Beta accepted Alpha maintenance server as upstream, not the dummy vault."), new HackFile("intrusion_report.dat", "4.4 KB", "", "\r\n>> PROBE: Parsing intrusion_report.dat...\r\n File type : BINARY / INTRUSION DETECTION REPORT\r\n Checksum : 0x9F3A (verified)\r\n\r\n One anomaly flagged:\r\n Source IP : 192.168.1.102\r\n Event type : REPEATED_PORT_KNOCK\r\n Token echo : 5E6F\r\n\r\n The report predates the accepted Delta audit entry. Treat as background noise.")), new HackHost("192.168.1.80", "DUMMY_LOG_VAULT", "PORT 22/SECURED", "/var/sys/backup/", new HackFile("dummy_data_01.txt", "4.2 KB", "", "\r\n>> PROBE: Parsing dummy_data_01.txt...\r\n File type : TEXT / MIRRORED LOG EXTRACT\r\n Checksum : 0x8080 (verified)\r\n\r\n Mirrored line:\r\n 'B3F1 restored by cache replay.'\r\n\r\n Vault annotation:\r\n The line was copied from recycler calibration and lacks a Delta gateway signature."), new HackFile("old_manifest.cfg", "0.8 KB", "", "\r\n>> PROBE: Parsing old_manifest.cfg...\r\n File type : CONFIG / BACKUP MANIFEST\r\n Checksum : 0x8010 (verified)\r\n\r\n backup.source = RECYCLING_PLANT_B\r\n backup.mode = legacy\r\n bridge.valid = false\r\n\r\n This vault preserves old values for comparison only.")), new HackHost("192.168.1.89", "CRYOPOD_MGMT_01", "PORT 3011/SECURED", "/var/cryo/pod_01/", new HackFile("dummy_data_02.txt", "1.1 KB", "", "\r\n>> PROBE: Parsing dummy_data_02.txt...\r\n File type : TEXT / CRYOPOD TEMP NOTE\r\n Checksum : 0x8902 (verified)\r\n\r\n Pod controller echoed sequence 99B3 during a thaw alarm.\r\n Medical audit later confirmed pod-local indexing is offset by +1 from\r\n security audit windows.\r\n\r\n 99B3 is adjacent to the restored range, but not the bridge index."), new HackFile("debug_core.log", "88.4 KB", "", "\r\n>> PROBE: Parsing debug_core.log...\r\n File type : LOG / CRYOPOD DEBUG CORE\r\n Checksum : 0x8911 (verified)\r\n\r\n [DEBUG] thermal index 99B3 generated by cryopod local scheduler\r\n [DEBUG] scheduler export disabled\r\n [DEBUG] security bridge ignored cryopod-local scheduler marks")), new HackHost("192.168.1.91", "CRYOPOD_MGMT_02", "PORT 3011/SECURED", "/var/cryo/pod_02/", new HackFile("debug_core.log", "88.4 KB", "", "\r\n>> PROBE: Parsing debug_core.log...\r\n File type : LOG / CRYOPOD DEBUG CORE\r\n Checksum : 0x9111 (verified)\r\n\r\n Pod 02 contains only copied debug symbols from Pod 01.\r\n No Delta gateway signature found in this controller."), new HackFile("temp_build.bin", "104 KB", "[BINARY]", "\r\n>> PROBE: Reading temp_build.bin...\r\n File type : BINARY / TEMPORARY BUILD ARTIFACT\r\n Checksum : 0x9100 (verified)\r\n\r\n Strings recovered:\r\n 99B3\r\n CRYO_LOCAL\r\n DO_NOT_EXPORT\r\n\r\n The local scheduler string is not accepted by security validators.")), new HackHost("192.168.1.200", "GATEWAY_MIRROR_B", "PORT 443/FILTERED", "/var/sys/mirror/", new HackFile("mirror_index.txt", "3.2 KB", "", "\r\n>> PROBE: Parsing mirror_index.txt...\r\n File type : TEXT / GATEWAY MIRROR INDEX\r\n Checksum : 0x1200 (verified)\r\n\r\n Mirror captured a Delta banner but not the unlock vector.\r\n The visible suffix 77E1 is a checksum echo, not enough by itself."), new HackFile("temp_build.bin", "104 KB", "[BINARY]", "\r\n>> PROBE: Reading temp_build.bin...\r\n File type : BINARY / MIRROR SCRATCH BUFFER\r\n Checksum : 0x200B (mismatch)\r\n\r\n Recovered fragments are unordered and contain decoys:\r\n A1B2 C3D4 77E1 B3F1 5E6F\r\n\r\n Mirror buffers preserve failed attempts mixed with valid echoes."))); } private static HackNode BuildGamma() { return new HackNode("NODE_GAMMA", "ZONE 200 :: GAMMA NODE", "192.168.2.0/24", "Establishing localized Gamma data matrix link...", ">> SCAN COMPLETE: Standalone node routing isolated.", new HackHost("192.168.2.11", "LIGHTING_CORE_G", "PORT 80/OPEN", "/mnt/gamma/lighting/", new HackFile("gamma_sys.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing gamma_sys.cfg...\r\n File type : CONFIG / GAMMA SYSTEM PARAMETERS\r\n Checksum : 0x2A11 (verified)\r\n\r\n sys.mode = STANDBY\r\n sys.key_cache = B3F1\r\n sys.auth_profile = WARDEN_v1_COMPAT\r\n sys.bridge = GAMMA_LOCAL_ONLY\r\n\r\n B3F1 was valid before the Delta gateway migration. Current Z201 bridge\r\n rejects v1-compatible cache entries."), new HackFile("lighting_test.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing lighting_test.sh...\r\n File type : SHELL SCRIPT / LIGHTING DIAGNOSTIC\r\n Checksum : 0x2A12 (verified)\r\n\r\n #!/bin/sh\r\n /usr/bin/light_ctrl --zone=GAMMA --mode=TEST --mark=B3F1\r\n\r\n The mark is passed to a lighting controller only. It never reaches Delta.")), new HackHost("192.168.2.24", "DOOR_LINK_DUMMY_G", "PORT 443/SECURED", "/mnt/gamma/door/", new HackFile("fan_profile_v1.bak", "14.2 KB", "", "\r\n>> PROBE: Parsing fan_profile_v1.bak...\r\n File type : BACKUP / FAN PROFILE\r\n Checksum : 0x2424 (verified)\r\n\r\n Fan profile references index 99B1 as a damper position.\r\n Security review: 99B1 was tested against Delta and rejected as WRONG_AUDIT_INDEX."), new HackFile("error_dump.txt", "9.9 KB", "", "\r\n>> PROBE: Parsing error_dump.txt...\r\n File type : PLAIN TEXT / ERROR DUMP\r\n Checksum : 0x2499 (verified)\r\n\r\n [ERR] Auth sequence C3D4 failed validation - format error\r\n [ERR] Auth sequence 5E6F failed validation - key expired\r\n [WARN] Gamma dummy door link cannot forward unlock vectors")), new HackHost("192.168.2.33", "HVAC_SYS_NORTH", "PORT 23/OPEN", "/mnt/gamma/hvac/", new HackFile("hardware_map.json", "4.1 KB", "", "\r\n>> PROBE: Parsing hardware_map.json...\r\n File type : JSON / HARDWARE INVENTORY\r\n Checksum : 0x2333 (verified)\r\n\r\n { \"zone\":\"GAMMA\", \"bridge\":\"local\", \"nodes\":[\r\n { \"id\":\"G-01\", \"type\":\"LIGHTING\", \"status\":\"OK\" },\r\n { \"id\":\"G-02\", \"type\":\"HVAC\", \"status\":\"FAULT\" },\r\n { \"id\":\"G-03\", \"type\":\"POWER\", \"status\":\"OK\" }\r\n ] }\r\n\r\n No listed device owns the Z201 perimeter bridge."), new HackFile("gamma_sys.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing gamma_sys.cfg...\r\n File type : CONFIG / GAMMA SYSTEM PARAMETERS\r\n Checksum : 0x2A11 (verified)\r\n\r\n sys.mode = STANDBY\r\n sys.key_cache = B3F1\r\n sys.auth_profile = WARDEN_v1_COMPAT\r\n sys.bridge = GAMMA_LOCAL_ONLY\r\n\r\n Same cache value as Lighting Core. Still local-only.")), new HackHost("192.168.2.55", "POWER_BATTERY_G1", "PORT 8080/CLOSED", "/mnt/gamma/power/", new HackFile("power_recovery.log", "6.8 KB", "", "\r\n>> PROBE: Parsing power_recovery.log...\r\n File type : LOG / POWER RECOVERY\r\n Checksum : 0x2555 (verified)\r\n\r\n Gamma battery reported a recovery marker 4F29.\r\n The marker is one digit away from a valid actuator tag but belongs to\r\n power recovery, not lock hardware."), new HackFile("lighting_test.sh", "0.5 KB", "", "\r\n>> PROBE: Parsing lighting_test.sh...\r\n File type : SHELL SCRIPT / LIGHTING DIAGNOSTIC\r\n Checksum : 0x2A12 (verified)\r\n\r\n Duplicate of lighting diagnostic. Gamma does not export to Delta.")), new HackHost("192.168.2.92", "WATER_PUMP_GAMMA", "PORT 110/FILTERED", "/mnt/gamma/pump/", new HackFile("pump_cycle.txt", "3.7 KB", "", "\r\n>> PROBE: Parsing pump_cycle.txt...\r\n File type : TEXT / PUMP CYCLE RECORD\r\n Checksum : 0x2920 (verified)\r\n\r\n Pump cycle used label 77E0 after a pressure reset.\r\n It is adjacent to a security checksum, but Beta logs show accepted values\r\n only after decryption, not pump labels."), new HackFile("hardware_map.json", "4.1 KB", "", "\r\n>> PROBE: Parsing hardware_map.json...\r\n File type : JSON / HARDWARE INVENTORY\r\n Checksum : 0x2333 (verified)\r\n\r\n Gamma hardware inventory copy. No Delta-owned bridge found."))); } private static HackNode BuildDelta() { return new HackNode("NODE_DELTA", "ZONE 200 :: DELTA NODE", "192.168.3.0/24", "Intercepting Delta broadcast beacons...", ">> ALERT: Integrated security bridge active on 192.168.3.44.", new HackHost("192.168.3.5", "AIR_FILTER_D1", "PORT 80/OPEN", "/mnt/delta/air/", new HackFile("air_ctrl.sys", "41.0 KB", "", "\r\n>> PROBE: Parsing air_ctrl.sys...\r\n File type : SYSTEM DATA / AIR FILTER CONTROL\r\n Checksum : 0x3005 (verified)\r\n\r\n Air filter D1 shares Delta power but does not share security authority.\r\n It recorded index 99B4 as a filter cassette ID during the audit window."), new HackFile("fan_speed_profile.cfg", "2.4 KB", "", "\r\n>> PROBE: Parsing fan_speed_profile.cfg...\r\n File type : CONFIG / FAN SPEED PROFILE\r\n Checksum : 0x3505 (verified)\r\n\r\n fan.profile = EMERGENCY_PURGE\r\n cassette.id = 99B4\r\n bridge.scope = AIR_LOCAL\r\n\r\n Cassette IDs are not audit indices.")), new HackHost("192.168.3.12", "PRESSURE_VALVE_D", "PORT 21/OPEN", "/mnt/delta/valve/", new HackFile("delta_valve.cfg", "1.2 KB", "", "\r\n>> PROBE: Parsing delta_valve.cfg...\r\n File type : CONFIG / PRESSURE VALVE\r\n Checksum : 0x3012 (verified)\r\n\r\n valve.mode = bleed\r\n safety.marker = C3D4\r\n export.to.lock = false\r\n\r\n C3D4 is visible in Delta but scoped to pressure safety."), new HackFile("psi_threshold.bak", "8.8 KB", "", "\r\n>> PROBE: Parsing psi_threshold.bak...\r\n File type : BACKUP / PRESSURE THRESHOLD\r\n Checksum : 0x3128 (verified)\r\n\r\n Old pressure threshold backup. No security bridge signature present.")), new HackHost("192.168.3.18", "COMPRESSOR_ENG_D", "PORT 8022/CLOSED", "/mnt/delta/compressor/", new HackFile("sensor_dump.log", "212 KB", "", "\r\n>> PROBE: Parsing sensor_dump.log...\r\n File type : SENSOR DATA LOG\r\n Checksum : 0x0F1E (corrupted - partial read)\r\n\r\n RPM: 3400 | TEMP: 88C | PRESSURE: 1.04 atm\r\n RPM: 3412 | TEMP: 89C | PRESSURE: 1.03 atm\r\n RPM: 0 | TEMP: 91C | PRESSURE: 0.00 atm [FAULT]\r\n\r\n Fault cycle produced marker E5F6. Auth logs reject E5F6 inside the common\r\n failed sequence A1B2-C3D4-E5F6."), new HackFile("compressor_core.bin", "2048 KB", "[BINARY]", "\r\n>> PROBE: Reading compressor_core.bin...\r\n File type : BINARY / COMPRESSOR CORE\r\n Checksum : 0x3180 (verified)\r\n\r\n Binary strings recovered:\r\n E5F6\r\n COMPRESSOR_FAULT\r\n AIR_LOCAL_ONLY")), new HackHost("192.168.3.44", "SEC_GATEWAY_INTEGRATED", "PORT 0022/OPEN (INTERLOCKED)", "/sys/lock/z201/", new HackFile("gate_interlock_core.bin", "1024 KB", "[SYSTEM_LOCK]", "\r\n>> PROBE: Reading gate_interlock_core.bin...\r\n File type : SYSTEM LOCK / GATE INTERLOCK CORE\r\n Checksum : 0x3440 (verified)\r\n\r\n Z201 interlock requires three ordered values from separate authorities:\r\n\r\n 1. Physical maintenance authority\r\n 2. Restored audit index\r\n 3. Accepted post-decrypt security checksum\r\n\r\n The module refuses values copied from local controllers, legacy caches,\r\n relay tickets, and failed attempt buffers."), new HackFile("bypass_vector_check.sys", "42.8 KB", "", "\r\n>> PROBE: Parsing bypass_vector_check.sys...\r\n File type : SYSTEM BINARY / VALIDATION MODULE\r\n Checksum : 0x9A2F (verified)\r\n\r\n Validator notes:\r\n - Slot 0 expects an actuator service tag, not a relay ticket.\r\n - Slot 1 expects the restored middle audit entry, not an adjacent index.\r\n - Slot 2 expects the accepted post-decrypt checksum, not a failed token.\r\n\r\n Registered slots: 3\r\n Values are masked in this module."), new HackFile("remote_unlock_vector.sh", "4.2 KB", "[READY_FOR_INPUT]", "\r\n>> PROBE: Executing remote_unlock_vector.sh diagnostic...\r\n File type : SHELL SCRIPT / UNLOCK VECTOR\r\n Checksum : 0x4D3C (verified)\r\n\r\n [STATUS] Vector payload initialized.\r\n [READY] Command interpreter armed for ordered auth stream.\r\n [INPUT] Awaiting 3-part value sequence.\r\n\r\n Format:\r\n AAAA-BBBB-CCCC\r\n\r\n The script does not reveal values. Source them from records that survived\r\n the 0317 reconciliation instead of from failed attempt logs.\r\n\r\n Use UNLOCK <key> to transmit authorization stream."), new HackFile("error_auth_failure.log", "122.5 KB", "", "\r\n>> PROBE: Parsing error_auth_failure.log...\r\n File type : PLAIN TEXT / AUTH FAILURE LOG\r\n Checksum : 0x3344 (verified)\r\n\r\n Recent failures:\r\n [FAIL] KEY=A1B2-C3D4-E5F6 reason: WRONG_SEQUENCE\r\n [FAIL] KEY=1111-2222-3333 reason: INVALID_FORMAT\r\n [FAIL] KEY=DEAD-BEEF-CAFE reason: INVALID_FORMAT\r\n [FAIL] KEY=0000-FFFF-0000 reason: KEY_EXPIRED\r\n [FAIL] KEY=9A3B-11CC-F200 reason: WRONG_SEQUENCE\r\n\r\n Failure logs are contaminated with decoys.")), new HackHost("192.168.3.80", "D_MAINT_CONSOLE_LINK", "PORT 1024/DISCONNECTED", "/mnt/delta/maint/", new HackFile("test_leak.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing test_leak.sh...\r\n File type : SHELL SCRIPT / TEST LEAK\r\n Checksum : 0x3080 (verified)\r\n\r\n Developer test value 9A3B was leaked in an old console test.\r\n Delta now rejects it as WRONG_SEQUENCE."), new HackFile("catalog_archive.dat", "94.0 KB", "", "\r\n>> PROBE: Parsing catalog_archive.dat...\r\n File type : DATA / CATALOG ARCHIVE\r\n Checksum : 0x3800 (verified)\r\n\r\n Archive contains mixed identifiers from air, valve, compressor, and lock\r\n systems. Only records with explicit gateway authority should be trusted."))); } private static HackNode BuildEpsilon() { return new HackNode("NODE_EPSILON", "ZONE 201 :: EPSILON NODE", "192.168.4.0/24", "WARDEN backbone interference detected. Initiating volatile bypass scan...", ">> [CRITICAL] WARDEN core route exposed. Firewall countermeasures active.", new HackHost("192.168.4.5", "WARDEN_CORE_OVERRIDE", "PORT 0443/INTERLOCKED", "/warden/kernel/override/", new HackFile("master_bypass.sys", "8.0 MB", "[UNLOCKED]", "\r\n>> PROBE: Parsing master_bypass.sys...\r\n File type : WARDEN KERNEL MODULE / OVERRIDE\r\n Checksum : 0xFEED (verified)\r\n\r\n WARDEN KERNEL OVERRIDE SEQUENCE INITIALIZED\r\n\r\n Epsilon accepts a reduced bypass phrase only after Alpha and Beta bridge\r\n packets are synchronized into the core route. The phrase reuses the physical\r\n actuator tag from the Z201 reconciliation and appends the override suffix.\r\n\r\n Format:\r\n XXXX-BYPASS\r\n\r\n Use UNLOCK <key> to execute kernel override."), new HackFile("override_journal.txt", "7.7 KB", "", "\r\n>> PROBE: Parsing override_journal.txt...\r\n File type : TEXT / WARDEN OVERRIDE JOURNAL\r\n Checksum : 0xE005 (verified)\r\n\r\n Alpha bridge packet: pending until LINK_ALPHA received.\r\n Beta bridge packet : pending until LINK_BETA received.\r\n\r\n Core route ignores local Epsilon decoys. It only trusts packets forwarded\r\n from Zone 200 records already reconciled by Delta.")), new HackHost("192.168.4.12", "BIO_WASTE_INCINERATOR", "PORT 80/CLOSED", "/var/log/warden/incinerator/", new HackFile("incinerator_lock.sh", "2.2 KB", "", "\r\n>> PROBE: Parsing incinerator_lock.sh...\r\n File type : SHELL SCRIPT / INCINERATOR LOCK\r\n Checksum : 0x4120 (verified)\r\n\r\n Incinerator lock used phrase BURN-0317 during disposal lockdown.\r\n Warden core marks it as facility safety language, not kernel override."), new HackFile("voltage_drop.txt", "0.9 KB", "", "\r\n>> PROBE: Parsing voltage_drop.txt...\r\n File type : TEXT / VOLTAGE DROP REPORT\r\n Checksum : 0x4121 (verified)\r\n\r\n Voltage drop coincided with 0317 but did not originate from the bridge.")), new HackHost("192.168.4.20", "VENTILATION_FAN_Z201", "PORT 8080/BYPASSED", "/var/log/warden/vent/", new HackFile("fan_rpm_diag.log", "112 KB", "", "\r\n>> PROBE: Parsing fan_rpm_diag.log...\r\n File type : LOG / FAN RPM DIAGNOSTIC\r\n Checksum : 0x4200 (verified)\r\n\r\n Fan controller echoes suffix BYPASS during emergency ventilation tests.\r\n It lacks the actuator prefix required by the kernel override module."), new HackFile("security_heartbeat.cfg", "1.4 KB", "", "\r\n>> PROBE: Parsing security_heartbeat.cfg...\r\n File type : CONFIG / SECURITY HEARTBEAT\r\n Checksum : 0x4201 (verified)\r\n\r\n heartbeat.route = EPSILON_LOCAL\r\n heartbeat.trust = false\r\n heartbeat.note = wait for Alpha/Beta bridge packets")), new HackHost("192.168.4.55", "SEC_CAM_Z201_A", "PORT 554/SECURED", "/var/log/warden/cam/", new HackFile("cam_stream_dump.bak", "4.5 MB", "", "\r\n>> PROBE: Parsing cam_stream_dump.bak...\r\n File type : BACKUP / CAMERA STREAM DUMP\r\n Checksum : 0x4555 (mismatch)\r\n\r\n Visible text recovered:\r\n 4F2A near frame tear, 0317 in timestamp overlay, BYPASS in warning banner.\r\n\r\n Camera dumps mix overlay text with real identifiers. Confirm values against\r\n Alpha and Beta records before trusting them."), new HackFile("security_heartbeat.cfg", "1.4 KB", "", "\r\n>> PROBE: Parsing security_heartbeat.cfg...\r\n File type : CONFIG / SECURITY HEARTBEAT\r\n Checksum : 0x4201 (verified)\r\n\r\n Duplicate heartbeat config. Epsilon still waits for external bridge packets.")), new HackHost("192.168.4.99", "SUB_STATION_FEEDER", "PORT 22/FILTERED", "/var/log/warden/power/", new HackFile("voltage_drop.txt", "0.9 KB", "", "\r\n>> PROBE: Parsing voltage_drop.txt...\r\n File type : TEXT / SUBSTATION VOLTAGE REPORT\r\n Checksum : 0x4999 (verified)\r\n\r\n Substation feeder generated tag FEED during power rollback.\r\n FEED is a checksum-like word, not a kernel override prefix."), new HackFile("feeder_journal.txt", "3.1 KB", "", "\r\n>> PROBE: Parsing feeder_journal.txt...\r\n File type : TEXT / FEEDER JOURNAL\r\n Checksum : 0x499A (verified)\r\n\r\n The feeder observed Alpha and Beta packets only after they were injected\r\n from their original terminals. Local replay failed."))); } private static HackNode BuildZeta() { return new HackNode("NODE_ZETA", "ZONE 201 :: ZETA NODE", "192.168.5.0/24", "Resolving Zeta secondary register paths...", ">> SCAN COMPLETE: Zeta active targets listed.", new HackHost("192.168.5.10", "INTERCOM_RELAY_ZETA", "PORT 5001/OPEN", "/mnt/zeta/intercom/", new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA INTERCOM CONFIG\r\n Checksum : 0x5100 (verified)\r\n\r\n <zeta relay='intercom' export='false'>\r\n <phrase>LINK_ZETA</phrase>\r\n <scope>VOICE_RELAY_ONLY</scope>\r\n </zeta>\r\n\r\n LINK_ZETA looks similar to Alpha/Beta bridge tokens, but the Warden core\r\n does not accept voice relay packets."), new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5101 (verified)\r\n\r\n Script copied from decontamination test system. It does not touch security routes.")), new HackHost("192.168.5.21", "DECONTAM_SPRAY_Z1", "PORT 5002/LOCKED", "/mnt/zeta/decon1/", new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5210 (verified)\r\n\r\n /usr/bin/decon --zone=ZETA --pattern=99B2\r\n\r\n Pattern 99B2 is used here as a spray timing preset copied from the restored\r\n audit range. Zeta cannot prove which audit entry Delta restored."), new HackFile("node_state_z.bak", "5.6 KB", "", "\r\n>> PROBE: Parsing node_state_z.bak...\r\n File type : BACKUP / ZETA NODE STATE\r\n Checksum : 0x5211 (verified)\r\n\r\n zeta.state = LOCKED\r\n zeta.route = LOCAL_ONLY\r\n zeta.bridge_export = FALSE")), new HackHost("192.168.5.22", "DECONTAM_SPRAY_Z2", "PORT 5002/LOCKED", "/mnt/zeta/decon2/", new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA DECON CONFIG\r\n Checksum : 0x5220 (verified)\r\n\r\n <zeta relay='decon' export='false'>\r\n <pattern>99B3</pattern>\r\n <source>CRYOPOD_MGMT_01</source>\r\n </zeta>\r\n\r\n 99B3 came from cryopod local indexing."), new HackFile("node_state_z.bak", "5.6 KB", "", "\r\n>> PROBE: Parsing node_state_z.bak...\r\n File type : BACKUP / ZETA NODE STATE\r\n Checksum : 0x5221 (verified)\r\n\r\n Zeta state backup confirms no outbound Warden bridge capability.")), new HackHost("192.168.5.64", "ELEVATOR_LOGIC_UNIT", "PORT 9100/CLOSED", "/mnt/zeta/elevator/", new HackFile("elevator_logic.txt", "6.4 KB", "", "\r\n>> PROBE: Parsing elevator_logic.txt...\r\n File type : TEXT / ELEVATOR LOGIC UNIT\r\n Checksum : 0x5640 (verified)\r\n\r\n Elevator logic saw actuator tag 4F2A in a copied maintenance memo but did\r\n not originate the tag. It cannot validate the second or third values."), new HackFile("zeta_config.xml", "4.2 KB", "", "\r\n>> PROBE: Parsing zeta_config.xml...\r\n File type : XML / ZETA CONFIG COPY\r\n Checksum : 0x5641 (verified)\r\n\r\n Zeta config copy. Local-only route.")), new HackHost("192.168.5.90", "ZETA_MAINT_PORT", "PORT 22/SECURED", "/mnt/zeta/maint/", new HackFile("maint_note.txt", "2.5 KB", "", "\r\n>> PROBE: Parsing maint_note.txt...\r\n File type : TEXT / ZETA MAINTENANCE NOTE\r\n Checksum : 0x5900 (verified)\r\n\r\n Zeta maintenance staff attempted LINK_ZETA during Warden lockdown.\r\n Core rejected it. Only LINK_ALPHA and LINK_BETA are listed in the override journal."), new HackFile("spray_test_run.sh", "1.1 KB", "", "\r\n>> PROBE: Parsing spray_test_run.sh...\r\n File type : SHELL SCRIPT / DECON TEST\r\n Checksum : 0x5901 (verified)\r\n\r\n Decon test script copy."), new HackFile("bridge_protocol.txt", "3.1 KB", "", "\r\n>> PROBE: Parsing warden_bridge_protocol.txt...\r\n File type : TEXT / WARDEN BRIDGE REROUTE PROTOCOL\r\n Checksum : 0x5902 (verified)\r\n\r\n WARDEN ZONE 201 REROUTE AUTHORIZATION MEMO\r\n\r\n Re-routing Zone 200 nodes into the Warden core backbone\r\n requires a signed bridge token per node.\r\n\r\n Token format:\r\n LINK_[NODENAME]\r\n\r\n Authorized nodes for current reroute window:\r\n - ALPHA (maintenance backbone)\r\n - BETA (security cluster)\r\n\r\n Unauthorized nodes rejected by core:\r\n - ZETA (voice relay only -- LINK_ZETA denied at kernel level)\r\n - ETA (diagnostic bus only)\r\n\r\n Tokens must be transmitted via INJECT command\r\n from the originating node after bridge link is established."))); } private static HackNode BuildEta() { return new HackNode("NODE_ETA", "ZONE 201 :: ETA NODE", "192.168.6.0/24", "Mapping Eta hardware bus addresses...", ">> SCAN COMPLETE: Eta diagnostic structure closed.", new HackHost("192.168.6.3", "SIREN_ALARM_PROXY", "PORT 80/OPEN", "/mnt/eta/alarm/", new HackFile("alarm_proxy.conf", "0.8 KB", "", "\r\n>> PROBE: Parsing alarm_proxy.conf...\r\n File type : CONFIG / ALARM PROXY\r\n Checksum : 0x6030 (verified)\r\n\r\n alarm.phrase = BYPASS\r\n alarm.scope = AUDIO_WARNING\r\n export.route = FALSE\r\n\r\n BYPASS alone is a warning phrase, not an override key."), new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE\r\n Checksum : 0x6031 (verified)\r\n\r\n Flood gate data copied the 0317 timestamp as emergency label.\r\n Timestamp labels do not replace authorization values.")), new HackHost("192.168.6.14", "FLOOD_GATE_VALVE", "PORT 443/LOCKED", "/mnt/eta/flood/", new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE VALVE\r\n Checksum : 0x6140 (verified)\r\n\r\n valve.label = 77E2\r\n valve.scope = FLOOD_LOCAL\r\n\r\n 77E2 is adjacent to the accepted security checksum but came from flood valve\r\n telemetry."), new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR\r\n Checksum : 0x6141 (verified)\r\n\r\n Grid capacitor saw Beta checksum echoes only after the security server wrote them.")), new HackHost("192.168.6.45", "GRID_CAPACITOR_ETA", "PORT 23/OPEN", "/mnt/eta/grid/", new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR\r\n Checksum : 0x6450 (verified)\r\n\r\n Capacitor discharge code FEED was generated by power rollback.\r\n Warden kernel module treats FEED as a power word, not a prefix."), new HackFile("alarm_proxy.conf", "0.8 KB", "", "\r\n>> PROBE: Parsing alarm_proxy.conf...\r\n File type : CONFIG / ALARM PROXY COPY\r\n Checksum : 0x6451 (verified)\r\n\r\n Duplicate alarm proxy config. BYPASS suffix alone is incomplete.")), new HackHost("192.168.6.71", "HEPA_FAN_CONTROLLER", "PORT 8080/CLOSED", "/mnt/eta/hepa/", new HackFile("hepa_filter.log", "10.2 KB", "", "\r\n>> PROBE: Parsing hepa_filter.log...\r\n File type : LOG / HEPA FILTER\r\n Checksum : 0x6710 (verified)\r\n\r\n HEPA controller stored index 99B0 as filter lot number.\r\n It is the first value in the restored range, not the middle entry."), new HackFile("flood_gate.dat", "12.4 KB", "", "\r\n>> PROBE: Parsing flood_gate.dat...\r\n File type : DATA / FLOOD GATE COPY\r\n Checksum : 0x6711 (verified)\r\n\r\n Copied flood-gate local telemetry.")), new HackHost("192.168.6.100", "ETA_BACKUP_DIAG", "PORT 22/SECURED", "/mnt/eta/backup/", new HackFile("eta_backup_index.txt", "2.9 KB", "", "\r\n>> PROBE: Parsing eta_backup_index.txt...\r\n File type : TEXT / ETA BACKUP INDEX\r\n Checksum : 0x6100 (verified)\r\n\r\n Eta backup contains many copied strings from Alpha, Beta, and Epsilon.\r\n Backup copies are not authoritative unless another node confirms origin."), new HackFile("grid_cap_log.txt", "44.1 KB", "", "\r\n>> PROBE: Parsing grid_cap_log.txt...\r\n File type : LOG / GRID CAPACITOR COPY\r\n Checksum : 0x6101 (verified)\r\n\r\n Copied grid log. No original security authority."))); } } [HarmonyPatch(typeof(LG_ComputerTerminalCommandInterpreter))] [HarmonyPatch("ReceiveCommand")] public class TerminalCommandPatch { public static bool Prefix(LG_ComputerTerminalCommandInterpreter __instance, TERM_Command cmd, string inputLine, string param1, string param2) { try { string text = RundownManager.ActiveExpeditionUniqueKey ?? ""; if (!text.Contains("TierB")) { return true; } } catch { return true; } if (string.IsNullOrWhiteSpace(inputLine)) { return true; } LG_ComputerTerminal terminal = __instance.m_terminal; if ((Object)(object)terminal == (Object)null) { return true; } int zone = -1; string nodeId = "UNKNOWN"; try { LG_Zone val = ((terminal.SpawnNode != null) ? terminal.SpawnNode.m_zone : null); if ((Object)(object)val != (Object)null) { zone = val.Alias; } Dictionary<string, TerminalLogFileData> localLogs = terminal.GetLocalLogs(); if (localLogs != null && localLogs.Count > 0) { Enumerator<string, TerminalLogFileData> enumerator = localLogs.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair<string, TerminalLogFileData> current = enumerator.Current; if (current.Value != null && current.Value.FileName != null) { nodeId = current.Value.FileName.Replace(".log", "").ToUpperInvariant(); break; } } } } catch { } string text2 = inputLine.Trim().ToUpperInvariant().Split(' ')[0]; string text3 = (param1 ?? "").Trim().ToUpperInvariant(); switch (text2) { case "SCAN": HandleScan(terminal, zone, nodeId); return false; case "CONNECT": HandleConnect(terminal, text3, zone, nodeId); return false; case "PROBE": HandleProbe(terminal, text3, zone, nodeId); return false; case "UNLOCK": HandleUnlock(terminal, text3, zone, nodeId); return false; case "INJECT": HandleInject(terminal, text3, zone, nodeId); return false; case "DUMP": HandleDump(terminal, nodeId); return false; case "TRACE": HandleTrace(terminal, text3, nodeId); return false; default: return true; } } private static void HandleScan(LG_ComputerTerminal terminal, int zone, string nodeId) { HackNode node = HackDatabase.GetNode(nodeId); AddSep(terminal); if (node == null) { terminal.AddLine(">> INITIALIZING LOCAL STANDALONE SCAN [" + nodeId + "]...", true); terminal.AddLine(" [!] No routing tables found for unknown node mapping.", true); AddSep(terminal); return; } terminal.AddLine(">> INITIALIZING SUBNET DEEP SCAN [" + node.ZoneLabel + "]...", true); terminal.AddLine(" " + node.Intro, true); terminal.AddLine(" [OK] Protocol IPv4-TCP stack bound successfully.", true); terminal.AddLine(">> SCANNING SUBNET CHANNELS [" + node.SubnetLabel + "]...", true); terminal.AddLine(" ", true); terminal.AddLine(" [IP ADDRESS] [HOST NAME] [STATUS]", true); foreach (HackHost host in node.Hosts) { terminal.AddLine($" {host.Ip,-15} {host.HostName,-23} {host.Status}", true); } terminal.AddLine(" ", true); terminal.AddLine(node.ScanFooter, true); if (node.NodeId == "NODE_EPSILON") { HackPuzzleState.NodeEpsilonScanned = true; } AddSep(terminal); } private static void HandleConnect(LG_ComputerTerminal terminal, string ip, int zone, string nodeId) { terminal.AddLine(" ", true); HackNode node = HackDatabase.GetNode(nodeId); if (node == null) { terminal.AddLine("ERROR: No network interface available on this node.", true); } else if ((nodeId == "NODE_ALPHA" || nodeId == "NODE_BETA") && ip == "192.168.4.5") { if (!HackPuzzleState.NodeEpsilonScanned) { terminal.AddLine("ERROR: Route to 192.168.4.5 unknown.", true); terminal.AddLine(" Core override system not yet initiated from Zone 201.", true); return; } terminal.AddLine(">> Routing bridge: " + nodeId + " -> Zone 201 core (192.168.4.5)...", true); terminal.AddLine(" [OK] Bridge link established. Upstream sync pending.", true); terminal.AddLine(" Use INJECT <token> to transmit bridge packet.", true); HackPuzzleState.SetConnection(nodeId, "192.168.4.5"); } else if (nodeId == "NODE_BETA" && ip == "192.168.1.77" && (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed)) { terminal.AddLine(">> Connecting to 192.168.1.77 (SEC_LOG_SERVER)...", true); terminal.AddLine(" [!!] Connection refused.", true); terminal.AddLine(" Upstream data link integrity check FAILED.", true); terminal.AddLine(" Beta requires Alpha maintenance/audit reconciliation before decrypt access.", true); HackPuzzleState.ClearConnection(nodeId); } else if (nodeId == "NODE_EPSILON" && ip == "192.168.4.5" && (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed || !HackPuzzleState.BetaChecksumConfirmed || !HackPuzzleState.NodeAlphaReRouted || !HackPuzzleState.NodeBetaReRouted)) { terminal.AddLine(">> Connecting to 192.168.4.5 (WARDEN_CORE_OVERRIDE)...", true); terminal.AddLine(" [!!] ACCESS DENIED: Upstream Interlock Active.", true); terminal.AddLine(" Alpha and Beta bridge packets must be synchronized first.", true); HackPuzzleState.ClearConnection(nodeId); } else { HackHost hackHost = node.FindHost(ip); if (hackHost == null) { terminal.AddLine("ERROR: Connection to " + ip + " failed.", true); terminal.AddLine(" Host unreachable or not in routing table.", true); } else { PrintDirectory(terminal, nodeId, hackHost); HackPuzzleState.SetConnection(nodeId, ip); } } } private static void PrintDirectory(LG_ComputerTerminal terminal, string nodeId, HackHost host) { terminal.AddLine(">> Connecting to " + host.Ip + " (" + host.HostName + ")...", true); terminal.AddLine(" [OK] Access granted. Session bound.", true); terminal.AddLine(" Directory: " + host.Directory, true); foreach (HackFile file in host.Files) { string arg = (string.IsNullOrWhiteSpace(file.Tags) ? "" : (" " + file.Tags)); terminal.AddLine($" > {file.Name,-26} ({file.Size}){arg}", true); } terminal.AddLine(" Use PROBE <filename> to analyze.", true); } private static void HandleProbe(LG_ComputerTerminal terminal, string filename, int zone, string nodeId) { terminal.AddLine(" ", true); AddSep(terminal); if (string.IsNullOrWhiteSpace(filename)) { terminal.AddLine("ERROR: Missing filename. Use PROBE <filename>.", true); AddSep(terminal); return; } HackHost connectedHost = HackDatabase.GetConnectedHost(nodeId); if (connectedHost == null) { terminal.AddLine("ERROR: No active session. CONNECT to a host first.", true); AddSep(terminal); return; } HackFile hackFile = connectedHost.FindFile(filename); if (hackFile == null) { terminal.AddLine(">> PROBE: File '" + filename.ToLowerInvariant() + "' not found on connected host.", true); AddSep(terminal); return; } AddBlock(terminal, hackFile.ProbeText); if (hackFile.OnProbe != null) { hackFile.OnProbe(); } AddSep(terminal); } private static void HandleUnlock(LG_ComputerTerminal terminal, string key, int zone, string nodeId) { terminal.AddLine(" ", true); switch (nodeId) { case "NODE_BETA": terminal.AddLine(">> [CRITICAL] ACCESS DENIED: MAIN COMMAND VECTOR SHIFTED.", true); terminal.AddLine(" Error: Local encryption matrix lacks gate override privileges.", true); terminal.AddLine(" Security terminal authority delegated to: [NODE_DELTA] cluster gateway.", true); break; case "NODE_DELTA": { string connection2 = HackPuzzleState.GetConnection(nodeId); if (connection2 != "192.168.3.44") { terminal.AddLine("ERROR: UNLOCK rejected. No active session on SEC_GATEWAY_INTEGRATED.", true); terminal.AddLine(" CONNECT to 192.168.3.44 first.", true); } else if (!HackPuzzleState.AlphaServiceTagConfirmed || !HackPuzzleState.AlphaAuditIndexConfirmed || !HackPuzzleState.BetaChecksumConfirmed) { terminal.AddLine("ERROR: Security interlock active. Reconciled authority records missing.", true); terminal.AddLine(" Required authorities: actuator tag, restored audit index, post-decrypt checksum.", true); } else if (key == "4F2A-99B2-77E1") { AddSep(terminal); terminal.AddLine(">> KEY SIGNATURE ACCEPTED ON SEC_GATEWAY_INTEGRATED.", true); terminal.AddLine(" Validating ordered authority stream...", true); terminal.AddLine(" [OK] Physical maintenance authority confirmed.", true); terminal.AddLine(" [OK] Restored audit index confirmed.", true); terminal.AddLine(" [OK] Post-decrypt security checksum confirmed.", true); terminal.AddLine(" BROADCASTING FORCED DE-POLARIZATION TO ZONE 201...", true); terminal.AddLine(" STATUS: [SUCCESS] UNLINK SEQUENCE COMPLETE.", true); terminal.AddLine(" SECURITY DOOR Z201 — OPENED.", true); AddSep(terminal); HackPuzzleState.Door201Unlocked = true; OpenDoor(201); } else { terminal.AddLine(">> VALIDATION FAILED: Incorrect authorization stream.", true); terminal.AddLine(" Expected format: AAAA-BBBB-CCCC", true); } break; } case "NODE_EPSILON": { string connection = HackPuzzleState.GetConnection(nodeId); if (connection != "192.168.4.5") { terminal.AddLine("ERROR: UNLOCK rejected. No active session on WARDEN_CORE_OVERRIDE.", true); } else if (key == "4F2A-BYPASS") { AddSep(terminal); terminal.AddLine(">> WARDEN KERNEL OVERRIDE AUTHORIZED.", true); terminal.AddLine(" Injecting bypass vector into core interrupt handler...", true); terminal.AddLine(" [OK] Kernel crash sequence initiated.", true); terminal.AddLine(" SECURITY DOOR Z202 — OPENED.", true); AddSep(terminal); HackPuzzleState.Door202Unlocked = true; OpenDoor(202); } else { terminal.AddLine(">> ACCESS REJECTED: Key format invalid.", true); terminal.AddLine(" Expected format: XXXX-BYPASS", true); } break; } default: terminal.AddLine("ERROR: UNLOCK command has no valid target on this node.", true); break; } } private static void HandleInject(LG_ComputerTerminal terminal, string token, int zone, string nodeId) { terminal.AddLine(" ", true); string connection = HackPuzzleState.GetConnection(nodeId); if (nodeId == "NODE_ALPHA" && connection == "192.168.4.5") { if (token == "LINK_ALPHA") { terminal.AddLine(">> INJECT: Transmitting token LINK_ALPHA to WARDEN_CORE_OVERRIDE...", true); terminal.AddLine(" [OK] Packet accepted. Alpha bridge synchronized.", true); HackPuzzleState.NodeAlphaReRouted = true; HackPuzzleState.ClearConnection(nodeId); } else { terminal.AddLine("ERROR: Token rejected. Expected: LINK_ALPHA", true); } } else if (nodeId == "NODE_BETA" && connection == "192.168.4.5") { if (!HackPuzzleState.NodeAlphaReRouted) { terminal.AddLine("ERROR: Alpha bridge not yet synchronized. Inject LINK_ALPHA first.", true); } else if (token == "LINK_BETA") { terminal.AddLine(">> INJECT: Transmitting token LINK_BETA to WARDEN_CORE_OVERRIDE...", true); terminal.AddLine(" [OK] Packet accepted. Beta bridge synchronized.", true); HackPuzzleState.NodeBetaReRouted = true; HackPuzzleState.ClearConnection(nodeId); } else { terminal.AddLine("ERROR: Token rejected. Expected: LINK_BETA", true); } } else { terminal.AddLine("ERROR: INJECT has no valid target in current session context.", true); } } private static void HandleDump(LG_ComputerTerminal terminal, string nodeId) { terminal.AddLine(" ", true); terminal.AddLine(">> VOLATILE MEMORY CORE DUMP INITIATED [" + nodeId + "]...", true); terminal.AddLine(" Reading 65536 bytes from RAM address space...", true); terminal.AddLine(" ", true); switch (nodeId) { case "NODE_ALPHA": terminal.AddLine(" 0x0000: FF A3 00 1D 4E 00 FF 00 3C AA 11 00 FF 3D 00 A1", true); terminal.AddLine(" 0x0010: 00 00 FF 00 B2 4F 00 FF 00 1A 00 FF 3E 00 00 FF", true); terminal.AddLine(" 0x0020: A1 00 3D FF 00 4F 2A 00 FF 00 1D 00 FF A0 00 3C", true); break; case "NODE_BETA": terminal.AddLine(" 0x1000: 77 E1 FF 00 AA BC DD 22 11 FF 00 44 EE FF 88 AA", true); terminal.AddLine(" 0x1010: 00 77 FF E1 22 00 FF 11 44 AA 00 FF BB CC DD EE", true); terminal.AddLine(" 0x1020: FF 00 99 B2 00 FF 00 4F 2A 00 FF 77 E1 00 FF 00", true); break; case "NODE_GAMMA": terminal.AddLine(" 0x2000: AA BB CC DD EE FF 00 11 22 33 44 55 66 77 88 99", true); terminal.AddLine(" 0x2010: B3 F1 00 AA BB 00 FF CC 00 DD 11 EE 00 22 FF 33", true); terminal.AddLine(" 0x2020: 00 AA 00 FF BB CC 00 DD EE 11 00 FF 22 33 44 55", true); break; case "NODE_DELTA": terminal.AddLine(" 0x3000: 12 34 56 78 9A BC DE F0 4F 2A 99 B2 77 E1 FF AA", true); terminal.AddLine(" 0x3010: A1 B2 C3 D4 E5 F6 00 11 22 33 44 55 66 77 88 99", true); terminal.AddLine(" 0x3020: FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00", true); break; case "NODE_EPSILON": terminal.AddLine(" 0x4000: 00 00 00 00 FF FF FF FF AC AB AD AE 12 11 23 22", true); terminal.AddLine(" 0x4010: 4F 2A 00 FF 00 00 FF FF 00 00 00 FF 4F 2A FF 00", true); terminal.AddLine(" 0x4020: FF 00 FF 00 00 00 00 FF 00 FF 00 00 00 00 FF FF", true); break; case "NODE_ZETA": terminal.AddLine(" 0x5000: 4C 49 4E 4B 5F 5A 45 54 41 00 99 B2 00 FF AA 12", true); terminal.AddLine(" 0x5010: 00 FF 99 B3 00 FF 4F 2A 00 00 AA BB CC DD EE FF", true); break; case "NODE_ETA": terminal.AddLine(" 0x6000: 42 59 50 41 53 53 00 FE ED 00 77 E2 00 99 B0 FF", true); terminal.AddLine(" 0x6010: FF 00 FE ED 00 00 03 17 00 AA BB CC DD EE FF 00", true); break; default: terminal.AddLine(" 0xF000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00", true); break; } terminal.AddLine(" ...", true); terminal.AddLine(" ", true); terminal.AddLine(" [DUMP COMPLETE] 65536 bytes read.", true); terminal.AddLine(" Integrity check: FAILED — data may be corrupted or partially overwritten.", true); } private static void HandleTrace(LG_ComputerTerminal terminal, string targetIp, string nodeId) { terminal.AddLine(" ", true); terminal.AddLine(">> INITIATING NETWORK ROUTE TRACE TO [" + targetIp + "] FROM [" + nodeId + "]...", true); if (nodeId == "NODE_DELTA" && targetIp == "192.168.3.44") { terminal.AddLine(" Hop 1 : 192.168.3.1 (Delta Switch) 2ms", true); terminal.AddLine(" Hop 2 : 192.168.3.44 (SEC_GATEWAY_INTEGRATED) 5ms", true); terminal.AddLine(" Trace complete. Dedicated core uplink confirmed.", true); } else if (nodeId == "NODE_ALPHA" && targetIp == "192.168.1.50") { terminal.AddLine(" Hop 1 : 192.168.1.1 (Alpha Gateway) 1ms", true); terminal.AddLine(" Hop 2 : 192.168.1.50 (MAINT_SERVER_LOCAL) 4ms", true); terminal.AddLine(" Trace complete.", true); } else if ((nodeId == "NODE_ALPHA" || nodeId == "NODE_BETA") && targetIp == "192.168.4.5") { terminal.AddLine(" Hop 1 : local bridge interface 2ms", true); terminal.AddLine(" Hop 2 : WARDEN route unresolved until Epsilon scan", true); terminal.AddLine(" Trace complete with conditional route.", true); } else { terminal.AddLine(" Hop 1 : * * * no response", true); terminal.AddLine(" Hop 2 : * * * no response", true); terminal.AddLine(" Hop 3 : * * * no response", true); terminal.AddLine(" Trace terminated. Destination unreachable or ICMP blocked.", true); } } private static void AddSep(LG_ComputerTerminal terminal) { terminal.AddLine("==========================================================", true); } private static void AddBlock(LG_ComputerTerminal terminal, string text) { if (text != null) { string text2 = text.Replace("\r\n", "\n").Trim('\n'); string[] array = text2.Split('\n'); string[] array2 = array; foreach (string text3 in array2) { terminal.AddLine(text3.TrimEnd('\r'), true); } } } private static void OpenDoor(int targetZone) { //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Expected O, but got Unknown Il2CppArrayBase<LG_SecurityDoor> val = Object.FindObjectsOfType<LG_SecurityDoor>(); bool flag = default(bool); BepInExWarningLogInterpolatedStringHandler val2; if (val == null || val.Length == 0) { ManualLogSource log = Plugin.Log; val2 = new BepInExWarningLogInterpolatedStringHandler(21, 0, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[DOOR] 보안문을 찾지 못했습니다."); } log.LogWarning(val2); return; } foreach (LG_SecurityDoor item in val) { try { if ((Object)(object)item == (Object)null || item.LinkedToZoneData == null || item.LinkedToZoneData.Alias != targetZone) { continue; } ManualLogSource log2 = Plugin.Log; BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(27, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" 문 발견, 열기 시도..."); } log2.LogInfo(val3); item.ForceOpenSecurityDoor(); ManualLogSource log3 = Plugin.Log; val3 = new BepInExInfoLogInterpolatedStringHandler(21, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" 문 열기 성공!"); } log3.LogInfo(val3); return; } catch (Exception ex) { ManualLogSource log4 = Plugin.Log; BepInExErrorLogInterpolatedStringHandler val4 = new BepInExErrorLogInterpolatedStringHandler(11, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val4).AppendLiteral("[DOOR] 오류: "); ((BepInExLogInterpolatedStringHandler)val4).AppendFormatted<string>(ex.Message); } log4.LogError(val4); } } ManualLogSource log5 = Plugin.Log; val2 = new BepInExWarningLogInterpolatedStringHandler(31, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[DOOR] Zone "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(targetZone); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("으로 연결된 문을 찾지 못했습니다."); } log5.LogWarning(val2); } } }