From f30dcf5ef41d54c588d7b42c48be8d941abba72e Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 8 Jan 2017 09:57:10 -0500 Subject: Initial upload --- ShiftOS.Objects/Hack.cs | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 ShiftOS.Objects/Hack.cs (limited to 'ShiftOS.Objects/Hack.cs') diff --git a/ShiftOS.Objects/Hack.cs b/ShiftOS.Objects/Hack.cs new file mode 100644 index 0000000..8967715 --- /dev/null +++ b/ShiftOS.Objects/Hack.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ShiftOS.Objects +{ + public abstract class Exploit + { + public void BeginExploit(string remote_user, bool isMud) + { + var ctx = new ExploitContext(); + SendToMUD(remote_user, "hack_getcontext"); + MessageReceived += (u, c, j) => + { + + }; + ThisContext = ctx; + } + + public ExploitContext ThisContext { get; internal set; } + + public virtual void SendToMUD(string target_user, string command, string json = "") + { + ThisContext.IsMUDHack = false; + if (command == "hack_getcontext") + { + MessageReceived?.Invoke(target_user, "context_info", ExploitContext.CreateRandom()); + } + } + + public event MUDMessageEventHandler MessageReceived; + + + public abstract void OnRun(ExploitContext ctx); + } + + public delegate void MUDMessageEventHandler(string target_user, string command, string json); + + public class ExploitContext + { + public static string CreateRandom() + { + //We can't use JSON.NET. We must construct the JSON ourselves. + StringBuilder jBuilder = new StringBuilder(); + jBuilder.AppendLine("{"); + jBuilder.Append("\tIsMUDHack: \"false\","); + + jBuilder.AppendLine("}"); + return jBuilder.ToString(); + } + + /// + /// Gets or sets whether or not this exploit context belongs to a MUD hack session. + /// + public bool IsMUDHack { get; set; } + + /// + /// Gets or sets the target username for this exploit context. Used for talking with the MUD about it. + /// + public string TargetUsername { get; set; } + + /// + /// Gets or sets the target's locks. + /// + public List TargetLocks { get; set; } + + } + + public abstract class Lock + { + public abstract bool Unlocked { get; } + public abstract void Unlock(); + } +} -- cgit v1.2.3