您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:44 来源:vckbase.com

本文章共3025字,分2页,当前第1页,快速翻页:
 

更改屏幕显示数据的作弊程序
——
再谈 Win2K 下的 API 拦截

作者:欧胜军

下载源代码
逆风编程精品

前言
  本文(其实是随笔)和实例代码描述的内容主要包括:API拦截,消息钩子,枚举子窗体,注册系统热键。其中消息钩子、API拦截、枚举子窗体实现代码在dll中,注册系统热键代码实现在测试exe中,另外exe代码段还涉及自定义消息和系统栏图标。希望对你有用。
  一年过去了,仍然是老样子——为生活而奔波、为money而忙碌。好在身体还蛮健康,吃得好,睡得香:-)但愿新的一年里腰包会鼓一些。今天整理硬盘,发现了这些代码,回想当初开始写的时候好像还在 VCKBASE 论坛里提出过一些问题,也得到了论坛很多朋友的热心帮助,在此感谢。本来想好好的写一下心得,特别是能让VC初学者学到一些东西。但自己语文功底太差,就只能想到哪写到哪了。希望你边品茶,边上网,一手聊天,一手回帖,左眼看PP,右眼能坚持看完下面的这些方块字。
  写这个程序的来由:最初由于客户的需求不是很明显,只是说把他的一个数据库程序的数据作一个临时性的欺骗,以应付检查(谁检查就不知道了,哈,让我写作弊程序呢,考我呐),唯一的要求是不更改真实的数据。我其实比较头疼数据库,就想不研究他的数据库结构了,心想采用一个比较懒的办法实现就行了。9月份的时候我也挺闲的,在网上狂搜了一通之后,基本就决定用屏幕取词的方式来做了。就是截获显示到屏幕上的数据,只要是数字类型的,就乘以一个基数,然后把算好的数据回写到屏幕上。其实这个屏幕取词的技术网上早就公开了,我也刚好想顺便练练手。写得差不多的时候,吐血的时候也就到了,客户要求除了临时欺骗之外,还要把显示的数据当场用原来程序上的打印按钮打印出来。我傻眼了,所以也就废弃了这种方法,吐了一通血、憋了一通气、老老实实的研究了原程序的数据库结构,还好是 SQL Server 2K,以前弄过,终于赶在检查之前交了活。
一不小心就说了这么多废话。好了,转到正题。下面分别道来:

拦截API(或者说截获API 反正一个意思)
  先说说截获API了,在HOOKAPI.h和cpp文件中,这个是繁体版本。网上流行很多个版本,我觉得还是这个比较简洁一点(简单万岁嘛)。原作者不知道是台湾还是香港的,注释用的BIG5码。截获API一般就几个步骤:

  1. 获得函数地址(GetProcAddress),取得被拦截的函数地址和要替代这个被拦截的函数的地址(也就是拦截后要处理的函数);
  2. 形成JMP指令(__asm),准备避开被拦截的函数跳转到处理函数直接处理;
  3. 设置内存可写(VirtualProtect),跳转后的函数执行;
  4. 记得恢复内存。

  网上关于API拦截的教程很多,反正我也说不清楚就不多说了。其实我的理解很简单,就是想办法打开老板办公室的们、潜入、然后替换奖金单、然后关门、走人……就这么简单。注意点有三个:一个就是原函数的地址,在哪个dll中,别查错了;一个就是替换函数的参数,必须遵照游戏规则,该什么类型就什么类型;另外一个就是内存的读写顺序,不能漏也不能反。具体可以参考HookAPI的代码段,这里就不帖了。

钩子(Hook)
  关于消息钩子,其实就两句话:SetWindowsHookEx ,UnhookWindowsHookEx ,装载钩子和卸载钩子,不过也就这两句话,学写钩子的时候,折腾了好一阵子。给初学者一个建议:理解瘟到死的消息机制,暂时放下MFC,尝试写至少一个SDK程序,动手写之前,好好看看MSDN,很多问题都可以在这里得到答案。SetWindowsHookEx有四个参数,主要就是注意1和4这两个参数,第一个参数建议少用WH_CALLWNDPROC 除非必须这么做。一般情况下,有消息,键盘和鼠标钩子就够用了,当然特殊情况除外。
 

本文章更多内容1 - 2 - 下一页>>
相关文章

通过串口收发短消息(上)
C 程序的外部变量与函数
如何用代码动态添加控件
一个关于#include的问题
使用免费界面换肤软件 USkin
把 C# 语言开发的控件内嵌在网页里面
支持数据项查找功能的树控制(CTreeCtrl)类
QQ魔法表情实现原理
介绍一种数据库远程备份方案
Windows CE下驱动开发基础
在VC中使用 Flash 美化你的程序
用鼠标手势动作来发送命令
事件编程(二)
浅谈PDFlib中文输出(四)PDFlib 接收的几种
后缀表达式求值及校验
用ATL开发复合控件
关于 IDispatch 接口的 LPDispatch 属性的实
获得 Win32 窗口句柄的更好的方法
从 ADO 迁移到 ADO.NET(一)
利用VC++开发ASP图像处理组件(二)

相关评论


本文章所属分类:首页 VC++

  热门关键字: