VC编程——QQ连连看外挂

以下转载至本人QQ空间。如有雷同,纯属巧合。

 

连连看有很多种,比如网页的连连看、水晶连连看等,对于不同的连连看需要量身订做外挂。

下面看一下效果图,你自然知道是哪款游戏的连连看。




一、参考资料

郁金香老师的VC外挂教程的初级篇——前4、5课的视频教程可以免费观看,后面要收费,但是可以下到源代码,既然源代码都有了,对于一个程序员来说,一切就变得简单了。

http://www.yjxsoft.net/VC++jc.html

二、编写原因

既然人家都有了源代码,为什么我还要自己编写一个呢?原因如下:

1、郁金香老师也是教大家通过读取内存的方式来查找连连看方块阵列的基址,因此存在游戏版本及操作系统的问题。郁金香当时连连看的版本的基址和现在连连看的基址已经不是同一个,因此他的游戏源代码已经不能适用。需要从新通过CE(Cheat Engine)查找,方法正好在郁金香视频教程免费的那部分里面可以看到。

2、只要改一下郁金香老师里面的那个基址就可以了,但是他写的那个外挂,太霸道了,还能自动挂机,自动开始,见到连连看就秒杀,太过于“血腥”。

3、他的外挂不好的地方在于需要点击外挂窗口上“秒杀”按钮,我改了一下,通过RegisterHotKey的方式申请了windows系统热键,可以使用快捷键方式,按一下快捷键就根据算法消掉一组,一直按着不放就会一直消掉,相当于秒杀的效果,这样还可以玩一下再按一下让人感觉不到外挂的存在。

三、实现方法

1. 快捷键使用(HotKey注册方法)

1)建立MFC基于对话框的工程,创建OnCreate和OnDestroy事件函数

2)在OnCreate中或者OnInitDialog中添加以下代码

RegisterHotKey(m_hWnd,1101,0, VK_F11);  //注册申请F11 

RegisterHotKey(m_hWnd,1102,0, VK_F10);     //注册申请F10

//以上1101和1102是自己定义的,但是不能与MFC系统产生的控件相同,否则可能出错。

3)在OnDestroy中取消热键,退出程序就会中止快捷键

UnregisterHotKey( m_hWnd, 1101);
 UnregisterHotKey( m_hWnd, 1102);

4)在h头文件的类里面创建热键回调函数

LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

5)在cpp的消息映射中添加ON_MESSAGE(WM_HOTKEY,OnHotKey),这是MFC的消息机制

BEGIN_MESSAGE_MAP(CGameLLKDlg, CDialog)
 //{{AFX_MSG_MAP(CGameLLKDlg)
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()

6)创建OnHotKey函数,在该函数中完成外挂代码

2.主代码

LRESULT   CGameLLKDlg::OnHotKey(WPARAM   wParam,LPARAM   lParam) 

{

POINT p;
 bEnableDebugPriv();  //提升权限
 hwnd  = ::FindWindow(NULL, "QQ游戏 - 连连看角色版");  //这个是VC6.0的调用方法
 DWORD hProcessId;     
 byte chessdata[11][19];
 RECT r1;
 ::GetWindowThreadProcessId(hwnd, &hProcessId);   //得到窗口进程
 ::GetWindowRect(hwnd,&r1); //得到窗口大小
 HANDLE processH = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, hProcessId);    //打开进程 

 DWORD byread;
 LPCVOID pbase=(LPCVOID)0x0012A444; //XP下棋盘数据基址
 if(wParam == 1102)    //判断是否是Win7
 {
  pbase=(LPCVOID)0x0012A480;; //Win7下棋盘数据基址
 }
 LPVOID  nbuffer=(LPVOID)&chessdata;    //存放棋盘数据
 ::ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);

 ClearPiar();    //这个函数是郁金香老师教程里面的代码,作用是消除其中一对方块


 ::CloseHandle(processH);
 return  0;

}

3. 权限提升函数bEnableDebugPriv();

bool CGameLLKDlg::bEnableDebugPriv()
{
 HANDLE hToken;
 LUID sedebugnameValue;
 TOKEN_PRIVILEGES tkp;
 
 if (!OpenProcessToken(GetCurrentProcess(),
  TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
  return false;
 }
 if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue)) {
  CloseHandle(hToken);
  return false;
 }
 tkp.PrivilegeCount = 1;
 tkp.Privileges[0].Luid = sedebugnameValue;
 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
 if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL)) {
  CloseHandle(hToken);
  return false;
 }
 return true;
}

4. ClearPair函数,这个函数是消除方块的算法函数,这里就不引用了,郁金香老师的教程里面有,也可以自己写。就是将数组里面相等而且满足界面上折两下以内能达到的方格清除。

四、操作及外挂缺陷

1. 在XP下每按F11一次可消掉一对方格,在win7下需要按F10,这个是由申请的系统热键及代码判断决定的

2. 可在OnInitDialog里面加上ShowWindow(SW_MINIMIZE)实现开机最小化

3.由于是读内存,因此跟之前的扫雷外挂一样,根据该游戏的版本及操作系统而决定内存的基址,因此只要游戏开发厂商一旦更改软件版本就很有可能造成该外挂无法使用,呵呵...对于我而言也就是用CE再找一次而已,总之,没有能够实现万能就是它的缺陷、

4.游戏全局内存分配还与操作系统有关,本外挂仅支持32位下的XP和Win7两个系统,其它的也得从新找基址,只要找到改一下基址就OK。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程安排,暂定,有可能会实时修改 编程语言,VC++6.0 工具主要为(OD1.1,CE5.4) 预计平均3天左右更新一课 大家好,我是郁金香老师:QQ150330575 欢迎大家参加梅州技术 VC++外挂编程VIP培训班。 在接下来的一段时间将由我和大家一起学习游戏外挂的分析,制作。 课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的调mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用技巧(如硬件断点,条件断点,内存断点。 常用汇编指令与对应高级语言的转换。 游戏功能CALL概念 找第一个功能CALL 外挂框架的构建(通用) 进阶篇内容:分析游戏内部数据,分析常用功能CALL 游戏数据实践找各种功能CALL(如打怪,选怪,物品使用,技能栏之类)及相应的代码编写 高级篇内容:编写完整外挂 完成一个相对完整的外挂,实现 自动挂机,打怪,存放物品之类的功能 1 入门篇.以《QQ连连看为例》 1.1、一个最简单的外挂 1.1.1、游戏数据分析(SPY++) 1.1.1、游戏窗口数据分析(SPY++) a、取得窗口相对坐标 b、读出游戏窗口信息GetWindowRect c、移动鼠标指针SetCursorPos 1.1.2 用VC++写个最简单的外挂(实现游戏开局) a、鼠拟鼠标单击mouse_event b、鼠标指针移动还原 c、集成到startgame函数里 1.2、用CE查找棋盘数据 1.2.1、数据类型:Bit,Byte,Word,Dword 、用CE查找坐位号; 1.2.2、用CE查出4个棋盘基址; 1.3、用模拟技术编制外挂 1.3.1 模拟鼠标点击实现 交换棋子 1.3.2 把所有功能集成封装到 函数里 1.3.3 利用棋盘数据 ,模拟实现下棋功能 1.3.4 编写完整外挂,界面美化 1.4、游戏加速.去掉对动画效果.非HOOK 1.4.1:用OD找出 动画延时代码 1.4.2:写代码去掉延时,实现游戏加速 2 中级篇 以热血江湖为例 2.1、分析前的准备..CALL简介: 2.1.1、CALL调用示例分析.远程代码注入器 2.1.2、调试工具OD简介,血值,魔力值,坐标偏移; 2.1.3、游戏基址概念; 2.1.4、常用汇编指令详解 2.1.5、内联汇编编程实例 2.2、游戏分析利器OD(OllyDbg) 2.2.1、分析角色基址 2.2.2、找打坐CALL 2.2.3、读出角色当前血值 2.2.4、远程注入代码,调用打坐CALL; 2.2.5、实例分析:找技能栏对象数组基址+偏移: 2.2.6: 拦截F1-F8功能CALL 2.3、外挂框架构建 2.3.1、DLL动态链接库构建,与调用 2.3.2、API与回调函数 2.3.3、DLL中构建窗口 2.4、用OD分析游戏功能CALL.《热血江湖》为例:主要是找CALL 2.4.1、选怪CALL 2.4.2、找游戏物品背包的基址+偏移 2.4.3、 吃红药(补血)CALL 2.4.4、 吃蓝(补魔)CALL 2.4.5、 技能CALL1 2.4.6、技能CALL2 2.4.7、所有技能CALL 2.4.8、捡物CALL 2.4.9、所有动作CALL 3、进阶篇 主要讲功能CALL的参数分析 汇编浮点指令/浮点运行/浮点数整数转换/汇编里的指针 3.1、喊话功能 3.2、走路 3.3、 怪物过滤 3.3.1、怪物属性分析 3.3.2、怪物列表关键代码分析 3.3.3、怪物列表基址+大小 3.3.4、怪物列表编写代码 3.3.5、怪物过滤 3.4、 物品过滤 3.4.1、物品属性分析 3.4.2、物品列表关键代码分析 3.4.3、找出物品列表基址+偏移 3.4.4、物品过滤(编程读出物品列表数据) 3.5、 组队相关 3.5.1、 玩家列表 3.5.2、 组队功能 3.5.3、 离队功能 3.6、购物/售物 3.6.1、与NPC对话框 3.6.2、打开购物/售物对话框 3.6.3、购物功能 3.6.4、售物功能 3.7、 摆摊.开店 a、开店CALL参数分析 b、写代码测试 4、高级篇 4.1、编写完整的外挂 4.2、游戏更新后的外挂更新 4.3、脚本功能 4.4、游戏多开实现 4.5、盗号的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值