diff --git a/OpenBullet/Globals.cs b/OpenBullet/Globals.cs index dc25e05..bb589f9 100644 --- a/OpenBullet/Globals.cs +++ b/OpenBullet/Globals.cs @@ -54,6 +54,7 @@ namespace OpenBullet public static OBSettingsViewModel obSettings; public static RLSettingsViewModel rlSettings; public static EnvironmentSettings environment; + public static Random random = new Random(); // Runners public static ObservableCollection Runners = new ObservableCollection(); diff --git a/OpenBullet/Pages/Main/Runner/Runner.xaml.cs b/OpenBullet/Pages/Main/Runner/Runner.xaml.cs index 61751a3..b5275f1 100644 --- a/OpenBullet/Pages/Main/Runner/Runner.xaml.cs +++ b/OpenBullet/Pages/Main/Runner/Runner.xaml.cs @@ -29,7 +29,7 @@ namespace OpenBullet /// public partial class Runner : Page { - public RunnerViewModel vm = new RunnerViewModel(Globals.environment, Globals.rlSettings); + public RunnerViewModel vm = new RunnerViewModel(Globals.environment, Globals.rlSettings, Globals.random); public SoundPlayer hitPlayer; public SoundPlayer reloadPlayer; diff --git a/OpenBullet/Pages/Main/Stacker.xaml.cs b/OpenBullet/Pages/Main/Stacker.xaml.cs index 6ded863..eaef6dc 100644 --- a/OpenBullet/Pages/Main/Stacker.xaml.cs +++ b/OpenBullet/Pages/Main/Stacker.xaml.cs @@ -341,7 +341,7 @@ namespace OpenBullet // Initialize BotData and Reset LS var cData = new CData(vm.TestData, Globals.environment.GetWordlistType(vm.TestDataType)); - vm.BotData = new BotData(Globals.rlSettings, vm.Config.Config.Settings, cData, proxy, vm.UseProxy); + vm.BotData = new BotData(Globals.rlSettings, vm.Config.Config.Settings, cData, proxy, vm.UseProxy, Globals.random); vm.LS.Reset(); // Ask for user input diff --git a/OpenBulletCLI/Program.cs b/OpenBulletCLI/Program.cs index ca5266f..94734d1 100644 --- a/OpenBulletCLI/Program.cs +++ b/OpenBulletCLI/Program.cs @@ -31,6 +31,7 @@ namespace OpenBulletCLI public static EnvironmentSettings Env { get; set; } public static RLSettingsViewModel RLSettings { get; set; } + private static Random random = new Random(); public static RunnerViewModel Runner { get; set; } public static bool Verbose { get; set; } = false; public static string ProxyFile { get; set; } @@ -103,7 +104,7 @@ namespace OpenBulletCLI RLSettings = IOManager.LoadSettings(settFile); // Initialize the Runner (and hook event handlers) - Runner = new RunnerViewModel(Env, RLSettings); + Runner = new RunnerViewModel(Env, RLSettings, random); Runner.AskCustomInputs += AskCustomInputs; Runner.DispatchAction += DispatchAction; Runner.FoundHit += FoundHit; diff --git a/RuriLib/Blocks/BlockFunction.cs b/RuriLib/Blocks/BlockFunction.cs index 183511a..f5b4c06 100644 --- a/RuriLib/Blocks/BlockFunction.cs +++ b/RuriLib/Blocks/BlockFunction.cs @@ -617,7 +617,7 @@ namespace RuriLib break; case Function.RandomNum: - outputString = (data.rand.Next(randomMin, randomMax)).ToString(); + outputString = (data.Random.Next(randomMin, randomMax)).ToString(); break; case Function.RandomString: @@ -634,21 +634,21 @@ namespace RuriLib outputString = localInputString; while (reserved.Any(r => outputString.Contains(r))){ if (outputString.Contains("?l")) - outputString = ReplaceFirst(outputString, "?l", lowercase[data.rand.Next(0, lowercase.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?l", lowercase[data.Random.Next(0, lowercase.Length)].ToString()); else if (outputString.Contains("?u")) - outputString = ReplaceFirst(outputString, "?u", uppercase[data.rand.Next(0, uppercase.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?u", uppercase[data.Random.Next(0, uppercase.Length)].ToString()); else if (outputString.Contains("?d")) - outputString = ReplaceFirst(outputString, "?d", digits[data.rand.Next(0, digits.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?d", digits[data.Random.Next(0, digits.Length)].ToString()); else if (outputString.Contains("?s")) - outputString = ReplaceFirst(outputString, "?s", symbols[data.rand.Next(0, symbols.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?s", symbols[data.Random.Next(0, symbols.Length)].ToString()); else if (outputString.Contains("?h")) - outputString = ReplaceFirst(outputString, "?h", hex[data.rand.Next(0, hex.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?h", hex[data.Random.Next(0, hex.Length)].ToString()); else if (outputString.Contains("?a")) - outputString = ReplaceFirst(outputString, "?a", allchars[data.rand.Next(0, allchars.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?a", allchars[data.Random.Next(0, allchars.Length)].ToString()); else if (outputString.Contains("?m")) - outputString = ReplaceFirst(outputString, "?m", udchars[data.rand.Next(0, udchars.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?m", udchars[data.Random.Next(0, udchars.Length)].ToString()); else if (outputString.Contains("?i")) - outputString = ReplaceFirst(outputString, "?i", ludchars[data.rand.Next(0, ludchars.Length)].ToString()); + outputString = ReplaceFirst(outputString, "?i", ludchars[data.Random.Next(0, ludchars.Length)].ToString()); } break; @@ -711,7 +711,7 @@ namespace RuriLib break; case Function.GetRandomUA: - outputString = RandomUserAgent(data.rand); + outputString = RandomUserAgent(data.Random); break; case Function.AESEncrypt: diff --git a/RuriLib/Blocks/BlockRequest.cs b/RuriLib/Blocks/BlockRequest.cs index f9c5241..248cd7a 100644 --- a/RuriLib/Blocks/BlockRequest.cs +++ b/RuriLib/Blocks/BlockRequest.cs @@ -408,7 +408,7 @@ namespace RuriLib if (encodeContent) { // Very dirty but it works - var nonce = data.rand.Next(1000000, 9999999); + var nonce = data.Random.Next(1000000, 9999999); pData = pData.Replace("&", $"{nonce}&{nonce}").Replace("=", $"{nonce}={nonce}"); pData = System.Uri.EscapeDataString(pData).Replace($"{nonce}%26{nonce}", "&").Replace($"{nonce}%3D{nonce}", "="); } diff --git a/RuriLib/Blocks/BlockUtility.cs b/RuriLib/Blocks/BlockUtility.cs index dd66693..ca774ec 100644 --- a/RuriLib/Blocks/BlockUtility.cs +++ b/RuriLib/Blocks/BlockUtility.cs @@ -497,7 +497,7 @@ namespace RuriLib break; case ListAction.Random: - data.Variables.Set(new CVar(variableName, list[data.rand.Next(list.Count)], isCapture)); + data.Variables.Set(new CVar(variableName, list[data.Random.Next(list.Count)], isCapture)); break; default: diff --git a/RuriLib/Blocks/SBlockBrowserAction.cs b/RuriLib/Blocks/SBlockBrowserAction.cs index ac8ae83..dfcca49 100644 --- a/RuriLib/Blocks/SBlockBrowserAction.cs +++ b/RuriLib/Blocks/SBlockBrowserAction.cs @@ -321,7 +321,7 @@ namespace RuriLib .Select(ext => Directory.GetCurrentDirectory() + "\\ChromeExtensions\\" + ext)); if (data.ConfigSettings.DisableNotifications) chromeop.AddArgument("--disable-notifications"); if (data.ConfigSettings.CustomCMDArgs != "") chromeop.AddArgument(data.ConfigSettings.CustomCMDArgs); - if (data.ConfigSettings.RandomUA) chromeop.AddArgument("--user-agent=" + BlockFunction.RandomUserAgent(data.rand)); + if (data.ConfigSettings.RandomUA) chromeop.AddArgument("--user-agent=" + BlockFunction.RandomUserAgent(data.Random)); else if (data.ConfigSettings.CustomUserAgent != "") chromeop.AddArgument("--user-agent=" + data.ConfigSettings.CustomUserAgent); if (data.UseProxies) chromeop.AddArgument("--proxy-server=" + data.Proxy.Type.ToString().ToLower() + "://" + data.Proxy.Proxy); @@ -346,7 +346,7 @@ namespace RuriLib 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 != "") fireop.AddArgument(data.ConfigSettings.CustomCMDArgs); - if (data.ConfigSettings.RandomUA) fireprofile.SetPreference("general.useragent.override", BlockFunction.RandomUserAgent(data.rand)); + if (data.ConfigSettings.RandomUA) fireprofile.SetPreference("general.useragent.override", BlockFunction.RandomUserAgent(data.Random)); else if (data.ConfigSettings.CustomUserAgent != "") fireprofile.SetPreference("general.useragent.override", data.ConfigSettings.CustomUserAgent); if (data.UseProxies) diff --git a/RuriLib/Models/BotData.cs b/RuriLib/Models/BotData.cs index b7b12de..ab25bdb 100644 --- a/RuriLib/Models/BotData.cs +++ b/RuriLib/Models/BotData.cs @@ -43,7 +43,7 @@ namespace RuriLib public class BotData { /// A random number generator that methods can refer to, in order to avoid the generation of the same random number if executed in rapid succession. - public Random rand = new Random(); + public Random Random = new Random(); /// The Status of the Bot. public BotStatus Status { get; set; } @@ -160,13 +160,15 @@ namespace RuriLib /// The wrapped data line to check /// The proxy to use (set to null if none) /// Whether to use the proxy for requests + /// A reference to the global random generator /// The number of the bot that is creating this object /// Whether this object is created from a Debugger or from a Runner - public BotData(RLSettingsViewModel globalSettings, ConfigSettings configSettings, CData data, CProxy proxy, bool useProxies, int botNumber = 0, bool isDebug = true) + public BotData(RLSettingsViewModel globalSettings, ConfigSettings configSettings, CData data, CProxy proxy, bool useProxies, Random random, int botNumber = 0, bool isDebug = true) { Data = data; Proxy = proxy; UseProxies = useProxies; + Random = random; Status = BotStatus.NONE; BotNumber = BotNumber; GlobalSettings = globalSettings; diff --git a/RuriLib/Runner/RunnerViewModel.cs b/RuriLib/Runner/RunnerViewModel.cs index ca15ce1..516777f 100644 --- a/RuriLib/Runner/RunnerViewModel.cs +++ b/RuriLib/Runner/RunnerViewModel.cs @@ -40,10 +40,12 @@ namespace RuriLib.Runner /// /// The environment settings /// The RuriLib settings - public RunnerViewModel(EnvironmentSettings environment, RLSettingsViewModel settings) + /// A reference to the global random generator + public RunnerViewModel(EnvironmentSettings environment, RLSettingsViewModel settings, Random random) { Env = environment; Settings = settings; + Random = random; OnPropertyChanged("Busy"); OnPropertyChanged("ControlsEnabled"); } @@ -52,6 +54,7 @@ namespace RuriLib.Runner #region Settings private RLSettingsViewModel Settings { get; set; } private EnvironmentSettings Env { get; set; } + private Random Random { get; set; } #endregion #region Workers @@ -666,7 +669,7 @@ namespace RuriLib.Runner } // Initialize the Bot Data - BotData botData = new BotData(Settings, Config.Settings, currentData, currentProxy, UseProxies, bot.Id, false); + BotData botData = new BotData(Settings, Config.Settings, currentData, currentProxy, UseProxies, Random, bot.Id, false); botData.Driver = bot.Driver; botData.BrowserOpen = bot.IsDriverOpen; List BotLog = new List();