[TUTORIAL] Generador de diccionarios.

Iniciado por 79137913, 13 Abril 2012, 15:57 PM

0 Miembros y 1 Visitante están viendo este tema.

79137913

HOLA!!!

Este tutorial lo arme para explicar como hacer un generador de diccionarios como mi BruteForceDicctionaryCreator o BFDC7913.

Empecemos...

Suponiendo que tenes esta cadena de posibles caracteres:
Código:

"ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"

Es la mas comun y tiene 26+26+10 osea 62 caracteres correcto?
Eso yo recomendaria guardarlo en un Vector (array).

Para eso yo uso la funcion:
Código

Código (vb) [Seleccionar]
Private Function CharSplit7913(expression As String) As String()
   Dim lExp     As Long
   Dim ExpB()   As Byte
   Dim AuxArr() As String
   ExpB = expression
   lExp = UBound(ExpB)
   ReDim AuxArr(lExp)
   For X = 0 To lExp Step 2
       AuxArr(X / 2) = ChrW(ExpB(X))
   Next
   ReDim Preserve AuxArr(Int(lExp / 2))
   CharSplit7913 = AuxArr
End Function



El vector resultante suponete que lo llamamos Chars() queda compuesto asi:
Chars(0 to 61) : "A","B","C",...,"7","8","9".
Espero que hasta ahi me sigas.

En este punto solo tenemos en un Vector (array) guardados todos los caracteres que vamos a usar.

Ahora, solicitamos la longitud en este caso la guardaremos en la variable Tam (de tamaño)

Ahora vamos a crear un vector donde guardaremos la cadena actual, su index maximo sera tam-1.

Suponiendo que tam = 3

hacemos asi:

Código

Dim Palabra() as integer
'dentro del proceso de creacion de diccionario
Redim Palabra(Tam-1)


Aca lo que hicimos es hacer que Palabra quedara (0 to 2) inicializandose asi:
Palabra(0 to 2): 0,0,0

aca empieza el proceso de creacion de strings...

Código

Código (vb) [Seleccionar]
Dim AuxPalabra As String
Do
   AuxPalabra = 0
   For X = 0 To tam - 1
       AuxPalabra = AuxPalabra & chars(palabra(X)) ' aca concatenamos todas las letras
   Next
   Print AuxPalabra ' aca imprimo la palabra resultante.
   palabra(0) = palabra(0) + 1 ' aca muevo un caracter
   For X = 0 To UBound(palabra) - 1
       If palabra(X) = UBound(chars) + 1 Then
           'aca verificamos que ninguna casilla quede con un numero mayor a los
           'caracteres que hay y si pasa eso aumenta la siguiente casilla
           'y la actual se vuelve a 0
           palabra(X + 1) = palabra(X + 1) + 1
           palabra(X) = 0
       End If
       'esto de abajo es para ver cuando se termino el proceso
       'osea cuando se han hecho todas las combinaciones.
       If palabra(UBound(palabra)) = UBound(chars) + 1 Then Exit Do
   Next
Loop


Entonces como te quedaria todo el codigo completo...

Código

Código (vb) [Seleccionar]
Dim Diccionario As String
Dim chars() As String
Dim Tam As Integer
Dim Palabra() As Integer
Private Sub Form_Load()
'aca en diccionario pone lo que quieras
Diccionario = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"
chars = CharSplit7913(Diccionario)
Tam = InputBox("inserte cantidad de caracteres")
ReDim Palabra(Tam - 1)
End Sub


Private Sub InicioDeProceso()
Dim AuxPalabra As String
   Do
       AuxPalabra = 0
       For X = 0 To Tam - 1
           AuxPalabra = AuxPalabra & chars(Palabra(X)) ' aca concatenamos todas las letras
       Next
       Debug.Print AuxPalabra ' aca imprimo la palabra resultante.
       Palabra(0) = Palabra(0) + 1 ' aca muevo un caracter
       For X = 0 To UBound(Palabra) - 1
           If Palabra(X) = UBound(chars) + 1 Then
               'aca verificamos que ninguna casilla quede con un numero mayor a los
               'caracteres que hay y si pasa eso aumenta la siguiente casilla
               'y la actual se vuelve a 0
               Palabra(X + 1) = Palabra(X + 1) + 1
               Palabra(X) = 0
           End If
           'esto de abajo es para ver cuando se termino el proceso
           'osea cuando se han hecho todas las combinaciones.
           If Palabra(UBound(Palabra)) = UBound(chars) + 1 Then Exit Do
       Next
   Loop
   MsgBox "Proceso Terminado"
End Sub

Private Function CharSplit7913(expression As String) As String()
   Dim lExp     As Long
   Dim ExpB()   As Byte
   Dim AuxArr() As String
       ExpB = expression
       lExp = UBound(ExpB)
       ReDim AuxArr(lExp)
       For X = 0 To lExp Step 2
           AuxArr(X / 2) = ChrW(ExpB(X))
       Next
       ReDim Preserve AuxArr(Int(lExp / 2))
       CharSplit7913 = AuxArr
End Function


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*