Generar diccionario (vbs)

Iniciado por Novlucker, 13 Noviembre 2008, 14:22 PM

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

Novlucker

Buenas....

Dejo un pequeño script para generar diccionarios de palabras (creado en un rato de ocio), es decir que, en base a un grupo de caracteres y una longitud seleccionada por el usuario, genera un listado de palabras con todas las posibles combinaciones de los caracteres.
Se puede portar facilmente a otros lenguajes como ser perl, python, VB (casi sin cambios), C/C++, etc

La idea de este es que sirva como ejemplo para aquellos que inician con vbs, el code no es para nada difícil, solamente necesita ser leído detenidamente  :P

Algunas de las funciones utilizadas que pueden resultar desconocidas son:
Lbound: Indica el número de índice más pequeño en un array
Ubound: Indica el número de índice más grande en un array
Cint: convierte a Integer el valor ingresado
Len: indica el largo de una palabra

Código
Código (vb) [Seleccionar]
Set objfso = createobject("scripting.filesystemobject")
Set ToFile = objfso.createtextfile("Dik.txt",True)

DicLis = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
Length = Cint(inputbox("Ingrese el numero de caracteres de las palabras","Dictionary",""))

DicU = Lbound(DicLis)
DicL = Ubound(DicLis)

Complete("")

Function Complete(strin)

For z = DicU to DicL
word = strin & DicLis(z)

If Len(word) = Length then
ToFile.writeline word
Else
Complete(word)
End If

Next

End Function

ToFile.close
Msgbox "Proceso Terminado"


Ejemplo:
Longitud: 4 caracteres
Tiempo: 8 segundos
Total de palabras: 456977
P IV 3.0, 1gb de ram

Para agregar más letras, números o símbolos, simplemente hay que modificar el array DicLis

Hay que tener cuidado al probarlo, se debería de elegir un número más bien pequeño como ser 3 o 4, ya que probando con el actual "diccionario" y con palabras de longitud 6, el archivo generado ocupaba 400 mb, son unas 309 millones de palabras y puede tardar bastante (tuve que recurrir a taskkill XD)

El script en si utiliza recursividad para hacer todo el trabajo, de ahí es que ocupe solamente algunas líneas  ;)

Eso es todo, saludos  ;)

P.D: si no lo terminas de entender, ya sabes donde mirar XD
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Enemy

xD cuando no.. lo voy a probar a ver que onda..  :D



SALUD.O.S

aaronduran2


Novlucker

Cita de: Bakura182 en 14 Noviembre 2008, 15:47 PM
xD cuando no.. lo voy a probar a ver que onda..  :D
Es vbs, quien más iba a ser sino yo?  :xD

@aaronduran2
Con conocimientos de VB no es muy difícil entenderlo :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

aaronduran2

Ya, pero muchas veces no se te ocurren cosas tan sencillas.

Saludos.

AxXioma

¿Qué utilidad tiene el programa, y, para qué sirve un diccionario de palabras? Creo haber leído que se utiliza frecuentemente para brute force, pero no sé, si me pueden dar alguna explicación...

Saludos.




.::Cuanto mas conocimiento adquieres, más te das cuenta del que hay a tu alrededor::.

aaronduran2

Pues para eso mismo, fuerza bruta. O para cualquier otra cosa parecida...

carlitos.java

¿Qué hace strin & DicLis(z)?

no hallé referencias a strin

aaronduran2

'string' es un argumento de la función Complete.

Novlucker

Cita de: aaronduran2 en 16 Noviembre 2008, 15:19 PM
Ya, pero muchas veces no se te ocurren cosas tan sencillas.
Si, puede que a veces la enrede un poco  :-X :xD

Cita de: carlitos.java en 16 Noviembre 2008, 17:15 PM
¿Qué hace strin & DicLis(z)?
no hallé referencias a strin

En este caso strin y DicLis son solo variables en la función, strin es la cadena que se pasa como parametro a la función, y DicLis(z) es simplemente el elemento z del array DicLis :P, es por eso que no hay referencias  :P
Por eso decía que hay que mirarlo detenidamente, para ver que es lo que hay en el primer for, que es lo que se pasa como parametro en la recursividad, y que es lo que hace el for en pasadas siguiente  :D

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein