Exemplo n.º 1
0
        static void ValidateModel(MarkovChain model, Dictionary <string, double> passwords, int guesses, bool hashed) //passwords here is not used...
        {
            Console.Write("Validating on {0} guesses... ", guesses);
            PasswordCrackingEvaluator eval = new PasswordCrackingEvaluator(guesses, hashed);
            var results = eval.Validate(model);

            Console.WriteLine("Accounts: {0} Uniques: {1}", results._fitness, results._alternativeFitness);
        }
Exemplo n.º 2
0
        // Runs a comparison of the two model types.
        static void RunAllMarkovModelPairs(object special)
        {
            const string EXPERIMENT_OFFSET = @"..\..\..\experiments\intermediate\";

            string[] models = new string[]
            {
                "first-order",
                "8-layer"
            };

            // For every dataset, create a model
            for (int i = 0; i < _datasetFilenames.Length; i++)
            {
                if (i != (int)special)
                {
                    continue;
                }
                for (int m = 0; m < 2; m++)
                {
                    int    outputs;
                    string seedFile = EXPERIMENT_OFFSET + "seed-" + models[m] + "-" + _datasetFilenames[i].Name + ".xml";
                    Console.Write("Building {0} Markov model...", models[m]);
                    if (m == 0)
                    {
                        outputs = MarkovFilterCreator.GenerateFirstOrderMarkovFilter(seedFile, _passwords[i]);
                    }
                    else
                    {
                        outputs = MarkovFilterCreator.GenerateLayeredMarkovFilter(seedFile, _passwords[i], 8);
                    }

                    Console.WriteLine("Done! Outputs: {0}", outputs);
                    _experiment.OutputCount = outputs;

                    Console.WriteLine("Loading seed...");
                    var seed = _experiment.LoadPopulation(XmlReader.Create(seedFile))[0];

                    Console.WriteLine("Creating model...");
                    var model = _experiment.CreateGenomeDecoder().Decode(seed);

                    // For every dataset, test the model
                    for (int j = 0; j < _datasetFilenames.Length; j++)
                    {
                        Console.Write("Validating {0} {1} model on {2} with {3} guesses... ", models[m], _datasetFilenames[i].Name, _datasetFilenames[j].Name, VALIDATION_GUESSES);
                        PasswordCrackingEvaluator eval = new PasswordCrackingEvaluator(VALIDATION_GUESSES, false);
                        var results = eval.Validate(model, _passwords[j], EXPERIMENT_OFFSET + models[m] + "-" + _datasetFilenames[i].Name + "-" + _datasetFilenames[j].Name + ".csv", 10000);
                        // Console.WriteLine("Accounts: {0} Uniques: {1}", results._fitness, results._alternativeFitness);
                        Console.WriteLine("Total Score: {0} Uniques: {1}", results._fitness, results._alternativeFitness);

                        lock (_writerLock)
                            using (TextWriter writer = new StreamWriter(@"..\..\..\experiments\summary_results.csv", true))
                                writer.WriteLine("{0},{1},{2},{3},{4}%,{5}%",
                                                 _datasetFilenames[i].Name,
                                                 _datasetFilenames[j].Name,
                                                 results._fitness,
                                                 results._alternativeFitness,
                                                 results._fitness / (double)_passwords[j].Sum(kv => kv.Value) * 100,
                                                 results._alternativeFitness / (double)_passwords[j].Count * 100);
                    }
                }
            }
        }