Beispiel #1
0
        public static void AnalyzeXML(IToolInstance tool, string version, SwfFile swf)
        {
            var doc = new XDocument();

            doc.Add(new XElement("XML"));
            foreach (var tag in swf.Tags)
            {
                // DefineBinaryData
                if (tag.Type != 87)
                {
                    continue;
                }

                // <?xml
                if (tag.Content[6] != 0x3c || tag.Content[7] != 0x3f || tag.Content[8] != 0x78 ||
                    tag.Content[9] != 0x6d || tag.Content[10] != 0x6c)
                {
                    continue;
                }

                string xmlString = Encoding.UTF8.GetString(tag.Content, 6, tag.Content.Length - 6);
                try
                {
                    XDocument xml = XDocument.Parse(xmlString);
                    doc.Root.Add(xml.Root.Elements());
                }
                catch
                {
                }
            }
            doc.Root.Add(new XAttribute("version", version));
            tool.SaveXmlData(new XmlData(doc));
        }
Beispiel #2
0
        public HttpProxy(IToolInstance tool)
        {
            var host = tool.Settings.GetValue <string>("proxy.host", "127.0.0.7");
            var port = tool.Settings.GetValue <int>("proxy.port", "2000");

            this.tool = tool;

            listener = new HttpListener();
            listener.Prefixes.Add(ProxyUrl = string.Format("http://{0}:{1}/", host, port));
            patcher = new SwfPatcher(tool, host, port);
        }
Beispiel #3
0
        public WindowManager(IToolInstance tool, ToolStripDropDownButton dropDown)
        {
            parent = new Form
            {
                FormBorderStyle = FormBorderStyle.FixedToolWindow,
                Opacity         = 0,
                ShowInTaskbar   = false
            };

            Tool          = tool;
            this.dropDown = dropDown;
            parent.Show();
            AddWindow(new Latency(this));
            AddWindow(new Connection(this));
            parent.Hide();

            Load();
        }
Beispiel #4
0
 public HttpHandler(IToolInstance tool)
 {
     this.tool = tool;
 }
Beispiel #5
0
 public SocketProxy(IToolInstance tool)
 {
     Tool = tool;
 }
Beispiel #6
0
 public SpamFilter(IToolInstance tool)
 {
     this.tool = tool;
 }
Beispiel #7
0
 public SwfPatcher(IToolInstance tool, string proxyHost, int proxyPort)
 {
     this.tool          = tool;
     targetHost         = proxyHost;
     targetHostWithPort = proxyPort == 80 ? proxyHost : proxyHost + ":" + proxyPort;
 }
Beispiel #8
0
        public static string AnalyzePackets(IToolInstance tool, long ts, ABCFile abc)
        {
            var zip = abc.instances.Zip(abc.classes, (inst, cls) => new { Instance = inst, Class = cls });

            // Find version
            var parameter = zip
                            .SingleOrDefault(type =>
            {
                var qName = abc.multinames[type.Instance.name];
                return(abc.strings[abc.namespaces[qName.QName.ns].name] == "com.company.assembleegameclient.parameters");
            });

            if (parameter == null)
            {
                return(null);
            }

            var stringTraits = parameter.Class.traits
                               .Where(trait => trait.kind == TraitKind.Const && trait.Slot.vkind == ASType.Utf8)
                               .ToList();
            var    versionTrait = stringTraits.Single(trait => trait.Slot.slotId == 1);
            string version      = abc.strings[versionTrait.Slot.vindex];
            var    buildTrait   = stringTraits.Single(trait => trait.Slot.slotId == 2);
            string build        = abc.strings[buildTrait.Slot.vindex];

            // Find gsc_
            var gscTrait = abc.instances
                           .SelectMany(inst => inst.traits)
                           .Single(trait =>
            {
                var qName = abc.multinames[trait.name];
                return(abc.strings[qName.QName.name] == "gsc_");
            });

            var handlerType = zip.Single(type => type.Instance.name == gscTrait.Slot.typeName);

            var table     = new PacketTable(ts);
            var tableType = typeof(PacketTable);

            foreach (
                var packetEntry in
                handlerType.Class.traits.Where(trait => trait.kind == TraitKind.Const && trait.Slot.vkind == ASType.Integer))
            {
                int packetIndex = (int)packetEntry.Slot.slotId - 1;
                var packetId    = (int)abc.ints[packetEntry.Slot.vindex];

                string name = null;
                if (packetIndex < packetNames.Length && packetIndex >= 0)
                {
                    name = packetNames[packetIndex];
                }
                if (name == null)
                {
                    name = string.Format("_PACKET{0:X2}", packetIndex);
                }

                tableType.GetField(name).SetValue(table, (byte)packetId);
            }
            tool.PacketTable = table;

            return(version + "." + build);
        }
Beispiel #9
0
 public SocketHandler(IToolInstance tool)
 {
     this.tool = tool;
 }