来如何写一个脚本本或者外挂吧?

游戏外挂基本原理及实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
游戏外挂基本原理及实现
&&c 游戏外挂基本原理及实现
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩59页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢游戏外挂编程如何系统学习? - 知乎1328被浏览195001分享邀请回答004705E1
8B87 C0000000
MOV EAX,DWORD PTR DS:[EDI+C0]
从这句代码可以看出, 这个角色当前HP 是 EDI + 0xC0.那么你可以猜EDI就是当前人物角色指针.那么我们继续回溯这个指针是怎么来的!
MOV EDI,DWORD PTR DS:[EAX+80]
继续往上翻。 就可以得出人物血量= [[[11B0A9C]+34]+80]+0C0这里11B0A9C 是一个全局静态类如果对C++这块稍微有点了解的就知道了。 这种情况不过是类里面有类/结构 变量/指针比如说class CBns2
...........
struct strcut1
class CBns1
CBns2 CBns2_;
strcut1 strcut1_;
CBns2* pCBns2_;
strcut1* pstrcut1_;
当然也不一定是这样的。 推测罢了。// 注意, 这里的11B0A9C 是静态指针, 一般来说是不会变的。 如果会变的。 他有可能是属于DLL的全局指针, 因为win7有地址随机。 所以不能这样直接写。暂时先说这个情况// 把DLL注入到游戏的情况下, 否则只能用OpenProcess + ReadProcMemory的方式读取然后就可以写代码来实时获取人物血量了! DWORD ReadDWORD(_In_ DWORD dwAddr)
DWORD dwValue = 0;
if (!IsBadCodePtr(FARPROC(dwAddr)))
dwValue = *(DWORD*)dwAddr;
return dwValue;
DWORD WINAPI _WorkThread(LPVOID lpParm)
while (true)
DWORD dwHp = ReadDWORD(ReadDWORD(ReadDWORD(ReadDWORD(0x11B0A9C) + 0x34) + 0x80) + 0xC0);
::Sleep(100);
这里就可以获取到人物HP了! MAXHP略过, 方法同上!接下去就可以继续逆向游戏功能比如说要做一个吃药的功能。 当HP & %50的时候, 就自动吃药. 伪代码如下while(true){
::Sleep(100);
if(GetPercentHp() & 50 && ExistItem(回血道具) && GetItemCD(回血道具) == 0)
UseItem(回血道具)}……不知不觉已经凌晨2点了。 下次有机会再把上面的逆向和代码写完。记得点赞!///////////////////////////////////////////////////////////////////////////////////////继续更!接下来做找明文发包CALL。 一般游戏处理是 明文打包-&加密包-&send过程略……发包就在这里啃一瓶药. 下断点!从调用堆栈可以看到调用的函数地址然后一个一个分析参数。 首先逆向游戏是需要先对游戏的数据结构有一定了解才能模拟调用。 比如说这里的PUSH 30CALL 00CDF02E就是申请 0x30大小的内存大小嘛然后从这一层可以看到代码大概如下, 只要把0x30的参数按原来的形式填进去, 就能send那个10002从其他地方分析(略)可以得出, 1是指背包位置, 最后一个2是指类型。 2是指背包.所以如果背包第二个物品就是20002, 背包第三个物品就是30002.EAX && 0x10就是获取背包位置申请的内存是MOV ESI,EAX. 所以MOV WORD PTR DS:[ESI+10],AX就是*(WORD*)(ESI + 0x10) = 背包位置;然后接下去看看别的参数先将申请的内存清0可以看出来这个0x30大小的数组内容是这些. 基本上就是0x10是填物品位置。然后0x28和0x2C填0xFFFFFFFF然后干货就是0x18,0x1C,0x20了然后接下去继续返回上一层继续找EBX的来源会发现他其实就是[[[11F57AC]+34]+80]所以*(DWORD*)(ESI + 0x18) = [[[[11F57AC]+34]+80]+8]*(DWORD*)(ESI + 0x1C) = [[[[11F57AC]+34]+80]+C]至于0x29嘛, 刚刚准备写的时候发现算了。 就写到这里啦。 感觉下次得上欧美服或者韩服去才行。 国服真是越来越难调试了。// by 7.29想要我私信的自己先想好问什么问题好嘛?前面一大堆人我都私信过了, 结果一大堆都是连问问题都问不清的人, 剩下的一堆就是无视了我的私信。最后还有1个想让我教他的,我也教了差不多2个星期。 结果两天打渔三天晒网. 劝各位一句:只要是学编程相关的, 自认不是天才的情况下, 还是老老实实每天敲8个小时代码(看书), 不然你这样学到30岁都不知道能不能学有所成。// by 8.13我挺可以分享行业见闻的, 但是不代表也可以分享我个人的隐私, 跟其他人交流过经常都问你赚了多少钱, 搞了哪些游戏之类的……等等诸如此类的问题, 我拒绝回答敏感性的问题!// by 8.17论如何修改魔兽3的攻击为混乱攻击, 护甲是神圣护甲改成0x1:在做之前要想好'切入点',
就是游戏在哪会调用到攻击类型这个玩意呢?比如说可以在使用技能(包括普通攻击)之后, 造成伤害之前是需要获取的。但是也不好入手, 因为使用技能的判断太多了, 不好区分。又或者说。 可以这样!把鼠标放到攻击上面, 他'应该'会获取当前的攻击类型,然后转换成Text -& Update 到界面, 好, 接下去就试试这招!………………但是在获取这个攻击类型之前, 还要获取一个东西, 就是获取该英雄的Object.如何在茫茫人海里面把该英雄找出来, 因为每一个英雄都有自己的攻击种类, 所以第一件事就是要找到自身的Object指针!从人物HP入手, 买点装备丢装备来达到人物HP不断变化的目的. 最终找到了一个是HP一个是MAXHP随便掉点血就知道第一个是HP, 第二个是MAXHP.附加OD, 在HP下访问断点看上一层, 023C8C1B
edi, dword ptr [esi+248]
ESI就是人物指针. 往上回溯, 看下ESI是怎么传递的一直翻啊翻, 翻到函数头了ESI=ECX. 一般ECX或者ESI传递的, 都是this指针, 就是类指针.比如说 Class::AAA() 里面默认有一个参数传递this指针. 汇编自动生成, 但是代码省略.同理, 顺便做个记号, 因为你总不可能记0x????? 老夫记忆力不行.继续回溯!函数头继续回溯发现了这样! 很明显就是一个递归嘛!先不管这个递归, 直接先找到上一层, 因为如果你一直卡在这个递归里面, 万一你上一层也是N个递归或者说是一条死路呢? 所以你得先寻找到根源, 再做详细分析!继续函数头部下断点, 那么你会发现他的[ESP]=266E02B也就是这里. 所以要过滤这个!使用条件断点![ESP]!=266E02B总算找到Base了.那么我们再来分析这个递归好了。然后就可以动手了写代码了.首先因为这个RootBase是在DLL里面的, 因为DLL的加载地址不同, 所以解析出的Base也不同, 这个需要知道PE文件的如何计算偏移的。我就直接粗暴一点, 暴力搜索内存MFC做个注入DLL…… 不要问我为嘛用MFC,因为它是VS自带的,方便立马用。反正关了灯都一样. 随便写一个。 不要太讲究了。 编译! 注入! 测试! 结果如下:好啦。然后发现了辣么多个Base, 然后找名字!从名字入手. 这个英雄叫'虚入梦'. 顺便这个游戏是UTF-8编码(略过如何求证的).所以这个英雄名称对应的编码是=EE6A2A6打开CE, 搜一下务必要记住把 扫'只读'内存勾上然后直接一个一个修改这个Text, 看下哪个是对应的名称. 比如说手动修改一个运气好, 第一个就是。 如果没变化, 那就一个一个往下改。 记得如果不是的话, 要改回去. 再改下一个。 也可以用二分"修改"(查找)法, 直接一次性改一半. 如果不存在的话, 那肯定在另一半。时间复杂度O()=O(logn) 必须学以致用!!!接下来就是开启OD, 附加游戏.下一个访问断点.断下来了, 就是一个字符串循环复制, 返回到上一层CALLeax就是人物对象指针.
edi就是一个缓冲区, 把人物指针的Name复制到缓冲区.继续回溯这个CALL就可以用了。
PUSH 0x200
PUSH Buffer
MOV ECX, pObjectPointer
CALL 235F640
然而我在观察地址的时候, 就观察出来因为他们2个地址是一毛一样的!ECX=[ESI+238]0DDF3CC4=[14C]其实往上跟也有可能可以关联起来, 但是我懒得继续回溯了……所以……发现了有些地址可能是其他分类的吧? 分类判断懒得写了。 干脆结果就是好啦。 至少有一个是对的. 因为刚才游戏不小心被我弄崩了。我就顺便重开而且换了个游戏.暂时目的达到了. 获取到当前角色. (遍历所有英雄小兵之类的暂时没这个需求,不做)下一步就是修改攻击种类:按照刚才的步骤, 搜索显示的Text2分搜索大法好, 3次即可到达。下访问断点惯例的字符串复制操作, 返回到上一个函数!EAX就是Text, 上面的MOV EAX, [ESP+14]. 就是从上一个函数传递过来的参数. 返回去看好一下.上一层CALL看参数第一个参数第二个参数就是上上张图, 就懒得复制了第三个参数就是这个玩意。 那么我们要找的是种类。 也就是第二个参数=[ESP+0BC]然后往上分析……过程略, 多断点几次的事, 我就不废话了。 然后往上慢慢下断看参数, 直到……mov
edx, dword ptr [esp+10]mov
ecx, dword ptr [edx+2ADD3B0]接下去就找[ESP+34]既然这样, 那么我们试试.首先所以 [0F923CC4] + 1E8 = EDIEAX = 攻击种类 = [EDI + 0 * 4 + 0xF4]. (已经探明EBX=0)所以……我们换一个有混乱攻击的号就知道。 混乱攻击的时候。 这个值是=5的。所以我们改成5试试。嘿嘿!然后是不是有效。 最上面的那2张图有数值测试!顺便…… 肯定是联网无效的, 因为有数值校验的。可以单机爽一下!而且……哪怕你用各种作弊图, 暂时老夫还没发现哪个可以改攻击类型!神圣护甲同理, 我就多此一举了。还有几张图顺便贴了这篇文章到这里就结束了。 以后在这篇文章也不会更新技术类的话题了。顺便!不知哪位英语比较好? 最近学英语陷入死循环, 各种不爽背单词, 但是不背也不行。
有没有能拯救我……必有酬谢!很多人都问怎么学, 其实嘛我并非推荐你们去参加培训, 而是这里有课程目录。按照这个目录去学就好了。例如:老夫的git项目,无聊的时候写的LOL刷金币。 可以参考一下。 强调一下: 只做技术交流。 不要瞎搞!其实学习这玩意的路线,强烈建议有一定的编程基础,如果从0开始的话, 路只能 歪着走。举个例子,在业内 有个称呼叫“数据手”, 也就是只会逆向游戏的数据, 但是对于一些编程知识一窍不通, 就说简单的注入, 脚本交互,内存管理, 线程操作, 更别提外挂是一个很大的工程(我是指能刷钱,能做主线,能打副本,能做socket网络验证)。 我还记得以前在贴吧开过一个科普贴,谈到DNF所有的“变态功能”(指秒杀,倍攻等)都是利用了漏洞的原理,根本是服务器和客户端计算校验不严,或者没办法把所有伤害运算放在Server上才让你有机可乘, 但是就有“数据手”来跟我扯一些就基址+偏移 改一下就好了, 逆向一下改某段代码就好了(连Hook这样的词都说不出来), 茴字的一种写法都说不上来。学习要是带有目的性的, 要是业余爱好学习一下,不打算深造, 这样歪着学习法并没有什么不妥。
并不是说所有人都要往着专业的范畴去学习, 就好像我想学习一下摄像和后期来装一波而已, 需要我从0开始学习PS,各种数码基本知识,光照的各种应用等等等吗? 你又不是想当摄影师, 搞那么多花里胡哨的。给各位想自学的人一点学习方向的建议。一般分2种, 一种是为了编程而学外挂, 一种是为了学外挂而编程。第一种就是以编程为主, 对外挂技术了解一下。 这里就不谈了, 正统道路的学习方法多得是。 我就不一一举例了。第二种方法, 我以0编程基础来举例。1:要熟悉C/C++语法, 可以做一些像模像样的小玩意, 比如说控制台下的XX管理系统, 读写文件, 什么银行存取金币系统之类这样的小玩意。
这部分后面就要应用在你的外挂控制台上如:2:学习完上面的,我个人建议开始学习socket,
功能大概就要激活CDK,校验CDK的时间, 用长连接。 大概就是生成CDK, 把CDK保存到Server, 然后Client激活CDK要去Server校验, 并且用心跳来保持连接。 这一步后面要应用到 防破解, 收费系统, 还有一些比如说组队, 交易, 邮寄都可以丢到Server上完成, 比如说不同电脑下, 如何让他们同一个大区同一个地图下如何分配组队和交易, 而且还能进一步锻炼你的编程能力。 建议要用非阻塞的异步socket。(用HTTP来做验证的可以忽略这一步)3: 这个时候可以做点有意思的, 比如说先学会用模拟按键+识图 去做某个游戏的登录。就用LOL来举例子, 可以做LOL的客户端登录。 用模拟按键+鼠标操作, 然后用识图来判断当前在哪个步骤了。 图片识别可以用OpenCv库,然后如果出现验证码, 可以用网上那种打码系统,QQ游戏的验证码挺便宜的, 最多几分钱一次。如:4: 这个时候你可以写一个控制台(Console模式), 保存帐号, 读取帐号, 开始登录。 如何判断到游戏登录完毕, 就登录下一个帐号, 保存登录失败(如密码错误)的日志, 操作完毕的日志。 如何再下一次启动的时候忽略已经成功的帐号。 中间的种种操作, 自己做一遍就知道了。如:5: 这个时候建议把Console模式的控制台改成UI, UI可以用C#来做,也可以用MFC/QT来做, 用哪个语言来做无所谓,
学习一下多线程的操作, 如何刷新数据到UI, 如何从Server查询CDK返回到控制台, 比如说剩余时间对吧.6:这个时候就开始学习简单的汇编指令, 学习如何使用调试器, 怎么去逆向游戏的人物属性, 把基本的HP,MP,攻击力之类的逆向出来, 然后显示到控制台, 这里需要比较多的API知识, 比如如何注入DLL到游戏, 比如运用指针读取游戏的数据. 这一步做完你已经可以自己写一个UI注入到游戏里面, 显示出人物各种属性,周围怪物,Npc。 你也需要一些基本的数据结构知识,比如链表,二叉树,数组,std::vector,std::string在汇编的表现形式。7:可以逆向游戏的功能, 找到游戏的明文组包函数, 然后下断后就能断下绝大部分游戏的功能, 然后想办法模拟调用, 你就可以做到吃药, 释放技能,交接任务。 这一步我就不多说了,反正完成了几乎是搞完了。8: 把所有功能和UI控制台和Server端关联起来。 就是一个完整版的挂了。 下面就是一步一步添加更多的功能了,要考虑用脚本去写主线了,要考虑框架的问题了,要学习如何反反调试,如何多开,防检测,过游戏保护,做资源优化,写导航寻路等等……当你都学完之后,那么恭喜你,你已经成功获得"外挂全能大神"的称号了。873256 条评论分享收藏感谢收起7311 条评论分享收藏感谢收起查看更多回答3 个回答被折叠()脚本与外挂的区别
什么是脚本
什么是外挂
什么是辅助
也不能说这是权威解释,大致意思吧,大家看看!
大致类似游戏第三方插件
&&&&&&如魔兽世界的大脚
梦幻西游的工具箱&等等 不修改游戏本质数据,提供帮助 演算 题库
等不影响游戏正常运营的范围内软件!如经验计算器,宠物&人物属性计算器&技能冷却计算器&
跑商跑图时间查询!&&摆摊卖东西受益查询等!本软件游戏运营商不反对,且提倡!方便了官方的数据总结!
模拟键盘鼠标,不修改游戏数据,只是达到解除枯燥的操作!最早的脚本,只是提供半自动操作,如今随着工具的越来越强大,软件的智能化,让脚本又提升了一个新的台阶
脚本的最初定义是半自动或部分自动!如游戏长时间挂机会掉线,用脚本来自己跳跃或者走路来达到挂机目的
目前完美脚本能和普通的外挂并列&&
游戏公司不反对也不提倡,偶尔严打一下!{变态类型或者添加了非法操作}
外挂分 普通 变态 和脱机
普通类似于脚本,脚本是通过 字 图 色
坐标来实现自动化操作&& 外挂是通过内存 基址来达到目的
变态挂,修改数据,抓包等直接修改或变相修改游戏数据!
脱机,完全脱离游戏登陆器,完全靠抓包和post来直接修改游戏数据,也有伪脱机和完全脱机
这类游戏公司严打,破坏了游戏平衡,
结论很明显,辅助就是给人用的,基本是数据处理,操作还得靠自己
&&&&&&&&&&&
脚本是半智能,完全依靠也容易呗游戏公司查询
&&&&&&&&&&&
外挂,完全不考虑,基本属于非法或违禁
如何打造脚本:
目前制作脚本类的&&
大多三个软件&& 按键精灵 易语言 和VB
按键精灵基于VB开发,看个人能力& 按键精灵比VB要简单10倍左右
剩下按键精灵VS易语言
两者不相上下,易语言无脚本语言,大多来自第三方模块和动态链接库!易语言做外挂比脚本要简单!
留下广告位置 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
&&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 天骥脚本或者并且 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信