PDA

Ver la Versión Completa : Password revealear


cascarrabias
19-05-2008, 17:55:24
Buen dia, me encontre con este programa que se aprovecha del mensage
EM_SETPASSWORDCHAR (http://msdn.microsoft.com/en-us/library/bb761653%28VS.85%29.aspx) para revelar los campos de contrasenias....aqui esta la pagina (http://www.rekenwonder.com/revealer.htm) del programa donde viene algo de su codigo fuente.

El problema es que he estado tratando de cachar cuando se le envie el mensage a mi aplicacion pero nadamas no lo logro hacer.

Lo que he intentado es con un applicationEvents y en su evento OnMessage trate de agarrar el mensage con un

If Msg=EM_SETPASSWORDCHAR Then showmessage('Mensage detectado')


Pero no he logrado que me entre al condicional, yo pensaba al detectarlo solo ponerle el Handled a False, alguien me puede echar la manita para detectarlo? Creo nos ayudaria a mucho no tener este hoyo en nuestras aplicaciones. de antemano Gracias. Saludos

cHackAll
19-05-2008, 18:10:24
Hola (http://www.clubdelphi.com/foros/showthread.php?p=224657)

xEsk
19-05-2008, 22:46:49
Hola (http://www.clubdelphi.com/foros/showthread.php?p=224657)

Me he mirado el link que ofreces, y no veo relación con lo que él pregunta :S

Saludos

cHackAll
19-05-2008, 23:02:45
Me he mirado el link que ofreces, y no veo relación con lo que él pregunta :S

Saludos


Vaya, talvez ésto porque no he entendido la pregunta, te pido me ayudes a entenderla!

roman
19-05-2008, 23:06:34
Yo también me confundí al principio. Ese hilo no tiene que ver, pero sí la respuesta (http://www.clubdelphi.com/foros/showpost.php?p=224657&postcount=28) que da Javier ahí. Amigo, ser un poquito más explícito no perjudica a la salud ;)

// Saludos

cHackAll
19-05-2008, 23:22:20
Yo también me confundí al principio. Ese hilo no tiene que ver, pero sí la respuesta (http://www.clubdelphi.com/foros/showpost.php?p=224657&postcount=28) que da Xavier ahí. Amigo, ser un poquito más explícito no perjudica a la salud ;)

// Saludos

Este... :o
...si lo último lo comentaste por mi pues normalmente dejo todo el hilo para que entiendan el desenvolvimiento del mismo y la causa de mi post. Creo que solo se debe esperar unos segundos a que el navegador "salte" hacia el post; en todo caso leer un poco tampoco perjudica la salud ;)

Saludos

cascarrabias
20-05-2008, 00:45:16
ahora mismo estoy leyendo la respuesta de Javier....gracias!

Por otro lado, por ejemplo estaba viendo que del msn messenger, no puedo lograr visulizar la contrasenia aunque le mande mensages para que la mustre lo que quisiera tratar de hacer es lo mismo para mi aplicacion.....disculpen la molestia!

Faust
20-05-2008, 00:59:18
Más o menos te entiendo, tienes el código del programilla Password Revealer, y tratas probar hacer lo mismo que ese programilla, pero creo que en Win XP o en cualquier Win basado en NT no se puede usar ese truquín de captar el mensaje que necesitas...

Faust
20-05-2008, 01:03:53
Ah, ya chequé el enlace que dejaste Cascarrabias, léelo bien porque dice que setea o remueve el Password Character, por lo que nunca lo vas a captar, porque muy pocas aplicaciones por cuestiones de seguridad no pueden por sí mismos cambiar esta propiedad. Para ver los caracteres que se introducen en un edit seteado para password, debes enviarle este mensaje p. ej. con SendMessage.

cascarrabias
20-05-2008, 01:04:20
Más o menos te entiendo, tienes el código del programilla Password Revealer, y tratas probar hacer lo mismo que ese programilla, pero creo que en Win XP o en cualquier Win basado en NT no se puede usar ese truquín de captar el mensaje que necesitas...


Hola, pues lo que intento es bloquearlo para que no muestre las pass guardadas por el usuario para iniciar sesion en mi aplicacion, ya que las puedo revelar facilmente con el mensage que mencione.....tanto en winXP como en Vista. Saludos y gracias

cHackAll
20-05-2008, 01:06:18
Pero, si implementas la solucion que yo he propuesto dudo que dicho Spyware detecte la contraseña.

Saludos

cascarrabias
20-05-2008, 01:08:56
Pero, si implementas la solucion que yo he propuesto dudo que dicho Spyware detecte la contraseña.

Saludos

Gracias por responder....pues probe implementando tu codigo pero desafortunadamente algo debo haber hecho mal...porque me sigue quitando el password char de mi edit y me sigue mostrando la contrasenia.....te comento este edit donde esta el password es de un formulario para inicio de sesion donde el usuario puede si gusta dejar el pass guardado o recordado en la maquina....tal vez sea por eso, ya que el usuario nunca teclea nada en el edit ya que ya se encuentra guardado el codigo, lo siento talvez estoy entendiendo mal el proposito o manera de utilizar tu codigo....gracias

cascarrabias
20-05-2008, 01:12:36
perdon Javier...ya lo observe bien...tienes razon....con eso se puede desviar el problema ...o cuando menos da algunas ideas mas para adecuarlo a mis necesidades....muchas gracias!

aun asi, lo que no entiendo es poque no se puede cancelar simplemente el mensage al recibirlo?

roman
20-05-2008, 01:27:28
aun asi, lo que no entiendo es poque no se puede cancelar simplemente el mensage al recibirlo?

Yo creo que porque el mensaje se manda directamente al Edit, no a la aplicación. Por eso el ApplicationEvents no puede detectarlo; nunca pasa por ahí.

Lo que puedes hacer es interceptarlo a nivel del TEdit, por ejemplo:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
OldEditWndProc: TWndMethod;
procedure EditWndProc(var Message: TMessage);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
OldEditWndProc := Edit1.WindowProc; // guardar el manejador de mensajes original
Edit1.WindowProc := EditWndProc; // reemplazar el manejador por uno nuestro
end;

procedure TForm1.EditWndProc(var Message: TMessage);
begin
if Message.Msg <> EM_SETPASSWORDCHAR then
// llamar al manejador de mensajes original
OldEditWndProc(Message);
end;

end.


Aquí lo que se hace es reemplazar al vuelo el procedimiento que maneja los mensajes del control Edit1. El procedimiento de reemplazo simplemente filtra el mensaje EM-SETPASSWORDCHAR, y deja el resto al procedimiento original.

Pero claro, tal como dice Javier, basta un GetText para obtener el texto al descubierto.

// Saludos

cascarrabias
20-05-2008, 02:25:32
Ok Roman....Muchas gracias...exactamente a eso queria llegar.... ahora si cancelamos el envio de nuestro password y para lo que mencionan sobre GetText solo debemos hacer lo siguiente:


procedure TForm1.EditWndProc(var Message: TMessage);
var
PFalso: String;
begin
PFalso:='12345';
if Message.Msg <> EM_SETPASSWORDCHAR then OldEditWndProc(Message); ;
if Message.Msg = WM_GETTEXT then
Message.Result := StrLen(StrLCopy(PChar(Message.LParam), PChar(PFalso), Message.WParam - 1));
end;


Con eso evitamos que se envie nuestro password y de paso le jugamos una broma al malhechor mandandole un password falso! Saludos y gracias por el apoyo!

roman
20-05-2008, 02:40:24
y de paso le jugamos una broma al malhechor

Y a ti mismo :)

Para obtener el valor de Edit1.Text, la VCL hace uso precisamente de WM_GETTEXT, así que si no tomas precauciones, obtendrás lo mismo que le des al malechor :D

// Saludos

cascarrabias
20-05-2008, 02:51:02
Y a ti mismo :)

Para obtener el valor de Edit1.Text, la VCL hace uso precisamente de WM_GETTEXT, así que si no tomas precauciones, obtendrás lo mismo que le des al malechor :D

// Saludos


Ohhh...tienes razon....gracias por el aviso! . Bueno...ahora solo es cosa de poner un boleano que este a false y cuando queramos guardar o utilizar informacion del edit solo antes lo ponemos a true y acabando de usar el texto del edit lo regresamos false !


procedure TForm1.EditWndProc(var Message: TMessage);
var
PFalso: String;
begin
PFalso:='12345';
if Message.Msg <> EM_SETPASSWORDCHAR then OldEditWndProc(Message); ;
if permitir=false then
if Message.Msg = WM_GETTEXT then Message.Result := StrLen(StrLCopy(PChar(Message.LParam), PChar(PFalso), Message.WParam - 1));
end;



Saludos Roman y gracias por la ayudaaa!