对黑客探取暗码原理拟定相应防范措施wangyi - 娱乐之横扫全球

对黑客探取暗码原理拟定相应防范措施wangyi

2018-09-16 07:34:04 | 作者: 易文 | 标签: 控件,音讯,办法 | 浏览: 3121

一、不合法获取Password的原理:

  Edit控件是Windows的一个规范控件,当把其Password特点设为True时,就会将输入的内容屏蔽为星号,然后到达维护的意图。尽管咱们看来都是星号,但程序中的Edit控件实践仍是用户输入的暗码,应用程序能够获取该控件中的暗码,其他应用程序也能够经过向其发送WM_GETTEXT或EM_GETLINE音讯来获取Edit控件中的内容。黑客程序正是使用Edit控件的这个特性,当发现当时勘探的窗口是Edit控件而且具有ES_PASSWORD特点时,则经过SendMessage向此窗口发送WM_GETTEXT或EM_GETLINE音讯,这样Edit框中的内容就一望而知了。

二、黑客软件工作办法

  首先要获得当时的窗口,并判别是否是Edit控件,一般多经过鼠标来指定要勘探的窗口,例如在WM_MOUSEMOVE音讯的呼应函数中进行判别,现罗列代码片段如下:

  //将客户坐标转换成屏幕坐标
  ClientToScreen(&point);

  //回来一个包括指定屏幕坐标点的窗口
  CWnd* pWnd = CWnd::WindowFromPoint(point);

if (pWnd)
{
  //获取窗口句柄 /
  HWND hwndCurr = pWnd->GetSafeHwnd();

  if ((::GetWindowThreadProcessId (GetSafeHwnd(), NULL)) != (::GetWindowThreadProcessId (hwndCurr, NULL)))
  {
    char lpClassName[255];

    //获取类名
    if (::GetClassName(hwndCurr, lpClassName, 255))
    {
      //判别是否是Edit控件 }
      if (0 m_strWndClass.CompareNoCase("EDIT"))
      {
      //获取窗口风格
      LONG lStyle = ::GetWindowLong(hwndCurr, GWL_STYLE);

      //假如设置了ES_PASSWORD特点
      if (lStyle & ES_PASSWORD)
      {
        char szText[255];

  //经过把握的句柄hwndCurr向此控件发送WM_GETTEXT音讯
        ::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText); //暗码已保存在szText中
        m_strPassword = szText;
     }
   }
}

}

上述代码中值得留意的有以下几个要害当地:

  ClientToScreen(&point);
  CWnd* pWnd = CWnd::WindowFromPoint(point);
  HWND hwndCurr = pWnd->GetSafeHwnd();

  这三句代码能够获取当时鼠标方位地点窗口的窗口句柄,在SendMessage中要用到的。
)
  ::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText); vCVBBUQhR

  这便是真实起作用的SendMessage了,其第一个参数指定了要接纳音讯的窗口句柄,咱们现已经过上面的代码获取到了,第二个参数就是让Edit控件回来字符的WM_GETTEXT音讯了,并将得到的内容保存在szText中。

  三、防备办法

  已然咱们搞清除了黑客软件遍及采纳的办法,那咱们天然能制订出一套防备其进犯的办法来。下面咱们就要对Password进行维护。

  从以上剖析咱们能够看出:Edit控件的缝隙首要在于没有对发送WM_GETTEXT或EM_GETLINE音讯者的身份进行查看,只要能找到Edit窗口句柄,任何进程都可获取其内容。所以有必要要对发送音讯者的身份进行验证,这儿给出一种办法来验证发送音讯者的身份是否合法:

  1.创立新CEdit类

  从CEdit承继一个子类CPasswordEdit,声明全局变量g_bSenderIdentity标明音讯发送者的身份:

  BOOL g_bSenderIdentity;

  然后呼应CWnd的虚函数DefWindowProc,在这个回调函数中进行身份验证:

LRESULTCPasswordEdit::DefWindowProc (UINTmessage,WPARAMwParam,LPARAMlParam)
{
  //对Edit的内容获取有必要经过以下两个音讯之一
  if((messageWM_GETTEXT) ||(messageEM_GETLINE))
  {
    //查看是否为合法
    if(!g_bSenderIdentity)
    {
      //不合法获取,显现信息
      AfxMessageBox(_T ("陈述:正在企图盗取暗码!"));
      return 0;
     }
    //合法获取
    g_bSenderIdentity=FALSE;
   }
  return CEdit::DefWindowProc (message,wParam,lParam);
}


2.在数据输入对话框中做些处理

  在对话框中声明一个类成员m_edtPassword:

  CpasswordEdit m_edtPassword;

  然后在对话框的OnInitDialog()中参加下列代码:

  m_edtPassword.SubclassDlgItem(IDC_EDIT_PASSWORD,this);

  将操控与新类做相关。

  之后要在对话框的数据交换函数中将身份设为合法:

void CDlgInput::DoDataExchange (CDataExchange*pDX)
{
  //假如获取数据
  //留意:关于CPropertyPage类这儿不需求 if (pDX->m_bSaveAndValidate)条件
  if(pDX->m_bSaveAndValidate)
  {
    g_bSenderIdentity=TRUE;
   }
  CDialog::DoDataExchange(pDX);
 
  //{ { AFX_DATA_MAP(CDlgInput)
  DDX_Text (pDX,IDC_EDIT_PASSWORD,m_sPassword);
  // } }AFX_DATA_MAP
}

  这样,Password输入框就具有了合法身份,会遭到维护。

  定论:

  以上的办法仅针对VC程序,关于其他言语如VB、Delphi等言语,需求凭借VC做一个Password的ActiveX控件,完成办法与上述办法根本相似。以上程序均用VisualC++6.0编制调试经过。




版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表娱乐之横扫全球立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章