密码截取问题?(200分)

W

wz_hzb

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么有些密码框用WM_GETTEXT能取到内容,有些取到的只是乱码或不行?<br>如何解决?<br>
 
如果在一个操作系统中,有的不行就表示他已经使用了加密技术,比如里面本来就是放置了星星,或者说使用了加密运算得出的字符。<br>如果这样的话,就不好办了。
 
to yzhshi:<br>你用过007pwd软件吗,这个东东就能看到密码的,为什么007就行呢?
 
你是不是说你的程序要么当前系统的所有密码都看不见,要么都能看见?<br>如果是的话,你的程序存在问题。<br>否则的话。<br>可能是007pwd不是使用这种方式获得的密码,据说从内存中可以获得,但是俺不知道怎么实现,也没有见过类似的帖子。
 
可能是某些密码包含特殊的字符,所以,你取到的是乱码,(其实,让你取到乱码的方法还<br>有很多);对于取不到,,可能是程序用了键盘钩子,当用户每敲了键以后,程序取到这个键<br>,同时,把在密码框中的字符串清空了,但仍然在上面用mask符号显示,所以你取不到了;<br><br>要解决这个问题也不难,,你也要使用键盘钩子,这样,你也就可以在清除密码前获得用户<br>敲的键了!<br>
 
有的干脆就是密码框里显示的就是星星*****<br>没有把真正的密码放在里面,比如说IE弹出的那个框框,还有SQLServer.<br>虽然里面有**但是不是真正的密码。<br>即使是放了密码的密码框,在NT和2000下,直接用WM_GETTEXT是不好使的。<br>你可能什么密码也得不到。<br>需要先PostMessage(AHandle,EM_SetPassWordChar,0,0)
 
我敢肯定,密码是放在edit上的,因为我用007pwd一刷就能看到我输入的密码,<br>但我用WM_GETTEXT取到的只是一个“*”号。我要求在WIN9X系统上能取到就行。
 
007pwd哪里有,弄个下来玩玩。<br>
 
哎呀,,兄台,,,,007pwd能看到密码,,不一定是保存在edit上的塞,可能是从edit上<br>输入过的密码塞,,,,因为密码可能是粘贴过去的,也可能是键盘输入的,所以,你不能<br>只用WM_GETTEXT塞,,,用键盘钩子可以把所有敲过的键都抓到,,,,,
 
//试试这个吧,我从别人那里看来了<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var<br>&nbsp; Pos &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : TPoint;<br>&nbsp; Handle &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: HWND;<br>&nbsp; Buf &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : array[0..1024] of Char;<br>&nbsp; passmark &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: Integer;<br>begin<br>&nbsp; GetCursorPos(Pos);<br>&nbsp; Handle := WindowFromPoint(Pos);<br>&nbsp; GetClassName(Handle, Buf, 1024);<br>&nbsp; passmark := SendMessage(Handle, EM_GETPASSWORDCHAR, 0, 0);<br>&nbsp; if passmark &lt;&gt; 0 then<br>&nbsp; begin<br>&nbsp; &nbsp; postmessage(Handle, EM_SETPASSWORDCHAR, 0, 0);<br>&nbsp; &nbsp; SendMessage(Handle, WM_GETTEXT, 1024, Integer(@Buf));<br>&nbsp; &nbsp; postmessage(Handle, EM_SETPASSWORDCHAR, wparam(ord('*')), 0);<br>&nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; SendMessage(Handle, WM_GETTEXT, 1024, Integer(@buf));<br>&nbsp; Edit1.Text := Buf;<br><br>end;<br>
 
楼上,你的方法不一定总行的,因为这样得到的handle有可能是不正确地。<br>你可以试试能否看共享的密码,看不料得把!<br>比较好的方法是用EnumChildWindows美举鼠标下窗口的所有子窗口,并判断<br>是否在鼠标下,这样才能得到正确地handle,在发送WM_GETTEXT,才能得到<br>密码。<br>至于在2000下看密码,[red]听说[/red]2000要判断发送WM_GETTEXT的程序数否合消息的接受程序<br>在同一县城中,在决定是否返回密码,所以只要些个hook,把发消息的函数写进hook dll<br>中就可在2000下取得别的程序的密码。只是听说我没试过。
 
多人接受答案了。
 
顶部