/// <summary> /// Opens a browser of the given type (if not already open) and with the given settings. /// </summary> /// <param name="data">The BotData where the settings are stored.</param> public static void OpenBrowser(BotData data) { if (!data.BrowserOpen) { data.Log(new LogEntry("Opening browser...", Colors.White)); switch (data.GlobalSettings.Selenium.Browser) { case BrowserType.Chrome: try { ChromeOptions chromeop = new ChromeOptions(); ChromeDriverService chromeservice = ChromeDriverService.CreateDefaultService(); chromeservice.SuppressInitialDiagnosticInformation = true; chromeservice.HideCommandPromptWindow = true; chromeservice.EnableVerboseLogging = false; chromeop.AddArgument("--log-level=3"); chromeop.BinaryLocation = data.GlobalSettings.Selenium.ChromeBinaryLocation; if (data.GlobalSettings.Selenium.Headless || data.ConfigSettings.ForceHeadless) { chromeop.AddArgument("--headless"); } else if (data.GlobalSettings.Selenium.ChromeExtensions.Count > 0) // This should only be done when not headless { chromeop.AddExtensions(data.GlobalSettings.Selenium.ChromeExtensions .Where(ext => ext.EndsWith(".crx")) .Select(ext => Directory.GetCurrentDirectory() + "\\ChromeExtensions\\" + ext)); } if (data.ConfigSettings.DisableNotifications) { chromeop.AddArgument("--disable-notifications"); } if (data.ConfigSettings.CustomCMDArgs != string.Empty) { chromeop.AddArgument(data.ConfigSettings.CustomCMDArgs); } if (data.ConfigSettings.RandomUA) { chromeop.AddArgument("--user-agent=" + SpiceRUA.GetiPhoneUA()); } else if (data.ConfigSettings.CustomUserAgent != string.Empty) { chromeop.AddArgument("--user-agent=" + data.ConfigSettings.CustomUserAgent); } if (data.UseProxies) { chromeop.AddArgument("--proxy-server=" + data.Proxy.Type.ToString().ToLower() + "://" + data.Proxy.Proxy); } data.Driver = new ChromeDriver(chromeservice, chromeop); } catch (Exception ex) { data.Log(new LogEntry(ex.ToString(), Colors.White)); return; } break; case BrowserType.Firefox: try { FirefoxOptions fireop = new FirefoxOptions(); FirefoxDriverService fireservice = FirefoxDriverService.CreateDefaultService(); FirefoxProfile fireprofile = new FirefoxProfile(); fireservice.SuppressInitialDiagnosticInformation = true; fireservice.HideCommandPromptWindow = true; fireop.AddArgument("--log-level=3"); fireop.BrowserExecutableLocation = data.GlobalSettings.Selenium.FirefoxBinaryLocation; if (data.GlobalSettings.Selenium.Headless || data.ConfigSettings.ForceHeadless) { fireop.AddArgument("--headless"); } if (data.ConfigSettings.DisableNotifications) { fireprofile.SetPreference("dom.webnotifications.enabled", false); } if (data.ConfigSettings.CustomCMDArgs != string.Empty) { fireop.AddArgument(data.ConfigSettings.CustomCMDArgs); } if (data.ConfigSettings.RandomUA) { fireprofile.SetPreference("general.useragent.override", SpiceRUA.GetiPhoneUA()); } else if (data.ConfigSettings.CustomUserAgent != string.Empty) { fireprofile.SetPreference("general.useragent.override", data.ConfigSettings.CustomUserAgent); } if (data.UseProxies) { fireprofile.SetPreference("network.proxy.type", 1); if (data.Proxy.Type == Extreme.Net.ProxyType.Http) { fireprofile.SetPreference("network.proxy.http", data.Proxy.Host); fireprofile.SetPreference("network.proxy.http_port", int.Parse(data.Proxy.Port)); fireprofile.SetPreference("network.proxy.ssl", data.Proxy.Host); fireprofile.SetPreference("network.proxy.ssl_port", int.Parse(data.Proxy.Port)); } else { fireprofile.SetPreference("network.proxy.socks", data.Proxy.Host); fireprofile.SetPreference("network.proxy.socks_port", int.Parse(data.Proxy.Port)); if (data.Proxy.Type == Extreme.Net.ProxyType.Socks4) { fireprofile.SetPreference("network.proxy.socks_version", 4); } else if (data.Proxy.Type == Extreme.Net.ProxyType.Socks5) { fireprofile.SetPreference("network.proxy.socks_version", 5); } } } fireop.Profile = fireprofile; data.Driver = new FirefoxDriver(fireservice, fireop, new TimeSpan(0, 1, 0)); } catch (Exception ex) { data.Log(new LogEntry(ex.ToString(), Colors.White)); return; } break; } data.Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(data.GlobalSettings.Selenium.PageLoadTimeout); data.Log(new LogEntry("Opened!", Colors.White)); data.BrowserOpen = true; } else { try { UpdateSeleniumData(data); } catch { } } }
/// <inheritdoc /> public override void Process(BotData data) { base.Process(data); var localInputStrings = ReplaceValuesRecursive(inputString, data); var outputs = new List <string>(); for (int i = 0; i < localInputStrings.Count; i++) { var localInputString = localInputStrings[i]; var outputString = ""; switch (FunctionType) { case Function.Constant: outputString = localInputString; break; case Function.Base64Encode: outputString = localInputString.ToBase64(); break; case Function.Base64Decode: outputString = localInputString.FromBase64(); break; case Function.HTMLEntityEncode: outputString = WebUtility.HtmlEncode(localInputString); break; case Function.HTMLEntityDecode: outputString = WebUtility.HtmlDecode(localInputString); break; case Function.Hash: outputString = GetHash(localInputString, hashType, InputBase64).ToLower(); break; case Function.HMAC: outputString = Hmac(localInputString, hashType, ReplaceValues(hmacKey, data), InputBase64, KeyBase64, HmacBase64); break; case Function.Translate: outputString = localInputString; foreach (var entry in TranslationDictionary.OrderBy(e => e.Key.Length).Reverse()) { if (outputString.Contains(entry.Key)) { outputString = outputString.Replace(entry.Key, entry.Value); if (StopAfterFirstMatch) { break; } } } break; case Function.DateToUnixTime: outputString = localInputString.ToDateTime(dateFormat).ToUnixTimeSeconds().ToString(); break; case Function.Length: outputString = localInputString.Length.ToString(); break; case Function.ToLowercase: outputString = localInputString.ToLower(); break; case Function.ToUppercase: outputString = localInputString.ToUpper(); break; case Function.Replace: if (useRegex) { outputString = Regex.Replace(localInputString, ReplaceValues(replaceWhat, data), ReplaceValues(replaceWith, data)); } else { outputString = localInputString.Replace(ReplaceValues(replaceWhat, data), ReplaceValues(replaceWith, data)); } break; case Function.RegexMatch: outputString = Regex.Match(localInputString, ReplaceValues(regexMatch, data)).Value; break; case Function.Unescape: outputString = Regex.Unescape(localInputString); break; case Function.URLEncode: // The maximum allowed Uri size is 2083 characters, we use 2080 as a precaution outputString = string.Join("", SplitInChunks(localInputString, 2080).Select(s => Uri.EscapeDataString(s))); break; case Function.URLDecode: outputString = Uri.UnescapeDataString(localInputString); break; case Function.UnixTimeToDate: outputString = double.Parse(localInputString).ToDateTime().ToString(dateFormat); break; case Function.CurrentUnixTime: outputString = DateTime.UtcNow.ToUnixTimeSeconds().ToString(); break; case Function.UnixTimeToISO8601: outputString = double.Parse(localInputString).ToDateTime().ToISO8601(); break; case Function.RandomNum: var min = int.Parse(ReplaceValues(randomMin, data)); var max = int.Parse(ReplaceValues(randomMax, data)); var randomNumString = data.random.Next(min, max).ToString(); outputString = randomZeroPad ? randomNumString.PadLeft(max.ToString().Length, '0') : randomNumString; break; case Function.RandomString: outputString = localInputString; outputString = Regex.Replace(outputString, @"\?l", m => _lowercase[data.random.Next(_lowercase.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?u", m => _uppercase[data.random.Next(_uppercase.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?d", m => _digits[data.random.Next(_digits.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?s", m => _symbols[data.random.Next(_symbols.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?h", m => _hex[data.random.Next(_hex.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?a", m => _allChars[data.random.Next(_allChars.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?m", m => _udChars[data.random.Next(_udChars.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?n", m => _ldChars[data.random.Next(_ldChars.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?i", m => _ludChars[data.random.Next(_ludChars.Length)].ToString()); outputString = Regex.Replace(outputString, @"\?f", m => _upperlwr[data.random.Next(_upperlwr.Length)].ToString()); break; case Function.Ceil: outputString = Math.Ceiling(Decimal.Parse(localInputString, _style, _provider)).ToString(); break; case Function.Floor: outputString = Math.Floor(Decimal.Parse(localInputString, _style, _provider)).ToString(); break; case Function.Round: outputString = Math.Round(Decimal.Parse(localInputString, _style, _provider), 0, MidpointRounding.AwayFromZero).ToString(); break; case Function.Compute: outputString = new DataTable().Compute(localInputString.Replace(',', '.'), null).ToString(); break; case Function.CountOccurrences: outputString = CountStringOccurrences(localInputString, stringToFind).ToString(); break; case Function.ClearCookies: data.Cookies.Clear(); break; case Function.RSAEncrypt: outputString = Crypto.RSAEncrypt( localInputString, ReplaceValues(RsaN, data), ReplaceValues(RsaE, data), RsaOAEP ); break; /* * case Function.RSADecrypt: * outputString = Crypto.RSADecrypt( * localInputString, * ReplaceValues(RsaN, data), * ReplaceValues(RsaD, data), * RsaOAEP * ); * break; */ case Function.RSAPKCS1PAD2: outputString = Crypto.RSAPkcs1Pad2( localInputString, ReplaceValues(RsaN, data), ReplaceValues(RsaE, data) ); break; case Function.Delay: try { Thread.Sleep(int.Parse(localInputString)); } catch { } break; case Function.CharAt: outputString = localInputString.ToCharArray()[int.Parse(ReplaceValues(charIndex, data))].ToString(); break; case Function.Substring: outputString = localInputString.Substring(int.Parse(ReplaceValues(substringIndex, data)), int.Parse(ReplaceValues(substringLength, data))); break; case Function.ReverseString: char[] charArray = localInputString.ToCharArray(); Array.Reverse(charArray); outputString = new string(charArray); break; case Function.Trim: outputString = localInputString.Trim(); break; case Function.GetRandomUA: if (UserAgentSpecifyBrowser) { outputString = UserAgent.ForBrowser(UserAgentBrowser); } else { outputString = SpiceRUA.GetiPhoneUA(); } break; case Function.AESEncrypt: outputString = Crypto.AESEncrypt(localInputString, ReplaceValues(aesKey, data), ReplaceValues(aesIV, data), AesMode, AesPadding); break; case Function.AESDecrypt: outputString = Crypto.AESDecrypt(localInputString, ReplaceValues(aesKey, data), ReplaceValues(aesIV, data), AesMode, AesPadding); break; case Function.PBKDF2PKCS5: outputString = Crypto.PBKDF2PKCS5(localInputString, ReplaceValues(KdfSalt, data), KdfSaltSize, KdfIterations, KdfKeySize, KdfAlgorithm); break; } data.Log(new LogEntry(string.Format("Executed function {0} on input {1} with outcome {2}", functionType, localInputString, outputString), Colors.GreenYellow)); // Add to the outputs outputs.Add(outputString); } var isList = outputs.Count > 1 || InputString.Contains("[*]") || InputString.Contains("(*)") || InputString.Contains("{*}"); InsertVariable(data, isCapture, isList, outputs, variableName, "", "", false, true); }