win2000/xp下,截取密码框的星号密码,解决的办法难道只能用c\c++写dll这一类的吗?vb不行吗?
请指教,谢谢!
请指教,谢谢!
解决方案 »
- Implements IDTExtensibility2的宿主程序怎么开发?
- 请问vb从excel单元格读出的数字,如何始终保留两位小数?
- 新手,添加数据库的问题
- 【贴图】发三张变形金刚真人版图片....大家一起来变形吧....MM可以无视.
- 用VB6 如何获取/修改windows记事本(Notepad)菜单上的文字
- 如何将搜索到的QQ号码存为文本,100分相送,祝大虾们事业一帆风顺!(速速帮我)
- Webbrowser 如何给弹出的上传文件对话框赋值?
- 怎么把一个窗体的Adodc的内容传递给另一个窗体DataGrid控件上?
- 问个小白的问题~别笑
- vb中如何动态创建form或者是空件,并且它们的事件如何来描述?
- ftp文件上传时需要登录,我用Inet控件如何实现?在线等待
- VB登录google后台问题
但在2000/xp下,系统首先判断执行该语句是否在密码窗口所在的进程,如果不是,则返回错误,自然取不到密码了。
用VC写dll,是为了将该段代码注入到目标进程中,如此能使该消息执行成功
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETPASSWORDCHAR = &HD2
Private Const EM_SETPASSWORDCHAR = &HCC
Private Const WM_GETTEXT = &HDPrivate Sub Command1_Click()
Dim handle As Long
handle = 591284 ' 这里应该将 handle 赋值成要获得密码的窗口的句柄, 通常用FindWindow和FindWindowEx
Debug.Print GetPassword(handle)
End Sub' 获得密码文本框中的内容(密码)
' hwnd 为密码文本框的句柄
Function GetPassword(ByVal hwnd As Long) As String
Dim chars As Byte, password As String
chars = SendMessage(hwnd, EM_GETPASSWORDCHAR, 0, 0)
Call PostMessage(hwnd, EM_SETPASSWORDCHAR, 0, 0)
DoEvents
password = String(260, vbNullChar)
Call SendMessage(hwnd, WM_GETTEXT, 260, ByVal password)
Call PostMessage(hwnd, EM_SETPASSWORDCHAR, chars, 0)
password = StrConv(LeftB(StrConv(password, vbFromUnicode), InStr(password, vbNullChar) - 1), vbUnicode)
GetPassword = password
End Function
最简单的进程注入是通过跨线程钩子注入
跨线程钩子的回调函数必须放入普通dll中
而VB的ActiveX DLL是基于COM,只有在COM环境中才是线程安全的
如果跨线程钩子用的是VB的ActiveX DLL,绝对会触发一般保护性错误(就是常见“非法操作”对话框)
goodname008(卢培培,充电中......) 的方法是发送EM_SETPASSWORDCHAR消息修改文本框模式
普通文本框不具有进程保护的我觉得最关键的是MicroSoft设计不良
既然保护了WM_GetText,为什么不保护EM_SETPASSWORDCHAR