logo资料库

郁金香外挂教程.doc

第1页 / 共188页
第2页 / 共188页
第3页 / 共188页
第4页 / 共188页
第5页 / 共188页
第6页 / 共188页
第7页 / 共188页
第8页 / 共188页
资料共188页,剩余部分请下载后查看
课程分四个大章节 初级篇,中级篇,进阶篇,高级篇 初级篇内容:编写一个完整的,简单的外挂 C++的数据类型:Byte,Word,DWORD,int,float API函数的调 mouse_event,GetWindowRect,SetCursorPos,FindWindow,SendMessage) CE5.4工具的使用方法 中级篇内容:调试工具的使用技巧,功能CALL的概念 调试工具OD1.1的使用技巧(如硬件断点,条件断点,内存断点。 常用汇编指令与对应高级语言的转换。 游戏功能CALL概念 找第一个功能CALL 外挂框架的构建(通用) 进阶篇内容:分析游戏内部数据,分析常用功能CALL 游戏数据实践找各种功能CALL(如打怪,选怪,物品使用,技能栏 之类)及相应的代码编写 高级篇内容:编写完整外挂 完成一个相对完整的外挂,实现 自动挂机,打怪,存放物品之类 的功能 1 入门篇. 1.1、一个最简单的外挂 1.1.1、游戏窗口数据分析(SPY++) --------------------10 a、取得窗口相对坐标 b、读出游戏窗口信息GetWindowRect c、移动鼠标指针SetCursorPos 1.1.2 用VC++写个最简单的外挂(实现游戏开局)--- 12 a、鼠拟鼠标单击mouse_event b、鼠标指针移动还原 c、集成到startgame函数里 1.2、用CE查找棋盘数据 ------------------------14 1.2.1、CE中的数据类型 a、数据类型:Bit,Byte,Word,Dword,float,double b、用CE查找出坐位号; c、保存分析数据 1.2.2、编程读出坐位号; --------------------------- 15 a、远程读取进程数据 b、打开远程进程 c、读取远程进程数据 1.2.3、用CE查出棋盘基址;---------------------------16 a、找棋盘数据基址 b、分析棋盘数据结构 1
1.2.4、读出当前棋盘数据 --------------------------17 a、编程读出棋盘数据 b、棋盘数据显示出来 1.3、用模拟技术编制外挂 -------------------------------18 1.3.1 分析棋子与棋盘坐标关系 a、鼠标软件模拟,函数SendMessage b、分析窗口内棋子相对坐标X,Y c、软件模拟点击棋盘坐标x,y处的棋子 1.3.2 消掉一对棋子的算法框架 -------------------- 20 a、遍历棋盘同类型棋子配对 b、构建算法框架 1.3.3 (Check2p)大致框架(算法核心)---------------21 a、在这一对棋子间找相通路径的原理 b、(Check2p函数)框架代码 c、(CheckLine函数)检测2点是否有连通. 1.3.4 CheckLine实现 23 a、CheckLine函数实现 b、Check2p核心代码架构 1.3.5 Check2p完整代码实现 ----------------------25 a、完整的Ceheck2p代码解析 b、完善CheckLine函数 1.3.6 Click2p函数实现,单消棋子功能实现 --------33 a、完成Click2p函数 b、单消一对棋子的实现 c、修改ClearPair函数 1.3.7 挂机/秒杀/----------------------------------35 a、自动开局 b、挂机下棋 1.3.8 游戏外挂界面美化---------------------------38 a、添加进度条 b、界面调整 c、Slider控件属性设置 1.3.9 倒计时与棋子数(基址查找)--------------------40 a、查找棋子数 b、查找倒计时 c、开局标志 1.4 编写完整外挂 --------------------------------40 1.4.1 优化自动开局函数StartGame a、让游戏窗口高高在上 b、优化开局函数 1.4.2 去掉游戏倒计时限制 ---------------------- 42 a、找到计时代码 b、动态修改游戏代码(OD使用初探) c、去掉计时限制 2
1.4.3 编写完整外挂 --------------------------------44 a、功能测试 b、修改完善外挂 c、读出当前棋子数 d、秒杀实现 1.4.4 初级篇小结 ----------------------------------46 a、游戏分析小结 b、编程小结 2 中级篇 以XX3D游戏为例 2.1、分析前的准备..CALL简介:---------------------------49 2.1.1、CALL的概念(远程调用CALL) a、写个调用示例(假想游戏客户端) b、用OD找CALL,初探(用OD找出我们自己写的CALL) c、代码注入器,远程CALL调用 2.1.2、远程CALL调用代码实现-------------------------51 a、CreateRemoteThread API函数 b、无参数的远程CALL调用(代码实现) 2.1.3、调试工具OD简介(人物角色)血值,魔力值,坐标偏移;53 a、CE找出当前血值偏移 b、OD 分析出魔力值,坐标偏移 c、导出游戏关键代码 2.1.4、游戏基址概念;---------------------------------54 a、基址+偏移 概念 b、读写内存函数 参数简介 c、编程实现读出(血值,魔力值) 2.1.5、常用汇编指令详解-------------------------56 a、Mov指令的几种形式 b、汇编指与高级语言的转换 c、push指令 2.1.6、内联汇编编程实例-------------------------58 a、加法add b、减法sub c、纯汇编调用函数CALL(参数的传递) d、堆栈平衡 2.2、技能栏使用-游戏分析利器OD(OllyDbg) 2.2.1、吃金创药CALL---------------------------59 a、CE工具使用技巧 b、OD断点F2 c、分析CALL的参数 d、代码注入器测试CALL 2.2.2、编写自己的CALL测试代码61 3
a、远程分配内存空间VirtualAllocEx b、向游戏进程注入自己代码 c、远程调用《吃金创药》 2.3、DLL外挂框架构建 2.3.1、DLL动态链接库构建,与调用 ----------------62 a、建立MFC动态链接库dll b、EXE程序中调用DLL函数 2.3.2、API与回调函数64 a、键盘勾子回调函数keyProc b、安装函数SetupFun c、注入DLL至游戏进程空间 2.3.3、DLL中构建窗口 ------------------------------66 a、DLL中插入窗口资源 b、在游戏内创建DLL窗口 c、DLL内CALL代码书写(以吃红药为例) 2.4、选怪功能实现 2.4.1、找怪物列表基址---------------------------------68 a、选定怪ID b、怪物数组基址 c、怪物数组大小 2.4.2、分析怪对象属性---------------------------------70 a、怪对象ID b、怪与玩家距离 c、怪物死亡状态 2.4.3、遍历怪物列表 a、选怪关键代码 b、定位一个怪对象 c、选怪功能实现 -----------------------------71 2.4.4、选怪功能优化----------------------------------73 a、OD分析选怪功能对应代码 b、写测试代码让选定怪物血条正确显示 c、集成选怪函数到SelMon() 2.5、用OD分析游戏功能CALL.《XXXXXX》为例:主要是找CALL 2.5.1、普通攻击CALL关键代码分析75 a、更新游戏选怪基址 b、分析攻击CALL关键代码 c、汇编指令与应高级语言对照翻译 d、编程测试 2.5.2、挂机打怪功能------------------------------------75 1、更新选怪CALL地址 2、优化代码结构 3、自动选怪代码编写 4、自动打怪代码编写 5、代码测试 4
2.5.3、物品背包数组基址+偏移分析(CE+OD)--------------79 a、确定突破口 b、回溯基址 c、用OD验证 d、推导出基址+偏移公式 2.5.4 、使用指定物品 UseGoods(int index=0);-------------80 a、算法原理 b、返回物品在背包中的下标 int GetGoodsIndex(char* name); c、useGoods(GetGoodsIndex("金创药(小)"); 2.5.5、TabCtrl控件的使用(VC++基础好的可跳过)-----------------84 a、m_tab.InsertItem b、m_tab.GetCurSel() c、Create(IDD_PAG1,GetDlgItem(IDC_TAB)) 2.5.6、TabCtrl控件BUG修证(VC++基础好的可跳过)---------------85 a、修证乱码 b、修证对齐 c、局部美化(位置大小调整) 2.5.7、捡物功能分析实现---------------------------------86 a、捡物功能CALL分析 b、捡物CALL参数分析 c、找出所有动作CALL(打坐/普攻/捡物/交易/组队/走跑切换....) d、测试及封装到pickgoods()函数 2.5.8: F1-F10技能数组分析-------------------------------88 a、F1-F10技能栏数组(基址+偏移) b、F1-F10功能调用核心代码分析 2.5.9、F1-F10功能CALL---------------------------------90 a、找出真的功能CALL b、F1-F10功能CALL参数分析 c、F1-F10功能CALL测试(集成功能至GameProc.h) 3、进阶篇 主要讲功能CALL的参数分析 汇编浮点指令/浮点运行/浮点数整数转换/汇编里的指针 3.1.1、喊话功能CALL地址 -------------------------------93 a、找喊话内容地址 b、分析出关键CALL c、测试关键CALL 3.1.2、喊话功能VC++实现------------------------------------94 a、分析喊话CALL参数基址+偏移 b、汇编指令lea c、字串操作REPNZ/REPNE与SCAS d、V++代码实现 3.2.1、走路相关数据分析(为分析走路/寻路CALL做准备)----------97 5
a、查找当前角色坐标(xhy) b、查找目的地坐标(xhy)偏移+基址 c、找出相关CALL 3.2.2、走路功能CALL及相关分析-------------------------------98 a、隐藏的push指令 b、测试走路CALL c、确定功能CALL及参数 3.2.3、对找到的几个疑是CALL进行测试---------------------------100 a、分析出疑是CALL相关参数 b、对找到的CALL进行逐一测试 c、确定真正的走路CALL 3.2.4、人物走跑站状态开关分析---------------------------------102 a、走路CALL 状态开关分析 b、分析状态开关 基址+偏移 c、分析走路目的地址相关基址+偏移 3.2.5、利用分析数据 实现走路/寻路---------------------------104 a、走路功能代码实现 b、测试 c、封装到walk(x,y) d、瞬移(穿墙) 3.3、 怪物过滤 3.3.1、怪物列表关键代码分析 ------------------------- 105 a、怪物列表(分析原理) b、回溯怪物列表基址+偏移 c、取得怪物对象的公式 3.3.2、怪物属性分析 -----------------------------------107 a、怪物名 b、怪物血量 c、怪物ID d、怪物与玩家距离 e、提取特征码 3.3.3、怪物过滤的编写代码 ------------------------108 a、读出怪物列表 b、过滤掉指定怪物 c、选定特定怪物 d、过滤打怪测试 e、选中最近怪物 3.4、 物品过滤 3.4.1、物品属性分析 ---------------------------------111 a、物品ID b、物品对象 c、物品属性分析 3.4.2、物品过滤(编程读出物品列表数据)------------------112 a、读出物品列表 6
b、条件判断是否捡物(距离,物品名) c、显示出提示信息 3.4.3、捡物过滤 --------------------------------------113 a、分析捡物深层CALL b、PickID(物品ID); c、捡物过滤 d、捡物范围控制 3.4.4、游戏多开实现------------------------------------116 a、游戏防止多开的原理 b、找出本游戏多开的方法 c、测试验证 3.5、 组队相关 3.5.1、 选定指定角色------------------------------118 a、多开BUG修证 b、分析玩家属性 c、遍历玩家列表 d、选定指定玩家角色原理 e、int SelPlayEr(pchar 玩家名); 3.5.2、计算玩家间的距离(已知坐标)----------------120 a、坐标系内的点1与点2 b、2点间的距离计算公式 c、准备知识 d、planRange(int p1,int p2)函数构建 3.5.3、 组队功能123 a、更新组队动作CALL b、选定指定玩家 c、邀请指定玩家加入队伍int Invite(char* playName); 3.5.4、 离队功能 ------------------------------124 a、分析离队动作 b、逆向分析离队代码 c、初识封包 d、Rep stos [edi] e、内存中的数据与 byte,int的对应关系 f、封装离队函数void exitTeam(); 3.6、售物/购物(封包的世界) 3.6.1、售物功能封包分析---------------------------126 1、封包回溯,找未加密的封包 2、确家关键CALL 3、分析封包(物品数量,类型,位置) 4、功能测试SellGoods函数构建 3.6.2 售物封包参数来源分析----------------------128 1、数量分析 2、出售物品类型分析 7
3、出售物品在背包里的格数 4、各种数据的来源 3.6.3、编程实现出售背包指定物品-----------------132 1、遍历背包指定物品 2、出售背包第一格物品 3、出售背包第N格物品 3.6.4、完善售物功能----------------------------134 1、构建函数int FindIndex(char* name); FindIndex//用来查询指定物品名name在背包中的位置 2、垃圾物品清单 3、遍历出售所有垃圾物品SellGoods 4、移植函数到Gameproc.h 3.6.5、打开NPC购物/售物对话框-------------------137 1、打开NPC对话 2、打开NPC(买进/卖出)窗口 3、封装到int OpenNpc_buysell();测试 3.6.6、购物功能封包分析------------------------140 1、封包回溯,找未加密的封包 2、确家关键CALL 3、分析封包 4、数量分析 5、出售物品类型分析 6、功能测试 3.7、 摆摊.开店 3.7.1 开店封包分析------------------------------142 a、店名分析 b、封包参数分析 c、为TAB选项卡2 添加内容 d、不同CPP之间共享函数及变量的方法 d、写申请开店代码测试 3.7.2 开店封包(挂店物品分析)------------------145 a、分析封包 b、封包出售物品的格式分析 c、写代码测试 4、高级篇 4.0、编写相对完整的外挂 ------------------------149 4.0.1、窗口界面整理 a、常规选项卡 b、保护选项卡 c、捡物选项卡 d、喊话选项卡 4.0.2、常规选项卡-自动打怪函数构建-------------154 a、关联变量 8
分享到:
收藏