Red de conocimiento informático - Conocimiento informático - Cómo evitar que la contraseña del cuadro de edición se obtenga ilegalmente

Cómo evitar que la contraseña del cuadro de edición se obtenga ilegalmente

El autor descubrió recientemente una herramienta muy popular que se especializa en obtener la contraseña del cuadro de edición, y su código fuente incluso se publicó en los periódicos. Esto es sin duda una negación total de la función de contraseña de Editar. Este artículo primero analizará el principio de obtener contraseña ilegalmente y luego brindará contramedidas a Visual C++ para proteger la contraseña del cuadro de edición contra la obtención ilegal.

(1) Principio de acceso ilegal a la Contraseña

Editar es un control estándar de Windows Cuando la propiedad Contraseña se establece en Verdadero, el contenido de entrada se bloqueará como un asterisco (. *), para lograr el propósito de protección. El contenido del cuadro de edición se puede obtener enviando mensajes WM_GETTEXT, EM_GETLINE. El programa hacker utiliza esta característica de Editar para enumerar primero todas las subventanas del programa actual. Cuando se encuentra una EDIT en la ventana enumerada y tiene el atributo ES_PASSWORD, luego envía SendMessage a la ventana y envía un mensaje WM_GETTEXT o EM_GETLINE. para que el contenido del cuadro de edición sea claro de un vistazo.

(ii) Proteger contraseña

Del análisis anterior, se puede ver que la vulnerabilidad de Editar es que no se verifica la identidad de la persona que envía el mensaje WM_GETTEXT o EM_GETLINE , siempre que se encuentre la ventana Editar Un identificador a cuyo contenido se puede acceder mediante cualquier proceso. A continuación se muestra una forma sencilla de verificar que la identidad del remitente sea legítima.

1) Crear una nueva clase CEdit

Heredar una subclase CPasswordEdit de CEdit y afirmar que la variable global g_bAuthorIdentity representa la identidad del remitente del mensaje:

BOOLg_bAuthorIdentity ;

Luego responda a la función virtual DefWindowProc de CWnd y realice la autenticación en esta función:

LRESULTCPasswordEdit::DefWindowProc(UINTmessage,

WPARAMwParam,LPARAMlParam){ // El contenido editado debe obtenerse a través de uno de los siguientes dos mensajes

if((message===WM_GETTEXT)||(message===EM_GETLINE)){//Comprueba si es legal

p>

if(!g_bAuthorIdentity){//Adquisición ilegal, mostrar mensaje

AfxMessageBox(_T("Mi contraseña, ¡no puedo dejar que la veas!"));//return0; } // Acceso legal g_bAuthorIdentity=FALSE;} returnCEdit::DefWindowProc(message,wParam,lParam);} 2) Procesar en el cuadro de diálogo de entrada de datos

Afirmar un miembro de la clase en el cuadro de diálogo m_ edtPassword:

CPasswordEditm_edtPassword;

Luego agregue el siguiente código en OnInitDialog() del cuadro de diálogo:

m_edtPassword.SubclassDlgItem(IDC_EDIT_ PASSWORD,this);

El propósito es asociar el control con una nueva clase.

Luego establezca la identidad en legal en el intercambio de datos del cuadro de diálogo:

voidCDlgInput::DoDataExchange(CDataExchange*pDX){//Si se obtienen los datos

//Nota: Para la clase CPropertyPage, esto no es necesario

if(pDX-m_bSaveAndValidate)//condición

if(pDX-m_bSaveAndValidate){g_bAuthorIdentity=TRUE; }CDialog::DoDataExchange (pDX);

//{{ AFX_DATA_MAP(CDlgInput)

DDX_Text(pDX,IDC_EDIT_PASSWORD,m_sPassword);

//} }}AFX_DATA_MAP} así, el cuadro de entrada de contraseña está protegido.

(3) Problemas que necesitan atención

El método anterior es solo para programas VC, debe usar VC para crear un control ActiveX con contraseña. similar al anterior.