コード例 #1
0
ファイル: Unhash.cs プロジェクト: Felipe379/NFSRaider
        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();
            }
        }
コード例 #2
0
ファイル: Unhash.cs プロジェクト: Felipe379/NFSRaider
        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);
        }