Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Password revealear (https://www.clubdelphi.com/foros/showthread.php?t=56493)

cascarrabias 19-05-2008 16:55:24

Password revealear
 
Buen dia, me encontre con este programa que se aprovecha del mensage
EM_SETPASSWORDCHAR para revelar los campos de contrasenias....aqui esta la pagina 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
Código Delphi [-]
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 17:10:24

Hola

xEsk 19-05-2008 21:46:49

Cita:

Empezado por cHackAll (Mensaje 287706)

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

Saludos

cHackAll 19-05-2008 22:02:45

Cita:

Empezado por xEsk (Mensaje 287821)
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 22:06:34

Yo también me confundí al principio. Ese hilo no tiene que ver, pero sí la respuesta que da Javier ahí. Amigo, ser un poquito más explícito no perjudica a la salud ;)

// Saludos

cHackAll 19-05-2008 22:22:20

Cita:

Empezado por roman (Mensaje 287840)
Yo también me confundí al principio. Ese hilo no tiene que ver, pero sí la respuesta 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 19-05-2008 23:45:16

Vamos...vamos....
 
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 19-05-2008 23: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 00: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 00:04:20

Cita:

Empezado por Faust (Mensaje 287892)
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 00:06:18

Pero, si implementas la solucion que yo he propuesto dudo que dicho Spyware detecte la contraseña.

Saludos

cascarrabias 20-05-2008 00:08:56

Cita:

Empezado por cHackAll (Mensaje 287897)
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 00: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 00:27:28

Cita:

Empezado por cascarrabias (Mensaje 287902)
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:

Código Delphi [-]
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 01:25:32

Andaleeee....a eso me referia
 
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:

Código Delphi [-]
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 01:40:24

Cita:

Empezado por cascarrabias (Mensaje 287914)
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 01:51:02

Cita:

Empezado por roman (Mensaje 287916)
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 !

Código Delphi [-]
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!


La franja horaria es GMT +2. Ahora son las 13:24:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi