private void DoAutomaticConnect() { Eavesdropper.EavesdropperResponse += ExtractHostPort; Eavesdropper.Initiate(8080); StatusTxt.SetDotAnimation("Extracting Host/Port"); }
private void ModifyAbc(DoABCTag abcTag) { CPoolInfo constants = abcTag.ABCData.ConstantPool; StatusTxt.SetDotAnimation("Squeezing ({0})", abcTag.Name); for (int i = 1; i < constants.Strings.Length; i++) { string constant = constants.Strings[i]; if (constant.Length > 256 || constant.Length < 2) { continue; } if (constant.Length > 2 && constant.Length < 6) { ushort possiblePort = 0; if (ushort.TryParse(constant, out possiblePort)) { if (!_possiblePorts.Contains(possiblePort)) { _possiblePorts.Add(possiblePort); } if (constant != "10001") { continue; } } } constants.Strings[i] = ReplaceConstant(constant); } }
private async void ConnectFrm_Shown(object sender, EventArgs e) { BrowseBtn.Enabled = ConnectBtn.Enabled = ModePnl.Enabled = false; StatusTxt.SetDotAnimation("Checking for updates"); try { if (await MainUI.UpdateUI.CheckForUpdatesAsync()) { WindowState = FormWindowState.Minimized; StatusTxt.StopDotAnimation("Update Found!"); MainUI.UpdateUI.ShowDialog(); } } catch { /* Update check failed. */ } finally { BrowseBtn.Enabled = ConnectBtn.Enabled = ModePnl.Enabled = true; StatusTxt.StopDotAnimation("Standing By..."); WindowState = FormWindowState.Normal; } }
private async Task <bool> DoManualConnectAsync() { StatusTxt.SetDotAnimation("Intercepting Connection"); await MainUI.Connection.ConnectAsync( GameHostTxt.Text, ushort.Parse(GamePortTxt.Text)); return(MainUI.Connection.IsConnected); }
private async Task <bool> VerifyGameClientAsync(ShockwaveFlash flash) { if (flash.IsCompressed) { StatusTxt.SetDotAnimation("Decompressing Client"); bool decompressed = await flash.DecompressAsync() .ConfigureAwait(false); } if (!flash.IsCompressed) { MainUI.Game = flash; } return(MainUI.Game != null); }
private void ExtractHostPort(object sender, EavesdropperResponseEventArgs e) { string responseBody = Encoding.UTF8.GetString(e.Payload); if (MainUI.GameData == null && responseBody.Contains("info.host")) { MainUI.GameData = new HGameData(responseBody); MainUI.ExtensionMngr.GameData = MainUI.GameData; MainUI.ExtensionMngr.Hotel = SKore.ToHotel(MainUI.GameData.Host); MainUI.IsRetro = (MainUI.ExtensionMngr.Hotel == HHotel.Unknown); if (MainUI.IsRetro) { if (!string.IsNullOrWhiteSpace(MainUI.GameData.MovieUrl) && !string.IsNullOrWhiteSpace(MainUI.GameData.BaseUrl)) { IsClientSourceReadable = true; MainUI.GameData.MovieUrl += "?" + DateTime.Now.Ticks; MainUI.GameData["tanji.connection.info.host"] = "127.0.0.1"; MainUI.GameData["tanji.client.starting"] = "Peeling Tangerines..."; } else { if (responseBody.Contains("embedSWF(")) { string child = responseBody.GetChild("embedSWF(", ','); responseBody = responseBody.Replace(child, child + $"+\"?{DateTime.Now.Ticks}\""); } MainUI.GameData["tanji.connection.info.host"] = "127.0.0.1"; responseBody = responseBody.Replace(MainUI.GameData.Host, MainUI.GameData.Host + "\", \"tanji.connection.info.host\":\"127.0.0.1"); } } if (!MainUI.IsRetro && MainUI.Game == null) { TryLoadModdedClientAsync().Wait(); } StatusTxt.SetDotAnimation((MainUI.Game == null ? "Intercepting" : "Injecting") + " Client"); if (!MainUI.IsRetro) { responseBody = responseBody.Replace(".swf?", ".swf") .Replace(".swf", ".swf?DoInject" + DateTime.Now.Ticks); if (MainUI.Game != null) { Eavesdropper.EavesdropperRequest += InjectClient; } } Eavesdropper.EavesdropperResponse -= ExtractHostPort; Eavesdropper.EavesdropperResponse += ReplaceClient; e.Payload = Encoding.UTF8.GetBytes( MainUI.IsRetro && IsClientSourceReadable ? MainUI.GameData.ToString() : responseBody); } }
private void ReplaceClient(object sender, EavesdropperResponseEventArgs e) { bool isLocal = false; if (e.Payload.Length > 3000000 && e.Response.ContentType == "application/x-shockwave-flash" || (isLocal = File.Exists(e.Response.ResponseUri.LocalPath))) { string[] ports = MainUI.GameData.Port.Split(','); if (MainUI.Game == null) { bool verifySuccess = VerifyGameClientAsync( new ShockwaveFlash(e.Payload)).Result; if (verifySuccess) { StatusTxt.SetDotAnimation("Extracting Tags"); var flashTags = MainUI.Game.ExtractTags(); IEnumerable <FlashTag> tags = null; if (MainUI.IsRetro) { tags = flashTags.OfType <DoABCTag>(); foreach (string port in ports) { ushort possiblePort = 0; if (ushort.TryParse(port, out possiblePort) && !_possiblePorts.Contains(possiblePort)) { _possiblePorts.Add(possiblePort); } } } else { tags = flashTags.OfType <DefineBinaryDataTag>(); } ModifyTags(tags); StatusTxt.SetDotAnimation("Rebuilding Client"); MainUI.Game.Rebuild(); } if (!MainUI.IsRetro) { MainUI.Game.Save(Path.Combine("Modified Clients", MainUI.GameData.MovieName + ".swf")); } } if (!isLocal) { e.Payload = MainUI.Game.Data; } MainUI.GameData.Port = ports[0]; if (!MainUI.IsRetro) { _possiblePorts.Add(ushort.Parse(MainUI.GameData.Port)); } Eavesdropper.EavesdropperResponse -= ReplaceClient; Eavesdropper.Terminate(); Task connectTask = MainUI.Connection .ConnectAsync(MainUI.GameData.Host, _possiblePorts.ToArray()); StatusTxt.SetDotAnimation( "Intercepting Connection({0})", MainUI.GameData.Port); } }