我知道Win98下怎样查看, 但Win2000下要怎样才能查看星号密码?能否给示例代码?

解决方案 »

  1.   

    先发送
    EM_GETPASSWORDCHAR消息保存密码屏蔽字符
    用EM_SETPASSWORDCHAR取消密码字符
    Sleep(20)以后再WM_GETTEXT
    最后EM_SETPASSWORDCHAR恢复原来密码字符
      

  2.   

    参考代码:
    char PsChar=SendMessage(des,EM_GETPASSWORDCHAR,0,0);
    PostMessage(des,EM_SETPASSWORDCHAR,0,0);
    Sleep(50);
    char title[255];
    SendMessage(des,WM_GETTEXT,255,long(title));
    PostMessage(des,EM_SETPASSWORDCHAR,PsChar,0);
      

  3.   

    char buffer[256];
    ::SendMessage(GetDlgItem(IDC_EDIT)->m_hWnd, WM_GETTEXT, MAX_PATH, (LPARAM)buffer);
    IDC_EDIT是密码EDIT
    buffer就是你要的东东
      

  4.   

    hook 和远线程都可以.
    远线程简单一些, 列一下步骤:
    1. 取目标进程句柄, OpenProcess, 至少要传 PROCESS_CREATE_THREAD 和 PROCESS_VM_WRITE 权限.
    2. VirtualAllocEx 建一页 4k 内存
    3. WriteProcessMemory 把执行下面函数写入 alloc 来的内存.
    VOID Worker(HWND hwndPwd) {
        SendMessage(hwndPwd, EM_SETPASSWORDCHAR, 0, 0);
    }
    可以假设 user32.dll 在那个进程里地址一样. 否则稍麻烦些.
    4. CreateRemoteThread, 以 alloc 返回的地址为 lpStartAddress.
    5. free 内存, handle, etc
      

  5.   

    不要总想着hook,hook,hook...
    ---------------------
    binbin 你大概没试过你发的方法. 2k 不是 9x, 有一点密码保护.
      

  6.   

    漏了一点, CreateRemoteThread 时 lpParameter 传为密码框句柄的值.
      

  7.   

    我给一个思路:先用另外一个程序A装上钩子,把按键信息拦截下来后用getwindowtext函数显示密码的内容。
    当然你还要获得密码输入框的句柄,这个句柄的获得在DLL里进行,把它传给A就可以了。不过涉及到两个进程的通信就要读写内存映射文件了。不过这个我自己做来玩的,不知道是否适合你的情况
      

  8.   

    wormie4evr(虫虫不爱我...):俺想你没有试过俺的代码.
    俺的代码在windows 2000 sp3上测试通过.将密码框属性去掉就可以使用WM_GETTEXT得到密码.
    而这只需要发送一个EM_SETPASSWORDCHAR即可将其变成普通文本框.取完改回去即可.
    20毫秒的时间里,一切就象没发生过,而你已经取到想要的东东.
      

  9.   

    win32为了兼容对跨进程的SendMessage内部使用了数据复制,使得WM_GETTEXT可以顺利跨进程执行,只是win2000为了安全做了一点小小的保护,只是忘了对EM_GETPASSWORDCHAR/EM_SETPASSWORDCHAR消息作保护,所以...
    并不需要远程线程
    试试再说话,不要想当然.
      

  10.   

    你的方法我是试过才说的. 如果这种方法可以, 为什么那么多人不嫌麻烦玩hook?
    MS 没有那么疏忽~ 别的进程建的密码 EDIT 是不会允许你EM_SETPASSWORDCHAR 的.
      

  11.   

    啊, 没仔细看, 不错不错你的方法的确很可以 :)
    sorry.
    我没注意是 PostMessage. 这点很关键了.
    鼓掌ing
      

  12.   

    http://www.codeproject.com/dll/pwdspy.asp
      

  13.   

    用钩子也很方便呀,如果用Sleep()的方法,可能还要用一个SetTimer(否则就只能点击目标对话框了),这样也不是同样耗费CPU资源吗?小弟写过一篇文章《利用鼠标钩子获得Win2000密码框密码》,请移步到以下地址:http://articles.luocong.com
      

  14.   

    itaolu(老罗): 我同意 binbin 的, 钩子能不用就避免. Sleep 应该以 timer 代替没错, 这样一来只是每 50 或 100 毫秒发 WM_GETTEXT 看看有没处理完 EM_SETPASSWORDCHAR. 一般第一次 WM_GETTEXT 时就处理好了.
      

  15.   

    实在是精彩,大家都是高手。我以前也用过binbin 的方法,不过我是用SendMessage 发送 EM_SETPASSWORDCHAR消息,所以没成功。能告诉我这其中的差异吗?这次我学会了很多,十分感谢binbin,也感谢wormie4evr(虫虫不爱我...),因为他提供了另一种思路,请两位大侠收分吧。
      

  16.   

    To wormie4evr(虫虫不爱我...):
        我也明白了,非常感谢!To 楼主:
        SendMessage是把消息发送到消息队列中,并一直等到该消息执行完成后才返回。PostMessage则是把消息发送到消息队列中,但不会等待,立即返回。