Página 1 de 1

Personalizar Contraseña

Publicado: 21 May 2010, 21:31
por joaquin
Hola,
Tengo una duda, que no estoy seguro si exceden las posibilidades de Autoit:
He realizado un ejecutable en Autoit que solicita contraseña para abrir la aplicación y la cuestión que quiero plantear es si es posible darle la funcionalidad de personalizar/cambiar la contraseña de acceso al ejecutable sin recurrir a cualquier otro archivo ajeno al exe, de tal manera que otro usuario pudiera determinar su propia contraseña, o la pudiera cambiar cuando quisiera, únicamente desde el exe.
Por ejemplo, el Steganos LockNote es una aplicación de 320Kb que permite editar,cifrar y guardar texto bajo una contraseña que el usuario puede modificar para acceder a la aplicación.
Imagino que queda guardada en el propio ejecutable y la pregunta es si se podría implementar el mismo modo en Autoit.

A ver si alguien pudiera aclarar el tema...
Saludos

Re: Personalizar Contraseña

Publicado: 22 May 2010, 00:50
por BasicOs
Seguro que hay otras opciones, pero puedes guardar un fichero .au3 dentro del exe y el compilador, luego modificas el au3 que es texto y lo vuelves a compilar.
Borras el viejo y el nuevo reemplaza al otro. :smt021
El nuevo borra el compilador y el au3.

Puedes hacer todo "on the fly", hidden (oculto) y no se nota nada. Y también el compilador y el au3 no ocupan casi nada dentro del exe.

Lo otro es modificar el exe directamente, que también se puede hacer, pero bueno eso de tocar un exe nunca es la solución preferida, q para eso hay exes y datos:
para eso estan los ini, txt, base de datos, el registro, internet, etc... :smt030 :smt035 :smt035
Salu22:)

Re: Personalizar Contraseña

Publicado: 22 May 2010, 02:08
por Chefito
La forma más facil de meter información en el mismo exe es hacerlo al final del fichero, ya que esta información en esta posición no afecta en nada a la ejecución del fichero, al poner los datos después de la marca fin de fichero.

Tendrías que abrir el fichero con fileopen en modo=17 (16+1 forzar binario+escribir al final del fichero, supongo que funcione) para que luego al escribir en él (filewrite) lo haga al final del fichero. Luego lo cierras con fileclose y listo. Si no funciona así, lo abres en modo=16 y copias la información al final del fichero añadiendola en la variable con la info del fichero y copiandola.

Para recuperar la información puedes utilizar las funciones binarymid y binarylen. Puedes saber la posición de los datos en el archivo de distintas formas utilizando estas dos funciones. Sabiendo la cantidad binaria de datos que le introduces es muy facil.
Otra forma es sabiendo el tamaño inicial del archivo (con binarylen o filegetsize) antes de introducir los datos. Con esto ya sabriamos el inicio para conseguir tus datos. Restando el tamaño inicial del archivo al final (con tus datos) sabriamos lo que ocupan tus datos. Sabiendo todo esto puedes recuperar tus datos con binarymid.

Seguro que hay más formas de hacerlo. Todo es probar.

Intenta hacer algo y si te atascas te ayudaremos.

Saludos.

Re: Personalizar Contraseña

Publicado: 23 May 2010, 20:01
por joaquin
Gracias por las sugerencias.


Saludos, :smt002

Re: Personalizar Contraseña

Publicado: 29 May 2010, 20:34
por joaquin
Buenas,...siguiendo las sugerencias de Chefito he utilizado BinaryLen para calcular el numero de bytes que tiene el password introducido, y poder compararlo con la lectura del dato que haya a partir de FileSetPos, al que le paso el valor negativo de BinaryLen. Funciona correctamente si se ejecuta desde otro archivo, pero desde el mismo exe da error a fileOpen.
¿Pueden indicar cómo se podría solucionar, sin recurrir a otro arhivo ? :smt017

Código: Seleccionar todo

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButtonOk
			$file = fileOpen(@ScriptDir & "\pass.exe",17)               
			If $file = -1 Then											
				MsgBox(0, "Error", "Error al abrir archivo.")
				Exit
			EndIf
			
			$value= GUICtrlRead($PasswordEdit)
			$pass = StringToBinary ("$val="&$PasswordEdit)                
			$len = BinaryLen($pass)                                       
			FileFlush($file)
			Local $n = FileSetPos($file, -$len , $FILE_END)
			
			If $value <> GUICtrlRead($n)  Then
				MsgBox(0,"Pass", "Reintentar")
			EndIf
			If $value == GUICtrlRead($n) Then
				MsgBox(0,"Pass", "Correcto")
			EndIf
			
			FileClose ($file)

	EndSwitch
WEnd

$val=2


Re: Personalizar Contraseña

Publicado: 31 May 2010, 12:55
por Chefito
Sí, el problema es que quieres escribir en un archivo que está abierto (lo has abierto tú), y el win no te deja hacer esto. Es un gran problema :smt017 .
Puede que una solución fuese crear una copia, trabajar sobre esta y luego sustituir el original por la copia variada. Un poco rollazo. Además, tendrías que forzar el borrar el fichero original, ya que el win también se quejaría al intentar borrar un fichero que está abierto. Parece que es algo complicado.
Seguro que hay alguna forma para escribir en un fichero abierto, pero ahora mismo no se me ocurre ninguna.


Saludos.

Re: Personalizar Contraseña

Publicado: 03 Jun 2010, 22:02
por joaquin
OK, Chefito.
Gracias por la respuesta.