WEB开发网
开发学院软件开发VC 偷窥桌面程序和IE浏览器的密码编辑框 阅读

偷窥桌面程序和IE浏览器的密码编辑框

 2010-05-12 20:35:38 来源:WEB开发网   
核心提示:2、当前页面是否包含密码输入域DWORDCheckHtmlDocument()//返回:0——无密码输入,否则——有密码输入{MSHTML::IHTMLElementCollection*pForm;HRESULThr=g_lpHTMLDocument2->get_

2、当前页面是否包含密码输入域

DWORD CheckHtmlDocument()
//返回: 0 —— 无密码输入,否则 —— 有密码输入
{
  MSHTML::IHTMLElementCollection *pForm;
  HRESULT hr = g_lpHTMLDocument2->get_all(&pForm);
  //g_lpHTMLDocument2 是一个IHTMLDocument2 指针
  if(FAILED(hr)) return 0;
  long len;
  pForm->get_length(&len); //How many elements on this form?
  DWORD dwRet = 0;

  for(int i = 0; i < len; i++)
  {
   LPDISPATCH lpItem = pForm->item(CComVariant(i),
         CComVariant(i));
   MSHTML::IHTMLInputElementPtr lpInput;
   HRESULT hr = lpItem->QueryInterface(&lpInput);
   //它是输入域吗? 

   if(FAILED(hr)) continue;
   _bstr_t type(_T("password"));

   if(lpInput->Gettype() == type) //Check Field Type
   {
     //_bstr_t x = lpInput->Getvalue();
     //If you want its string
     dwRet++;
   }
   lpItem->Release(); //记住释放!
   lpItem = NULL;
  }
  pForm->Release();
  pForm = NULL;
  return dwRet;
}

3、从当前页面密码输入域吸取密码

_bstr_t x = lpInput->Getvalue(); //And you go!

 LPCTSTR lpWhatEver = (LPCTSTR)x;

 //在这里对密码进行处理

SuperPasswordSpy++ 程序说明——该程序基于Unicode,需要在WinNT/2K/XP + IE4.0+中运行。

读者可以通过本文附带的程序代码了解如何跟踪窗口和远程进程钩子。同时极力推荐读者研究 MS Platform SDK 的例子程序 SPY 和 Brian Friesen 先生的 PasswordSpy。笔者不喜欢“重新发明轮子”之类的事情,本文涉及的代码借鉴了 SPY 例子(如鼠标跟踪)以及PasswordSpy(如函数 SmallestWindowFromPoint和资源)的实现。如果读者有关于钩子技术的疑问,请阅读Brian Friesen 的相关文章,他的文章在这方面讲很详细。此外有关DLL中共享区的详细实现方法建议阅读 Jeffrey Richter 的“Programming Application for MS Windows”第四版。

下面是本文程序SuperPasswordSpy++ 实现中的其它一些细节:

1、判断密码编辑框的条件

BOOL IsPasswordEdit(HWND hWnd)
{
   TCHAR szClassName[64];
   int nRet = GetClassName(hWnd, szClassName, 64);
   if(nRet == 0) return FALSE;
   szClassName[nRet] = 0;
   if(::lstrcmp(szClassName, _T("Edit")) != 0 &&
     ::lstrcmp(szClassName, _T("TEdit")) != 0

       &&| ::lstrcmp(szClassName, _T("ThunderTextBox"))
         != 0 ) return FALSE;
      //Here, is it OK?

   DWORD dw = ::GetWindowLong(hWnd,GWL_STYLE);
   dw &= ES_PASSWORD;
   if(dw == ES_PASSWORD)
      return TRUE;
   return FALSE;
}

以上代码是SuperPasswordSpy++ 实现,要注意一点:密码编辑框的判断是根据类名实现的,笔者在代码中的判断方法是检查类名是否为“TEDIT," "IRIS.PASSWORD” 或者“"EDIT.”。这是Borland的命名规范:TxxxClass。“ThunderTextBox”是由Visual Basic创建得类名。我无法保证今后Windows系统中的应用程序密码编辑框的类名不会改变。谁知道Visual Studio今后的版本中密码编辑框会叫什么。如果不幸碰到这样的情况,请大家自行修改SuperPasswordSpy++的相关代码。

上一页  1 2 3 4 5 6  下一页

Tags:偷窥 桌面 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接