private void InitializeVariatons(IEnumerable <string> variations) { var regexPattern = @"^\[" + // Start @"(?<min>([\d]*))" + // MinVariations @"(?<separator1>\-)" + // Separator @"(?<max>([\d]*))" + // MaxVariations @"(?<separator2>\-)" + // Separator @"(?<generateOption>([0-1]))" + // GenerateOption @"\]$"; // End var variationsGroups = variations.Where(c => c.StartsWith("{") && c.EndsWith("}")); var simpleVariations = variations.Where(c => !(c.StartsWith("{") && c.EndsWith("}")) && !(c.StartsWith("[") && c.EndsWith("]"))); if (variationsGroups.Any()) { var variation = new List <string>(); Match regex; var min = 0; var max = 0; var generateOption = GenerateOption.WithoutRepetition; Variation variationModel; foreach (var variationGroup in variationsGroups) { variation = variationGroup.Trim(new[] { '{', '}' }).SplitBy(new[] { ';' }, '\\').ToList(); regex = Regex.Match(variation.Last(), regexPattern); if (variation.Any() && regex.Success) { min = Convert.ToInt32(regex.Groups["min"].ToString()); max = Convert.ToInt32(regex.Groups["max"].ToString()); generateOption = (GenerateOption)Convert.ToInt32(regex.Groups["generateOption"].ToString()); if (min > 0 && max > 0 && min <= max) { variation.RemoveAt(variation.Count - 1); variationModel = new Variation { MinVariations = min, MaxVariations = max, GenerateOption = generateOption, }; if (generateOption == GenerateOption.WithoutRepetition) { variationModel.Variations = variation; } else { variationModel.Variations = variation.ToHashSet(); } VariationsGroups.Add(variationModel); } } } } var simpleVariationsWithSubstring = variations.Where(c => c.StartsWith("[") && c.EndsWith("]")).Select(c => c.Trim(new[] { '[', ']' })); var allSimpleVariationsWithSubstring = new HashSet <string>(); foreach (var simpleVariation in simpleVariationsWithSubstring) { for (int i = 0; i < simpleVariation.Length; i++) { for (int j = i; j < simpleVariation.Length; j++) { allSimpleVariationsWithSubstring.Add(simpleVariation.Substring(i, j - i + 1)); } } } if (VariationsGroups.Any() || allSimpleVariationsWithSubstring.Any() || VariationModel.GenerateOption == GenerateOption.WithRepetition) { VariationModel.Variations = simpleVariations.Concat(allSimpleVariationsWithSubstring).ToHashSet(); } else { VariationModel.Variations = simpleVariations.ToList(); } }
private Variation GenerateAllWordsVariations() { var variationModel = new Variation() { MaxVariations = VariationModel.MaxVariations, MinVariations = VariationModel.MinVariations, GenerateOption = VariationModel.GenerateOption, }; if (VariationsGroups.Any()) { variationModel.Variations = new HashSet <string>(VariationModel.Variations); Sender.GenericMessageBoxDuringBruteForce("Bruteforce info", $"Found {VariationsGroups.Count} groups to generate variations!"); var forceBreakPreventOutMemory = false; Variations <string> variations; var lastWordGenerated = string.Empty; foreach (var wordVariation in VariationsGroups) { for (int variationsCount = wordVariation.MinVariations; variationsCount <= wordVariation.MaxVariations; variationsCount++) { variations = new Variations <string>(wordVariation.Variations, variationsCount, wordVariation.GenerateOption); foreach (var variation in variations) { if (GC.GetTotalMemory(false) >= 1_500_000_000) { lastWordGenerated = string.Join("", variation); variationModel.Variations.Add(lastWordGenerated); forceBreakPreventOutMemory = true; break; } variationModel.Variations.Add(string.Join("", variation)); } if (forceBreakPreventOutMemory) { break; } } if (forceBreakPreventOutMemory) { break; } } if (forceBreakPreventOutMemory) { Sender.GenericMessageBoxDuringBruteForce("Bruteforce info", $"Not all variations were generated. Generations stopped to prevent out of memory exception." + $"{Environment.NewLine}Hashes identified: {Hashes.Count}" + $"{Environment.NewLine}Last word generated: {lastWordGenerated}" + $"{Environment.NewLine}Total of strings to choose from: {variationModel.Variations.Count}"); } else { Sender.GenericMessageBoxDuringBruteForce("Bruteforce info", $"Generated all variations from groups!" + $"{Environment.NewLine}Hashes identified: {Hashes.Count}" + $"{Environment.NewLine}Total of strings to choose from: {variationModel.Variations.Count}"); } } else { variationModel.Variations = new List <string>(VariationModel.Variations); Sender.GenericMessageBoxDuringBruteForce("Bruteforce info", $"No groups found to generate variations!" + $"{Environment.NewLine}Hashes identified: {Hashes.Count}" + $"{Environment.NewLine}Total of strings to choose from: {variationModel.Variations.Count}"); } return(variationModel); }