1 新建一个mfc extension dll 这个我想用VC的人都会做的事情吧–!名字叫做mydll

2 点击 文件—新建 选择文件 建立一个Header File文件 我们就暂定他的名字叫做Hook吧

3 在刚才建立的Hook.h的文件中加入复制以下的函数进去

extern “C” LRESULT CALLBACK keybordproc(int code,WPARAM wparam,LPARAM lparam); //钩子处理函数

extern “C” bool WINAPI starthook(DWORD threadID); //启动钩子

extern “C” bool WINAPI stophook();//停止钩子

4 在mydll.CPP的#include “stdafx.h”下面添加

#include “Hook.h”

#pragma data_seg(“publicdata”)

HHOOK hhook=NULL;

HINSTANCE pinstance=NULL;

#pragma data_seg()

5 找到DllMain…….在里面初始化

pinstance = hInstance;

6 同时 在mydll.CPP中找到空白的地方 复制下面的代码进去

extern “C” bool WINAPI starthook(DWORD threadID)//打开钩子函数

{

hhook=SetWindowsHookEx(WH_GETMESSAGE,keybordproc,pinstance,threadID);

if(hhook!=NULL)

return true;

else

return false;

}

extern “C” bool WINAPI stophook() //关闭钩子函数

{

UnhookWindowsHookEx(hhook);

if(hhook==NULL)

return true;

else

return false;

}

7 同样复制下面的代码进去 注意 下面的AfxMessageBox(“hhhhh”);就可以代替你所写的汇编就比如

DWORD addr = 0x0056FC80;

__asm

{

pushad

call addr

popad

}

前面的If语句就是指按下H键会发生后面的事件 我这里就是弹出一个对话框而已

extern “C” LRESULT CALLBACK keybordproc(int code,WPARAM wparam,LPARAM lparam)

{

if (code == HC_ACTION)

{

MSG *msg = (MSG *)lparam;

if (msg->message == WM_CHAR)

{

if (msg->wParam == ‘h’) AfxMessageBox(“hhhhh”);//如果收到键盘消息 为按键h 则弹出对话框

}

}

return CallNextHookEx(hhook,code,wparam,lparam);

}

8 在mydll.def文件中的EXPORTS下加入

starthook @1

stophook @2

开始编译 在Debug 里面会看到一个mydll.dll和mydll.lib

9 工程–增加到工程–新建 建立一个纯Dialog EXE 编译一下… 然后把上面Debug里面的mydll.dll和mydll.lib复制到新建的EXE

文件夹和EXE的Debug里 然后工程–设置 找到 连接 在对象/库模块 里添加mydll.lib

10 为自己的Dialog增加两个按钮 用来测试是否注入成功 里面的函数如下

void CWULINtestDlg::OnButton1()

{

HWND mhwnd = ::FindWindow(NULL,“春秋Q传Online(版本0.6.17)”);

if(mhwnd==0){

AfxMessageBox(“error”);

}

else{

DWORD threadid = GetWindowThreadProcessId(mhwnd,NULL);

starthook(threadid);//打开钩子

}

}

void CWULINtestDlg::OnButton2()

{

HWND     hwnd=::FindWindow(NULL,“春秋Q传Online(版本0.6.17)”);

if(hwnd==0)

AfxMessageBox(“error”);

else{

::PostMessage(hwnd,WM_KEYDOWN,72,0);//72是h的键值

}

}

11 先按下注入的按键 然后按下令一个 看看是不是弹出了一个对话框 同时 你也可以把 dll里的函数 改成你想要得CALL 从而达到我们注入的目的

posted on 2011-05-24 20:00  °ι 、曲 终  阅读(1464)  评论(1编辑  收藏  举报