From 780afb51dc014e24eca4bab7c57da54fab4ff2bb Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Mon, 24 Jul 2006 09:37:41 +0000 Subject: [PATCH] Added the GodMode example program git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@81 52acb1d6-8a22-11de-b505-999d5b087335 --- applications/SLProxy/GodMode.cs | 85 ++++++++++++++++++++++ applications/SLProxy/GodMode.csproj | 106 ++++++++++++++++++++++++++++ applications/SLProxy/SLProxy.sln | 8 +++ 3 files changed, 199 insertions(+) create mode 100644 applications/SLProxy/GodMode.cs create mode 100644 applications/SLProxy/GodMode.csproj diff --git a/applications/SLProxy/GodMode.cs b/applications/SLProxy/GodMode.cs new file mode 100644 index 00000000..5726647e --- /dev/null +++ b/applications/SLProxy/GodMode.cs @@ -0,0 +1,85 @@ +/* + * GodMode.cs: Enables client-side God Mode privileges + * + * Copyright (c) 2006 John Hurliman + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the Second Life Reverse Engineering Team nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Net; +using System.Collections; +using SLProxy; +using libsecondlife; + +public class GodMode { + private static ProtocolManager protocolManager; + private static Proxy proxy; + + public static void Main(string[] args) { + protocolManager = new ProtocolManager("keywords.txt", "protocol.txt"); + ProxyConfig proxyConfig = new ProxyConfig("GodMode", "jhurliman@wsu.edu", protocolManager, args); + proxy = new Proxy(proxyConfig); + + // register delegates for all packets + proxy.AddDelegate("CompleteAgentMovement", Direction.Outgoing, new PacketDelegate(CompleteAgentMovement)); + + proxy.Start(); + } + + // delegate for movement packet: log the packet and return it unharmed + private static Packet CompleteAgentMovement(Packet packet, IPEndPoint endPoint) { + // deconstruct the packet + Hashtable blocks = PacketUtility.Unbuild(packet); + + LLUUID agentID = (LLUUID)PacketUtility.GetField(blocks, "AgentData", "AgentID"); + LLUUID sessionID = (LLUUID)PacketUtility.GetField(blocks, "AgentData", "SessionID"); + + Console.WriteLine("Captured CompleteAgentMovement packet, AgentID: " + + agentID.ToString() + ", SessionID: " + sessionID.ToString()); + + // construct a GrantGodlikePowers packet + blocks = new Hashtable(); + Hashtable fields; + fields = new Hashtable(); + fields["GodLevel"] = (byte)255; + fields["Token"] = LLUUID.GenerateUUID(); + blocks[fields] = "GrantData"; + + fields = new Hashtable(); + fields["AgentID"] = agentID; + fields["SessionID"] = sessionID; + blocks[fields] = "AgentData"; + + Packet godPacket = PacketBuilder.BuildPacket("GrantGodlikePowers", + protocolManager, blocks, Helpers.MSG_RELIABLE + Helpers.MSG_ZEROCODED); + + // inject the packet + proxy.InjectPacket(godPacket, Direction.Incoming); + + Console.WriteLine("Injected GrantGodlikePowers packet"); + + // return the packet unmodified + return packet; + } +} diff --git a/applications/SLProxy/GodMode.csproj b/applications/SLProxy/GodMode.csproj new file mode 100644 index 00000000..9fdf3926 --- /dev/null +++ b/applications/SLProxy/GodMode.csproj @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/applications/SLProxy/SLProxy.sln b/applications/SLProxy/SLProxy.sln index 0c0a67aa..8a57486e 100644 --- a/applications/SLProxy/SLProxy.sln +++ b/applications/SLProxy/SLProxy.sln @@ -11,6 +11,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatConsole", "ChatConsole. ProjectSection(ProjectDependencies) = postProject EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GodMode", "GodMode.csproj", "{6222B134-AE5F-489A-8A77-423A721B7C62}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug @@ -29,6 +33,10 @@ Global {D8ECCBE1-AC71-4054-AAA6-2D50E5629504}.Debug.Build.0 = Debug|.NET {D8ECCBE1-AC71-4054-AAA6-2D50E5629504}.Release.ActiveCfg = Release|.NET {D8ECCBE1-AC71-4054-AAA6-2D50E5629504}.Release.Build.0 = Release|.NET + {6222B134-AE5F-489A-8A77-423A721B7C62}.Debug.ActiveCfg = Debug|.NET + {6222B134-AE5F-489A-8A77-423A721B7C62}.Debug.Build.0 = Debug|.NET + {6222B134-AE5F-489A-8A77-423A721B7C62}.Release.ActiveCfg = Release|.NET + {6222B134-AE5F-489A-8A77-423A721B7C62}.Release.Build.0 = Release|.NET EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution EndGlobalSection