Как я могу разобраться с забытым паролем, чтобы попытаться взломать его - PullRequest
0 голосов
/ 09 февраля 2019

Итак, я хотел настроить мой маршрутизатор, он дерьмовый безымянный, поэтому нет возможности подключиться к консольному порту.Единственный способ будет через браузер.Нет, я уже настроил пароль и даже записал его.Оказывается, я, вероятно, написал это неправильно, так что да ...

Я попробовал каждую комбинацию и все еще безуспешно.Поскольку я не хочу переустанавливать маршрутизатор по причинам, за исключением случаев, когда мне это действительно нужно, я решил написать небольшую программу, чтобы попробовать все возможности.Конечно, я не могу быть обеспокоен фактическим перебором, так как выбранный мной пароль был довольно надежным.Поэтому вместо этого я решил заставить эту программу написать словарь на основе пароля, который я записал.Это означало бы, заменить «a» на «A» или «@» и т. Д.

Я написал небольшой концептуальный код, но действительно застрял в части рекурсии, где пароли фактически сохраняются вfile.

Поэтому я спрашиваю, может ли кто-нибудь поделиться каким-нибудь алгоритмом fo, который бы облегчил это.

Мой подход заключается в следующем:

-Создать список массивов символов-для каждого символа ввода создайте массив с несколькими возможностями для этого символа.(скажем, символ «a», создайте массив символов со всеми упомянутыми выше возможностями, сохраните этот массив символов в списке, переберите все возможности и сохраните каждый из них в текстовом файле

-useHydra или похожий на грубую силу маршрутизатор.

был бы очень признателен за помощь, позаботьтесь, ребята

позаботьтесь, ребята

using System;
using System.Collections.Generic;
using System.Collections;
using System.IO;

    namespace strGen
{
    class Program
    {
        static List<char[]> ls { get; set; }
        static string Path { get; set; }
        static string input { get; set; }
        static char[] inputChars { get; set; }
        static void Main(string[] args)
        {
            Console.Write("Enter tip: ");
            input = Console.ReadLine();
            Console.Write("Enter path: ");
            Path = Console.ReadLine();

            inputChars = input.ToCharArray();
            MakeList(inputChars);


        }

        /// <summary>
        /// makes list of all possible characters, for every character in a character array
        /// </summary>
        /// <param name="inputChars"></param>
        static void MakeList(char[] inputChars)
        {

            ls = new List<char[]>();

            foreach (char c in inputChars)
            {
                char cU;
                char cL;
                char[] tmp;
                if (char.IsLetter(c))
                {
                    if (c == 'a' | c == 'A')
                    {
                        tmp = new char[3];
                        if (char.IsUpper(c))
                        {
                            cL = char.ToLower(c);
                            cU = c;
                        }
                        else
                        {
                            cL = c;
                            cU = char.ToUpper(c);
                        }
                        tmp[0] = cL;
                        tmp[1] = cU;
                        tmp[2] = '@';

                    }
                    else if (c == 's' | c == 'S')
                    {
                        tmp = new char[3];
                        if (char.IsUpper(c))
                        {
                            cL = char.ToLower(c);
                            cU = c;
                        }
                        else
                        {
                            cL = c;
                            cU = char.ToUpper(c);
                        }
                        tmp[0] = cL;
                        tmp[1] = cU;
                        tmp[2] = '5';

                    }

                    else
                    {
                        tmp = new char[2];


                        if (char.IsUpper(c))
                        {
                            cL = char.ToLower(c);
                            cU = c;
                        }
                        else
                        {
                            cL = c;
                            cU = char.ToUpper(c);
                        }
                        tmp[0] = cL;
                        tmp[1] = cU;
                    }

                }
                else if (char.IsDigit(c))
                {
                    if (c == '1')
                    {
                        tmp = new char[2];
                        tmp[0] = c;
                        tmp[1] = '!';
                    }
                    else
                    {
                        tmp = new char[1];
                        tmp[0] = c;

                    }
                }
                else if (c == '!')
                {
                    tmp = new char[2];
                    tmp[0] = c;
                    tmp[1] = '1';
                }
                else
                {
                    tmp = new char[1];
                    tmp[0] = c;
                }

                ls.Add(tmp);
            }
        }
        static void Append(string str)
        {
            File.AppendAllText(Path, str + "\\r \\n");          
        }

        static void Calc(string str, int index)
        {
            for(int i = 0; i<ls[index].Length;i++)
            {
                if (index < ls.Count)
                {

                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 09 февраля 2019

Программа довольно проста

static void Main(string[] args)
{
    //Console.Write("Enter tip: ");
    //string input = Console.ReadLine();
    //Console.Write("Enter path: ");
    //string path = Console.ReadLine();

    string input = "A52";
    string path = "tst.txt";

    CalcAndSave(input, path);
}

static void CalcAndSave(string str, string path)
{
    List<char[]> ls = MakeList(str);
    char[] state = new char[ls.Count];

    using (var writer = new StreamWriter(path))
    {
        CalcAndSave(ls, 0, state, writer);
    }
}

static void CalcAndSave(List<char[]> ls, int level, char[] state, StreamWriter writer)
{
    if (level >= ls.Count)
    {
        foreach (char c in state)
        {
            writer.Write(c);
        }
        writer.Write("\r\n");
        return;
    }

    foreach (char c in ls[level])
    {
        state[level] = c;
        CalcAndSave(ls, level + 1, state, writer);
    }
}

/// <summary>
/// makes list of all possible characters, for every character in a character array
/// </summary>
/// <param name="inputChars"></param>
static List<char[]> MakeList(string input)
{
    var same = new List<string> { "a@&", "s5", "1!" };

    var ls = new List<char[]>();

    foreach (char c in input)
    {
        HashSet<char> chars = new HashSet<char>
        {
            char.ToLower(c),
            char.ToUpper(c)
        };

        foreach (char cs in same
            .Where(s => s.Contains(c, StringComparison.CurrentCultureIgnoreCase))
            .SelectMany(s => s))
        {
            chars.Add(char.ToLower(cs));
            chars.Add(char.ToUpper(cs));
        }

        ls.Add(chars.ToArray());
    }

    return ls;     
}

Пока вы можете использовать статические переменные, я их удалил.Это облегчает выполнение программы, поскольку вы разделяете части.Есть некоторые вещи, на которые следует обратить внимание

  • Сама строка IEnumerable, поэтому вы можете проходить по ней
  • , часто бывает удобно иметь две функции для рекурсии.Один выполняет рекурсию, а другой предоставляет простой интерфейс и запускает рекурсивную
  • рекурсивную функцию, состоящую из двух частей.Завершающее состояние и рекурсивный шаг.Уровень увеличивается на каждом шагу.

Это, вероятно, то, что вам нужно.Но я бы хотел добавить кое-что еще.То, что вы пытаетесь сделать, это итерация по n-мерному пространству.Самым простым вариантом является использование какой-либо формы векторного итератора - массива скалярных итераторов.Рекурсия делает это, она использует стек со скалярным итератором на каждом уровне.Он создает скалярные итераторы при переходе на более глубокие уровни и уничтожает готовые итераторы при переходе вверх.Но это не единственный вариант.В конце концов, каждая рекурсия может быть преобразована в программу без рекурсии.Что вам действительно нужно, так это некоторая память, которая может содержать n итераторов.Тогда вы просто продвигаете эту память на каждом шагу.

...