elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (Batch) Es Posible hacer password char en batch? (Pregunta)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: (Batch) Es Posible hacer password char en batch? (Pregunta)  (Leído 21,911 veces)
Nucleorion

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #20 en: 19 Mayo 2014, 18:45 pm »

Aunque han pasado años considero que es mejor dejar aqui mi duda y mi contribución.

Los codigos que usaban vbs no me han funcionado. Supongo que tendria que modificar la ruta donde se aloja el bat o algo, ya que me decia que faltaba el archivo .vbs

Como me funcionó el codigo escrito exclusivamente en batch, posteado por maty_16_94 decidí usarlo. Tuve que hacer algunos cambios ya que necesitaba que si se metia la clave se cargase un menu y si no, no. Tambien me pareció oportuno que si se cometia un error al introducir la clave te diese mas oportunidades.

Aunque el codigo funciona hay algo que no entiendo y no me conformo con que funcione, me gustaria entenderlo, jejeje. Y tambien, si he cometido alguna barbaridad, saberlo y corregirla :P

¿Porque se ejecuta la etiqueta reinicio antes de cometer ningun fallo? En un principio iba a duplicar esas lineas pero al meter un pause en la etiqueta reinicio vi que se ejecuta nada mas arrancar. Luego hice el contador de errores y ya puedo mostrar el texto de clave incorrecta, pero me ha quedado esa duda.

Es la primera vez que uso call, supongo que por ahi se me escapa algo.

Tambien me gustaria saber que hace el archivo reply.exe


Código
  1. @echo off
  2. Title Usando Asteriscos en una Clave
  3. ::Escrito por Carlos inicialmente
  4.  
  5. set /a intentos=3
  6. set MensajeIntoduzcaClave="Introduzca la clave de acceso:"
  7.  
  8. :reinicio
  9. if not exist "reply.exe" (call:reply)
  10. set PWL=
  11. set letra=
  12. set/a contador=0
  13. set /a TAM=10
  14. set PASSWORD=1234
  15. call:prompt
  16.  
  17. :inicio
  18. reply.exe
  19. set letra=%errorlevel%
  20. if [%letra%]==[13] (goto:fin) else (call:ascii %letra%)
  21. goto:eof
  22.  
  23. :fin
  24. rem set/p pass=Password <nul
  25. if [%PASSWORD%]==[%PWL%] (
  26. goto:correcta
  27. ) else (
  28. goto:incorrecta
  29. )
  30. goto:eof
  31.  
  32. :correcta
  33. cls
  34. goto Menu
  35. goto:eof
  36.  
  37. :incorrecta
  38. echo Clave incorrecta.
  39. if /i 1 leq %intentos% (
  40. set /a intentos=%intentos%-1
  41. echo Numero de intentos restantes=%intentos%
  42. echo Pulsa una tecla para volver a probar.
  43. pause>nul
  44. goto reinicio
  45. ) else (
  46. echo Se ha superado el numero de intentos.
  47. pause>nul
  48. )
  49.  
  50. :ascii
  51. if %1==8 (call:borrar)
  52. if %contador% GEQ %TAM% (goto:inicio)
  53. if %1==48 (set PWL=%PWL%0&goto:contador)
  54. if %1==49 (set PWL=%PWL%1&goto:contador)
  55. if %1==50 (set PWL=%PWL%2&goto:contador)
  56. if %1==51 (set PWL=%PWL%3&goto:contador)
  57. if %1==52 (set PWL=%PWL%4&goto:contador)
  58. if %1==53 (set PWL=%PWL%5&goto:contador)
  59. if %1==54 (set PWL=%PWL%6&goto:contador)
  60. if %1==55 (set PWL=%PWL%7&goto:contador)
  61. if %1==56 (set PWL=%PWL%8&goto:contador)
  62. if %1==57 (set PWL=%PWL%9&goto:contador)
  63. if %1==65 (set PWL=%PWL%A&goto:contador)
  64. if %1==66 (set PWL=%PWL%B&goto:contador)
  65. if %1==67 (set PWL=%PWL%C&goto:contador)
  66. if %1==68 (set PWL=%PWL%D&goto:contador)
  67. if %1==69 (set PWL=%PWL%E&goto:contador)
  68. if %1==70 (set PWL=%PWL%F&goto:contador)
  69. if %1==71 (set PWL=%PWL%G&goto:contador)
  70. if %1==72 (set PWL=%PWL%H&goto:contador)
  71. if %1==73 (set PWL=%PWL%I&goto:contador)
  72. if %1==74 (set PWL=%PWL%J&goto:contador)
  73. if %1==75 (set PWL=%PWL%K&goto:contador)
  74. if %1==76 (set PWL=%PWL%L&goto:contador)
  75. if %1==77 (set PWL=%PWL%M&goto:contador)
  76. if %1==78 (set PWL=%PWL%N&goto:contador)
  77. if %1==79 (set PWL=%PWL%O&goto:contador)
  78. if %1==80 (set PWL=%PWL%P&goto:contador)
  79. if %1==81 (set PWL=%PWL%Q&goto:contador)
  80. if %1==82 (set PWL=%PWL%R&goto:contador)
  81. if %1==83 (set PWL=%PWL%S&goto:contador)
  82. if %1==84 (set PWL=%PWL%T&goto:contador)
  83. if %1==85 (set PWL=%PWL%U&goto:contador)
  84. if %1==86 (set PWL=%PWL%V&goto:contador)
  85. if %1==87 (set PWL=%PWL%W&goto:contador)
  86. if %1==88 (set PWL=%PWL%X&goto:contador)
  87. if %1==89 (set PWL=%PWL%Y&goto:contador)
  88. if %1==90 (set PWL=%PWL%Z&goto:contador)
  89. if %1==97 (set PWL=%PWL%a&goto:contador)
  90. if %1==98 (set PWL=%PWL%b&goto:contador)
  91. if %1==99 (set PWL=%PWL%c&goto:contador)
  92. if %1==100 (set PWL=%PWL%d&goto:contador)
  93. if %1==101 (set PWL=%PWL%e&goto:contador)
  94. if %1==102 (set PWL=%PWL%f&goto:contador)
  95. if %1==103 (set PWL=%PWL%g&goto:contador)
  96. if %1==104 (set PWL=%PWL%h&goto:contador)
  97. if %1==105 (set PWL=%PWL%i&goto:contador)
  98. if %1==106 (set PWL=%PWL%j&goto:contador)
  99. if %1==107 (set PWL=%PWL%k&goto:contador)
  100. if %1==108 (set PWL=%PWL%l&goto:contador)
  101. if %1==109 (set PWL=%PWL%m&goto:contador)
  102. if %1==110 (set PWL=%PWL%n&goto:contador)
  103. if %1==111 (set PWL=%PWL%o&goto:contador)
  104. if %1==112 (set PWL=%PWL%p&goto:contador)
  105. if %1==113 (set PWL=%PWL%q&goto:contador)
  106. if %1==114 (set PWL=%PWL%r&goto:contador)
  107. if %1==115 (set PWL=%PWL%s&goto:contador)
  108. if %1==116 (set PWL=%PWL%t&goto:contador)
  109. if %1==117 (set PWL=%PWL%u&goto:contador)
  110. if %1==118 (set PWL=%PWL%v&goto:contador)
  111. if %1==119 (set PWL=%PWL%w&goto:contador)
  112. if %1==120 (set PWL=%PWL%x&goto:contador)
  113. if %1==121 (set PWL=%PWL%y&goto:contador)
  114. if %1==122 (set PWL=%PWL%z&goto:contador)
  115. goto:inicio
  116.  
  117. :contador
  118. set/a contador+=1
  119. call:asterisc
  120. goto:inicio
  121.  
  122. :borrar
  123. if %contador% LEQ 0 (goto:eof)
  124. set/a contador-=1
  125. call:prompt
  126. for /l %%a in (1,1,%contador%) do (call:asterisc)
  127. set PWL=%PWL:~0,-1%
  128. goto:eof
  129.  
  130. :reply
  131. (
  132. echo n reply.dat
  133. echo e 0000 4D 5A 2E 00 01 00 00 00 02 00 00 10 FF FF F0 FF
  134. echo e 0010 FE FF 00 00 00 01 F0 FF 1C 00 00 00 00 00 00 00
  135. echo e 0020 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21
  136. echo rcx
  137. echo 002E
  138. echo w0
  139. )>reply.dat
  140. type reply.dat|debug>NUL 2>&1
  141. del/f/q/a "REPLY.EXE">NUL 2>&1
  142. ren reply.dat "REPLY.EXE"
  143. goto:eof
  144.  
  145. :prompt
  146. cls
  147. set/p pass=%MensajeIntoduzcaClave%<nul
  148. goto:eof
  149.  
  150. :asterisc
  151. set/p pass=*<nul
  152. goto:eof
  153.  
  154. :Menu
  155. echo  Menu:
  156. echo  1. Decir Hola
  157. echo  2. Decir Adios
  158. echo  0. Salir
  159. set /p var=Elige opcion:
  160. if %var%==1 goto hola
  161. if %var%==2 goto adios
  162. if %var%==0 exit
  163. goto Menu
  164.  
  165. :hola
  166. echo Hola
  167. goto Menu
  168.  
  169. :adios
  170. echo Adios
  171. goto Menu
  172.  
  173.  


« Última modificación: 20 Mayo 2014, 11:15 am por Nucleorion » En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #21 en: 19 Mayo 2014, 21:38 pm »

Antes de nada aclararte que, aunque yo lo uso mucho porque mi dominio de batch supera por mucho mi dominio de otro lenguaje, para cosas como las que quieres hacer batch se queda corto.

Aun asi:

Citar
¿Porque se ejecuta la etiqueta reinicio antes de cometer ningun fallo?

Batch se ejecuta linea a linea.

Por eso usar "call" no es buena idea porque se suele hacer:
IF condicion CALL :menu

pero resulta que no estás controlando que si el IF no cumple condicion, no vaya a :menu y entonces a donde va? a la linea siguiente.

En definitiva: lo ideal es controlar si has entrado al IF o al ELSE justo después de un CALL para saber si ha habido errores.
Otra opción es usar las variables llamadas ERRORLEVEL.
Tambien con goto:eof si se habia usado call, regresas a la posicion "original".

Para acabar, siendo que hay trozos de código en VBS, yo quizás probaria a aprender algo más de VBS (saber 1 poco es facil) y hacerlo todo en VBS.

En cuanto a reply.exe creo que se utiliza para leer alguna tecla especial como enter ya que:

Código
  1. :inicio
  2. reply.exe
  3. set letra=%errorlevel%
  4. if [%letra%]==[13] (goto:fin) else (call:ascii %letra%)

Si Errorlevel=13 quiere decir que la letra es la correcta para salir del bucle. Además, creo que sirve para, en función del codigo ASCII que retorne Errorlevel, saber qué letra ha pulsado el usuario. Lo que no sé es si no hay formas más elegantes de hacerlo.

PS: vale, si, hace eso si no me equivoco, buscar en memoria la tecla pulsada y almacenarla, pero con ASM

mas informacion: http://thestarman.pcministry.com/asm/debug/debug.htm#EXE


« Última modificación: 20 Mayo 2014, 03:31 am por Zomkar » En línea

Nucleorion

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #22 en: 20 Mayo 2014, 11:31 am »

Muchisimas gracias, te has explicado genialmente  :D

He programado en muchos lenguajes diferentes, como los patos ya sabes, nadan, corren y vuelan pero no destacan en nada :P

vbs no lo he tocado apenas. La proxima vez que vaya ha hacer algo en dos, pruebo a hacerlo en vbs. Espero que haya mas documentacion ya que es un lenguaje de programacion en si, porque en dos aparte la escueta documentacion casi sin ejemplos de:

http://technet.microsoft.com/en-us/library/bb490873.aspx

Lo demas que he encontrado esta disperso.
En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #23 en: 20 Mayo 2014, 20:43 pm »

Bueno, lo cierto es que en VBS hay más ejemplos que en DOS/Batch, pero también te vas a encontrar con el problema de que las documentaciones están orientadas a quien ya sabe usar las herramientas

Lo ideal, para mi, como con cualquier lenguaje, es aprender leyendo tutoriales, que no sean muy basicos pero que sobretodo usen ejemplos y los conceptos se te queden un poco y cuando quieras hacer un programa sepas por donde tirar.

Por ejemplo tutoriales asi:
http://foro.elhacker.net/scripting/tutorial_vbscript-t229032.0.html

por cierto para DOS hay muchas paginas pero si quieres ejemplos esta esta muy bien:
http://www.robvanderwoude.com/batchcommands.php
En línea

Nucleorion

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #24 en: 22 Mayo 2014, 12:50 pm »

Gracias por los enlaces

Al probarlo en un sistema de 64bits me ha dado error el archivo reply.exe. Imagino que habria que programarlo diferente para 64bits. Creo que he encontrado la manera para detectar que arquitectura de sistema se esta usando con el comando %PROCESSOR_ARCHITECTURE% podria definir si se crea un reply u otro, pero no tengo ni idea de como hacer un reply para 64bits
« Última modificación: 22 Mayo 2014, 12:57 pm por Nucleorion » En línea

Zomkar

Desconectado Desconectado

Mensajes: 180


Ver Perfil
Re: (Batch) Es Posible hacer password char en batch? (Pregunta)
« Respuesta #25 en: 22 Mayo 2014, 21:35 pm »

yo tampoco, si no me equivoco se puede hacer en C:

-leer desde Memoria el valor de la tecla pulsada
-si es Enter devolver ERRORLEVEL 13
-si es retroceso borrar letra
-para el resto de caracteres ascii, devolver su valor en ERRORLEVEL
http://www.ascii-code.com/
(en el batch usan a partir de '0' que es 48 pero puedes hacer más si es que batch los admite)

en realidad se puede hacer todo el codigo en C pero para usarlo con este batch seria eso

compilas el codigo sobre la plataforma que vayas a usar (64) y te olvidas de la parte que crea el archivo.exe si se puede evitar porque para eso hay que saber un poco de ASM por lo menos

PS: si no creas el exe otra vez tendras que conseguir que te funcione y eso quizas no sea posible, prueba con propiedades->compatibilidad
« Última modificación: 22 Mayo 2014, 22:01 pm por Zomkar » En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] Password BAS 0.1
Scripting
ËrîC# 3 3,445 Último mensaje 11 Diciembre 2007, 17:23 pm
por nhaalclkiemr
[Batch] cambiar password
Scripting
mindfreak93 2 3,173 Último mensaje 13 Marzo 2009, 01:41 am
por mindfreak93
[batch] PASS-CHAR BY -.: GUERREROHGP :.-
Scripting
Guerrerohgp 3 3,508 Último mensaje 6 Agosto 2009, 17:21 pm
por leogtz
es posible hacer lo siguiente con batch
Scripting
junior spanish 3 4,096 Último mensaje 17 Noviembre 2009, 17:35 pm
por junior spanish
[Batch] Insertar un batch dentro de un batch que fabrique un .txt
Scripting
$pedrojo2704 2 6,484 Último mensaje 23 Agosto 2012, 10:08 am
por $pedrojo2704
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines