Пример #1
0
        private void ConnectBtn_Click(object sender, EventArgs e)
        {
            bool isCancelling = ConnectBtn.Text == "Cancel";

            ConnectBtn.Text = isCancelling ? "Connect" : "Cancel";

            if (isCancelling)
            {
                ResetSetup();
                _main.Game.Disconnect();
                return;
            }

            _main.Modulus  = ModulusTxt.Text;
            _main.Exponent = int.Parse(string.IsNullOrEmpty(ExponentTxt.Text)
                ? "0" : ExponentTxt.Text);

            int    gamePort           = 0;
            string gameHost           = GameHostTxt.Text.ToLower();
            bool   portConvertSuccess = int.TryParse(GamePortTxt.Text, out gamePort);

            if (TanjiMode.IsManual)
            {
                if (UseCustomClient)
                {
                    Eavesdropper.Initiate();
                }

                _main.Game.Connect(true, gameHost, gamePort);
                StatusTxt.BeginAnimation("Connecting{0} | Port: " + GamePortTxt.Text, "...");
            }
            else
            {
                FiddlerApplication.Startup(8081, FiddlerCoreStartupFlags.Default);
                StatusTxt.BeginAnimation("Extracting Host/Port{0}", "...");
            }
        }
Пример #2
0
        private byte[] ProcessResponse(byte[] payload, bool isFlash)
        {
            if (UseCustomClient && isFlash && payload.Length > 3000000)
            {
                if (!_replaceKeys)
                {
                    payload = _flash.ToBytes();
                }
                else
                {
                    _flash = new ShockwaveFlash(payload);

                    ReplaceRsaKeys(_flash);
                    payload = _flash.ToBytes();

                    string clientPath = Path.Combine("Patched Clients", GameData.FlashClientBuild + ".swf");
                    Task.Factory.StartNew(() => _flash.Save(clientPath, true));
                }

                FiddlerApplication.Shutdown();
                StatusTxt.BeginAnimation("Connecting{0} | Port: " + GameData.Port, "...");
                return(payload);
            }
            else if (TanjiMode.IsManual)
            {
                return(payload);
            }

            string response = Encoding.UTF8.GetString(payload);

            if (response.Contains("connection.info.host") && response.Contains("connection.info.port"))
            {
                GameData = HGameData.Parse(response);
                if (!UseCustomClient)
                {
                    string patchedClientPath = Path.Combine("Patched Clients", GameData.FlashClientBuild + ".swf");

                    if (!File.Exists(patchedClientPath))
                    {
                        UseCustomClient = _replaceKeys = true;
                    }
                    else
                    {
                        LoadGameClient(patchedClientPath);
                    }
                }

                if (!UseCustomClient)
                {
                    FiddlerApplication.Shutdown();
                    StatusTxt.BeginAnimation("Connecting{0} | Port: " + GameData.Port, "...");
                }
                else if (_replaceKeys)
                {
                    StatusTxt.BeginAnimation("Modifying Client{0}", "...");
                }
                else
                {
                    StatusTxt.BeginAnimation("Replacing Client{0}", "...");
                }

                _main.Game.Connect(true, GameData.Host, GameData.Port);

                response = response.Replace("/Habbo.swf", "/Habbo.swf?" + _numberGenerator.Next());
                payload  = Encoding.UTF8.GetBytes(response);
            }
            return(payload);
        }