| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 193 人关注过本帖
标题:关于钩子的疑问!SOS
收藏  订阅  推荐  打印 
kofsos
Rank: 1
等级:新手上路
帖子:26
积分:372
注册:2007-5-5
关于钩子的疑问!SOS

SOS!为什么我的钩子重是跳不到他的子程序段!!钩子安装没错!但是跟踪的时候钩子安装完了就直接跳出DLL了根本不执行子程序编译OK但是运行没效果........
#include "stdafx.h"
#include "stdio.h"

typedef  BOOL (*YRDLL)();

typedef BOOL (*StopHook)();
int main(int argc, char* argv[])
{   
    BOOL k;
HMODULE HOOKDLL;

HWND H;
   
//键盘记录的一块
if(NULL!=(H=FindWindow(0,"QQ"))){
  if(NULL==(HOOKDLL=LoadLibrary("yr.dll")
   )){
   printf("DLL载入内存出错\n");//测试用
   Sleep(10000);
   return 0;
  }
  //导出函数导出地址
  StartHook HOOKMAIN=(StartHook)GetProcAddress(HOOKDLL,"StartHook");
  StopHook deldll=(StopHook)GetProcAddress(HOOKDLL,"StopHook");
  
  if(NULL==HOOKMAIN){
   printf("导出函数导出地址出错!\n");//测试用
   Sleep(1000);
   return 0;
  }
  //调用钩子函数
  k=HOOKMAIN();
  if(false==k){
   printf("DLL安装出错!\n");
   deldll();
   Sleep(10000);
   return 0;
  }
  for(;;)
  {
  Sleep(10000);
  }
}

return 0;
}
小弟初学请大侠解惑!大哥们我弄了2天了......

[ 本帖最后由 kofsos 于 2008-9-11 02:47 编辑 ]
搜索更多相关主题的帖子: SOS  疑问  钩子  
2008-9-11 02:27
kofsos
Rank: 1
等级:新手上路
帖子:26
积分:372
注册:2007-5-5

以下是DLL部分中有保留!!!!
#include "stdafx.h"
#include <stdio.h>
HINSTANCE g_hInstance = NULL;
HHOOK  Kg_hHook = NULL;   


BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    //得到dll模块句柄
    g_hInstance = (HINSTANCE)hModule;
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        break;
    case DLL_THREAD_ATTACH:
        break;
    case DLL_PROCESS_DETACH:
    case DLL_THREAD_DETACH:
        if (Kg_hHook != NULL) UnhookWindowsHookEx(Kg_hHook);
        break;
    }
    return TRUE;
}

//钩子子程
LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if(nCode < 0 )
        return CallNextHookEx(Kg_hHook, nCode, wParam, lParam);
    //(中间为功能部分不能执行...)
    return CallNextHookEx(Kg_hHook, nCode, wParam, lParam);
}


BOOL StartHook()
{
    if (Kg_hHook!=NULL)
        return FALSE;
    //安装钩子
    Kg_hHook = SetWindowsHookEx(WH_GETMESSAGE, KeyHookProc, g_hInstance, NULL);
    return TRUE;  //跟到这里时就直接回main了没有去KeyHookProc郁闷!我还是不理解是怎么调用怎么调用钩子子程的..
}



BOOL StopHook()
{
    if (Kg_hHook != NULL)
    {
        if(!UnhookWindowsHookEx(Kg_hHook))
            return FALSE;
        Kg_hHook = NULL;
    }
    return TRUE;
}
大哥些帮帮忙....
.......
睡觉先..希望起来有人帮忙....

[ 本帖最后由 kofsos 于 2008-9-11 02:57 编辑 ]
2008-9-11 02:33
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:贵宾
威望:12
帖子:2523
积分:26707
注册:2007-11-16

你在Proc里面第一行放个写日志的,看看有没有日志生成。
如果有,就是你那个nCode<0的问题了。

如果没有,在Start和Stop这个地方中断,检查所有的变量的值。

VC是可以跨DLL调试的。

要学会自己Debug。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-9-11 10:17
kofsos
Rank: 1
等级:新手上路
帖子:26
积分:372
注册:2007-5-5

可以执行了 !我把原来的DLL换了就OK了!
但是我还有个疑问!为什么子程里面的代码我中断不了但是可以执行了????
2008-9-11 13:52
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.071100 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved