网络游戏出于对控制输入速度的和反外挂的目的,对于鼠标键盘的输入越过了消息传递等正常的途径层
次,所以一般的常用如下控制鼠标键盘的API函数
::SetCursorPos(pEvent->xPos, pEvent->yPos);
::SendInput(1, &Input, sizeof(INPUT));
::PostMessage(hwnd,WM_KEYDOWN, VK_ESC ,0L); //发送ESC按下的键盘消息
是无法实现目的的,解决问题的方法只有越过应用层面,从系统驱动层解决问题,目前的方法主要有
1.分别写个鼠标和键盘驱动设备,但在在系统设备管理器中出现一个鼠标和一个键盘设备
2.用winio软件包直接控制鼠标键盘硬件端口,这种方法要求本身的硬件鼠标不可以动,否则就鼠标满天
飞,只有重启电脑了
结合外挂的特点和以上方法优缺点,本人在底层修改window底层驱动,鼠标键盘驱动合二为一可以同时
控制鼠标键盘,可以打开和关闭屏蔽物理鼠标,可以过滤键盘信息,并且在系统设备管理器中也看不到
设备显示,即隐蔽又高效,有需要的朋友可以联系,
qq76838567 (验证信息请注明”鼠标“)
该驱动为自己开发外挂而制作,当时也考虑购买但是没有人卖,无法买到,所以今天提供给大家,
该驱动完全为外挂的高要求而制作测试使用验证成熟,可以玩转鼠标键盘摆脱API函数的限制,做出
各种复杂的鼠标键盘动作,明白人一看下面的鼠标键盘控制数据结构就明白了。。总之windows
APi可以干的事情,它都可以干,它可以做的动作windows APi就不行了
我提供的鼠标键盘驱动最大的特点就是:
1.虚拟鼠标和虚拟键盘一个驱动里完成
2.在设备管理器里隐藏掉所虚拟的鼠标键盘设备
3.通过了NP和Xtrap测试
注意:本驱动只针对有实力的游戏外挂玩家,2000元一套,请其他无聊的、没有能力购买的、不懂的朋友不要联系了最近很多找我购买的朋友老是和我说看雪论坛里有鼠标键盘驱动下载
对次我做如下说明:
1,这个所谓的驱动最早是在http://download.csdn.net/down/719428/ylwnet 贴出的,
看雪只是转帖。这个我也下载过,没有源码,我跟踪了他的api,他的鼠标控制结构不是标准的MOUSE_INPUT_DATA 数据结构,那么你以后的鼠标动作就受限制了,并且因为驱动的特点,一旦给了你演示测试程序,就等于给你了驱动,所以作者给的鼠标驱动测试程序,只有鼠标的点击动作,没有移动的动作,否则我跟踪了后就可以直接用了,他的利益就无法保障了,后来我找到这个人,他也是卖的
2,这个驱动不符合我的外挂的要求,所以我就自己写了一个,其实我是做外挂赚钱的,我天生就不是个勤快人,要是有的免费的午餐,我不吃我就是傻子,试想想如果这个驱动是好用、有源码、不要钱,那么那些和我说这个驱动的朋友们还会和我说这个东西吗,他们就会下载了自己用去了,那里会来和我浪费口水,其实大家都知道说这个是为了压价。
3,有些朋友反复和我强调,他自己完全有能力写这个驱动,都很傲慢的和我两句话就886,然后再换一个qq和我反复压价,理论上说一个人完全有能力可以自己种地、自己织布、自己盖房子住、自己打棺材(好像无法把自己埋了,哈哈)等等,但是没有必要也没有人这样什么都自己做的,现在是协作的社会,现在没有那个产品完全是自己的原创,都或多或少的使用了其他人的东西,我敢打赌如果那一天买不到windows盗版了,这些朋友会威胁microsoft“我完全有能力、有决心、有希望自己写个windows,你想好了,给个价把。。。。”,当然我毫不怀疑这些朋友可以自己写出这个驱动,我用我的一点愚钝的能力赚点小钱,而这些朋友是用他们无伦的聪明才智做成了威胁和尔虞我诈的武器使用,不知道是我还是这些朋友把脑子用歪了?我很郁闷、很彷徨
4,最近被各种砍价的,所谓讨教的朋友搞的头晕,我不是个做生意的材料,也不是个什么教师,所以没有诚信购买的朋友就不要找我了,拜托了
控制接口如下:typedef struct MOUSE_INPUT_DATA {
USHORT UnitId;
USHORT Flags;
union {
ULONG Buttons;
struct {
USHORT ButtonFlags;
USHORT ButtonData;
};
};
ULONG RawButtons;
LONG LastX;
LONG LastY;
ULONG ExtraInformation;
} MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA;
typedef struct _KEYBOARD_INPUT_DATA {
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
long Move_Ext(long x, long y)
{
MOUSE_INPUT_DATA INPUT_DATA ;
UCHAR OutputBuffer[10];
DWORD dwOutput;
BOOL bRet;
if (hDevice == INVALID_HANDLE_VALUE) return 0;
memset(&INPUT_DATA,0,sizeof(MOUSE_INPUT_DATA));
INPUT_DATA.Flags=MOUSE_MOVE_RELATIVE;
INPUT_DATA.LastX=x;
INPUT_DATA.LastY=y;
bRet = DeviceIoControl(hDevice, IOCTL_Mouse, (char*)&INPUT_DATA, sizeof(MOUSE_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL);
return bRet;
}
long Click_EXT(char Action)
{
MOUSE_INPUT_DATA INPUT_DATA ;
UCHAR OutputBuffer[10];
DWORD dwOutput;
BOOL bRet;
if (hDevice == INVALID_HANDLE_VALUE) return 0;
memset(&INPUT_DATA,0,sizeof(MOUSE_INPUT_DATA));
INPUT_DATA.Flags=MOUSE_MOVE_RELATIVE;
INPUT_DATA.ButtonFlags=Action;
bRet = DeviceIoControl(hDevice, IOCTL_Mouse, (char*)&INPUT_DATA, sizeof(MOUSE_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL);
return bRet;
}
long KeyBoard(long MakeCode, long Flags)
{
KEYBOARD_INPUT_DATA INPUT_DATA ;
UCHAR OutputBuffer[10];
DWORD dwOutput;
BOOL bRet;
if (hDevice == INVALID_HANDLE_VALUE) return 0;
memset(&INPUT_DATA,0,sizeof(KEYBOARD_INPUT_DATA));
INPUT_DATA.Flags=Flags;
INPUT_DATA.MakeCode=MakeCode;
bRet = DeviceIoControl(hDevice, IOCTL_KeyBoard, (char*)&INPUT_DATA, sizeof(KEYBOARD_INPUT_DATA), &OutputBuffer, 10, &dwOutput, NULL);
return bRet;
}
// 扫描码
#define VKK_ESC 0x011b //ESC
#define VKK_F1 0x3b00 //F1
#define VKK_F2 0x3c00 //F2
#define VKK_F3 0x3d00 //F3
#define VKK_F4 0x3e00 //F4
#define VKK_F5 0x3f00 //F5
#define VKK_F6 0x4000 //F6
#define VKK_F7 0x4100 //F7
#define VKK_F8 0x4200 //F8
#define VKK_F9 0x4300 //F9
#define VKK_F10 0x4400 //F10
#define VKK_~ 0x2960 //~
#define VKK_1 0x0231 //1
#define VKK_2 0x0332 //2
#define VKK_3 0x0433 //3
#define VKK_4 0x0534 //4
#define VKK_5 0x0635 //5
#define VKK_6 0x0736 //6
#define VKK_7 0x0837 //7
#define VKK_8 0x0938 //8
#define VKK_9 0x0a39 //9
#define VKK_0 0x0b30 //0
#define VKK_- 0x0c2d //-
#define VKK_= 0x0d3d //=
#define VKK_\ 0x2b5c //\
#define VKK_BackSpace 0x0e08 //退格键
#define VKK_Tab 0x0f09 //Tab
#define VKK_q 0x1071 //q
#define VKK_w 0x1177 //w
#define VKK_e 0x1265 //e
#define VKK_r 0x1372 //r
#define VKK_t 0x1474 //t
#define VKK_y 0x1579 //y
#define VKK_u 0x1675 //u
#define VKK_i 0x1769 //i
#define VKK_o 0x186f //o
#define VKK_p 0x1970 //p
#define VKK_[ 0x1a5b //[
#define VKK_] 0x1b5d //]
#define VKK_a 0x1e61 //a
#define VKK_s 0x1f73 //s
#define VKK_d 0x2064 //d
#define VKK_f 0x2166 //f
#define VKK_g 0x2267 //g
#define VKK_h 0x2368 //h
#define VKK_j 0x246a //j
#define VKK_k 0x256b //k
#define VKK_l 0x266c //l
#define VKK_; 0x273b //;
#define VKK_' 0x2827 //'
#define VKK_Enter 0x1c0d //回车
#define VKK_z 0x2c7a //z
#define VKK_x 0x2d78 //x
#define VKK_c 0x2e63 //c
#define VKK_v 0x2f76 //v
#define VKK_b 0x3062 //b
#define VKK_n 0x316e //n
#define VKK_m 0x326d //m
#define VKK_ 0x332c //
#define VKK_. 0x342e //.
#define VKK_/ 0x352f ///
#define VKK_空格键 0x3920 //空格键
#define VKK_Insert 0x5200 //Insert
#define VKK_Home 0x4700 //Home
#define VKK_Page UP 0x4900 //Page UP
#define VKK_Delete 0x5300 //Delete
#define VKK_End 0x4f00 //End
#define VKK_PageDown 0x5100 //PageDown
#define VKK_上箭头 0x4800 //上箭头
#define VKK_左箭头 0x4b00 //左箭头
#define VKK_下箭头 0x5000 //下箭头
#define VKK_右箭头 0x4d00 //右箭头
#define VKK_/ 0x352f ///
#define VKK_* 0x372a //*
#define VKK_- (注意 0x4a2d //- (注意
#define VKK_7 0x4737 //7
#define VKK_8 0x4838 //8
#define VKK_9 0x4939 //9
#define VKK_4 0x4b34 //4
#define VKK_5 0x4c35 //5
#define VKK_6 0x4d36 //6
#define VKK_+ 0x4e2b //+
#define VKK_1 0x4f31 //1
#define VKK_2 0x5032 //2
#define VKK_3 0x5133 //3
#define VKK_0 0x5230 //0
#define VKK_Del 0x532e //Del
[课程]Linux pwn 探索篇!