教你如何编写游戏外挂

0 个评论
一、先说一下写一个外挂需要什么条件 1、熟练的C语言知识 目前的外挂大部分都是用BC或者是vc写的,拥有熟练的C语言知识是写外挂的基本条件 2、具有很强的汇编基础 一般游戏都不可能有原代码的,必须靠反汇编或者跟踪的办法来探索其中的机理 ,所以有强的汇编基础也是必不可少的条件 3、熟练掌握跟踪和调试的工具 有了上面2个条件后,掌握一些工具也是很有必要的 跟踪的工具,softice当然是不二之选,至于反汇编的工具,我推荐用IDA PRO 这个工具反汇编出来的代码结构清晰,非常好读 如果你不具有上面的条件,还是先把基础打好,再来写外挂吧,一分耕耘,一分收获,天下没有白掉的馅饼的 二、写外挂面临的基本技术问题 1、修改进程的执行代码 要修改进程的执行代码,要先取得进程的ID,如果是由外挂程序启动,返回值里就有进程ID,如果不是的话, 需要用findwindow找到窗口句柄,再用GetWindowProcessID取得进程ID,取得进程ID以后,就可以用 writeprocessmemory来修改进程的执行代码了,使程序按照我们的意愿来执行,石器外挂里的不遇敌、寸步遇敌 就是用这样的方法来实现的 2、截获外挂发送和接收的封包 除了通过修改代码来实现的功能以外,很多的功能都是通过修改封包来实现的,要修改封包,首先要能截获它。 第一步是要跟踪出发和收的位置,至于怎么跟踪,我以后会提到,找到位置以后,有2个办法,一是在那个位置加一 个jmp语句,跳到你的处理函数位置,处理完后,再跳回来,这种方法要求比较高,需要处理好很多事情,另一种办法 是往那个位置写条能造成例外的指令,比如int 3,然后用DebugActiveProcess调试游戏进程,这样每当游戏执行到那个 位置的时候,就会停下来,到外挂程序里面去,等外挂程序处理完以后,用ContinueDebugEvent 继续运行程序。 今天先写这么多,下回将讨论外挂的具体功能该怎么实现 今天来谈谈地址的调查问题,地址调查是写外挂中最艰辛,最富有挑战性的事情,很多朋友问我要外挂的原程序,其实有了外挂原程序,如果你不会调查地址,还是没用的, 原程序和地址的关系就象武学中招式与内功的关系,没有内功的招式,只是一个花架子。而内功精深以后,任何普通的招式,都有可能化腐朽为神奇,外挂中的地址分为两类,一类是程序地址,一类是数据地址。象石器中的双石器,真彩,不遇敌,寸步遇敌,发送接收封包等,都属于第一类,而人物坐标,状态等,都属于第二类。对于第一类地址,主要依靠softice来调查地址,对第二类地址,可以用一些游戏工具,比如fpe,game expert,game master等来调查,我一直用game expert,因为我找不到2000下能用的fpe, 各位以前用fpe改游戏的时候,没想过他也能用来干这个吧 对于第二类数据的调查方法,大部分人都很熟习了,我就不多说了,现在主要来谈谈第一类数据的详细调查过程,比如我们要调查发送封包的位置,如何着手呢,客户端往服务器要发很多封包,但最简单的办法莫过从说话的封包入手,先说一句很长的话,最好是英文,查起来方便,说完以后,用任意一种办法进入游戏程序的进程空间(比如先用spy查出游戏程序的窗口句柄,再切换到softice打入bmsg 窗口句柄 wm_lbuttondown,这样在游戏程序中一点鼠标就进入了他的进程空间)然后用s命令查出这句话所放的内存地址,记下这个地址,在softice中打入bpm 刚才调查到的地址,这个指令的意思是只要有访问这个内存的动作,立刻中断,然后再切换到游戏,说一句话,你会发现softice自动中断到某一个位置了,从这个位置跟踪下去,发送封包的位置也就不远了。 上面所说的都是针对一个全新的游戏程序而言,如果是一个老的程序,有前辈做了大量的工作,还可以用些别的办法,如反汇编等,来调查。以后游戏版本的更新也是如此,只要把老版本的地址位置附近的代码记下来,去新版本的代码里面search一下,就ok了。 恩,休息一会儿,休息一会儿 我主要对外挂的技术进行分析,至于游戏里面的内部结构每个都不一样,这里就不做讲解了,我也没有那么厉害,所有的都知道,呵呵!1 首先游戏外挂的原理外挂现在分为好多种,比如模拟键盘的,鼠标的,修改数据包的,还有修改本地内存的,但好像没有修改服务器内存的哦,呵呵!其实修改服务器也是有办法的,只是技术太高一般人没有办法入手而已!(比如请GM去夜总会,送礼,收黑钱等等办法都可以修改服务器数据,哈哈)修改游戏无非是修改一下本地内存的数据,或者截获api函数等等,这里我把所能想到的方法都作一个介绍,希望大家能做出很好的外挂来使游戏厂商更好的完善自己的技术.我见到一片文章是讲魔力宝贝的理论分析,写的不错,大概是那个样子.下来我就讲解一下技术方面的东西,以作引玉之用2 技术分析部分1 模拟键盘或鼠标的响应我们一般使用UINT SendInput(UINT nInputs, // count of input eventsLPINPUT pInputs, // array of input eventsint cbSize // size of structure);api函数第一个参数是说明第二个参数的矩阵的维数的,第二个参数包含了响应事件,这个自己填充就可以,最后是这个结构的大小,非常简单,这是最简单的方法模拟键盘鼠标了,呵呵注意:这个函数还有个替代函数: VOID keybd_event(BYTE bVk, // 虚拟键码BYTE bScan, // 扫描码DWORD dwFlags, ULONG_PTR dwExtraInfo // 附加键状态);和VOID mouse_event(DWORD dwFlags, // motion and click optionsDWORD dx, // horizontal position or changeDWORD dy, // vertical position or changeDWORD dwData, // wheel movementULONG_PTR dwExtraInfo // application-defined information);这两个函数非常简单了,我想那些按键精灵就是用的这个吧,呵呵,上面的是模拟键盘,下面的是模拟鼠标的.这个仅仅是模拟部分,要和游戏联系起来我们还需要找到游戏的窗口才行,或者包含快捷键,就象按键精灵的那个激活键一样,我们可以用GetWindow函数来枚举窗口,也可以用Findwindow函数来查找制定的窗口(注意还有一个FindWindowEx),FindwindowEx可以找到窗口的子窗口,比如按钮,等什么东西.当游戏切换场景的时候我们可以用FindWindowEx来确定一些当前窗口的特征,从而判断是否还在这个场景,方法很多了,比如可以GetWindowInfo来确定一些东西,比如当查找不到某个按钮的时候就说明游戏场景已经切换了,等等办法.有的游戏没有控件在里面,这是对图像做坐标变换的话,这种方法就要受到限制了.这就需要我们用别的办法来辅助分析了.至于快捷键我们要用动态连接库实现了,里面要用到hook技术了,这个也非常简单,大家可能都会了,其实就是一个全局的hook对象然后SetWindowHook就可以了,回调函数都是现成的,而且现在网上的例子多如牛毛,这个实现在外挂中已经很普遍了.如果还有谁不明白,那就去看看msdn查找SetWindowHook就可以了. 这个动态连接库的作用很大,不要低估了哦,它可以切入所有的进程空间,也就是可以加载到所有的游戏里面哦,只要用对,你 会发现很有用途的!这个需要你复习一下win32编程的基础知识了,呵呵,赶快去看书吧! 2截获消息有些游戏的响应机制比较简单,是基于消息的,或者用什么定时器的东西,这个时候你就可以用拦截消息来实现一些有趣的功能了.我们拦截消息使用的也是hook技术,里面包括了键盘消息,鼠标消息,系统消息,日志等,别的对我们没有什么大的用处,我们只用拦截消息的回调函数就可以了,这个不会让我写例子吧,其实这个和上面的一样,都是用SetWindowHook来写的,看看就明白了很简单的.至于拦截了以后做什么就是你的事情了,比如在每个定时器消息里面处理一些我们的数据判断,或者在定时器里面在模拟一次定时器,那么有些数据就会处理两次,呵呵,后果嘛,不一定是好事情哦,呵呵,不过如果数据计算放在客户端的游戏就可以真的改变数据了,呵呵,试试看吧!用途还有很多,自己想也可以想出来的,呵呵! 3拦截socket包这个技术难度要比原来的高很多哦,要有思想准备.首先我们要替换winSock.dll或者winsock32.dll,我们写的替换函数要和原来的函数一致才行,就是说它的函数输出什么样的,我们也要输出什么样子的函数,而且参数,参数顺序都要一样才行,然后在我们的函数里面调用真正的winSock32.dll里面的函数就可以了首先:我们可以替换动态库到系统路径其次:我们应用程序启动的时候可以加载原有的动态库,用这个函数LoadLibary然后定位函数入口用GetProcAddress函数获得每个真正socket函数的入口地址当游戏进行的时候它会调用我们的动态库,然后从我们的动态库中处理完毕后才跳转到真正动态库的函数地址,这样我们就可以在里面处理自己的数据了,应该是一切数据.呵呵!兴奋吧,拦截了数据包我们还要分析之后才能进行正确的应答,不要以为这样工作就完成了,呵呵!还早呢,等分析完毕以后我们还要仿真应答机制来和服务器通信,一个不小心就会被封号,呵呵,呜~~~~~~~~我就被封了好多啊!分析数据才是工作量的来源呢,游戏每次升级有可能加密方式会有所改变,因此我们写外挂的人都是亡命之徒啊,被人娱乐了还不知道,呵呵!(声明我可没有赚钱,我是免费的)好了,给大家一个不错的起点,这里有完整的替换socket源代码,呵呵!http://www.vchelp.net/vchelp/zsrc/wsock32_sub.zip 4截获api上面的技术如果可以灵活运用的话我们就不用截获api函数了,其实这种技术是一种补充技术.比如我们需要截获socket以外的函数作为我们的用途,我们就要用这个技术了,其实我们也可以用它直接拦截在socket中的函数,这样更直接.现在拦截api的教程到处都是,我就不列举了,我用的比较习惯的方法是根据输入节进行拦截的,这个方法可以用到任何一种操作系统上,比如98/2000等,有些方法不是跨平台的,我不建议使用.这个技术大家可以参考windows核心编程里面的545页开始的内容来学习,如果是98系统可以用window系统奥秘那个最后一章来学习.好了方法就是这么多了,看大家怎么运用了,其它的一些针对性的技巧这里我就不说了,要不然会有人杀了我的,呵呵! 记住每个游戏的修改方法都不一样,如果某个游戏数据处理全部在服务器端,那么你还是别写外挂了,呵呵,最多写个自动走路的外挂,哈哈!数据分析的时候大家一定要注意,不要轻易尝试和服务器的连接,因为那有很危险,切忌!等你掌握了大量的数据分析结果以后,比较有把握了在试试,看看你的运气好不好,很有可能会成功的哦,呵呵!其实像网金也疯狂的那种模拟客户端的程序也是不错的,很适合office的人用,就看大家产品定位了.好了不说了,大家努力吧!切忌不要被游戏厂商招安哦,那样有损我们的形象,我们是为了让游戏做的更好而开发的,也不愿意打乱游戏的平衡,哎,好像现在不是这样了!不说了随其自然吧
2005-03-05 / 网站制作技术 / 8,400 views浏览
阅读全文

如果给你这么一次机会

0 个评论
毫无疑问,他是一个十足的穷光蛋,穿着破旧的衣服,每天只能吃个半饱,但他仍然坚强地活了下来,望着城市里的高楼大厦,他总是忍不住的叹息,正如其他穷人一样,他也企盼着自己有发达的一天,于是他每天都在乞求神能保佑他早日发达,能多赐点财富给他,让他能过上好日子。 某一天,神终于出现了,他慌忙下跪并再次提出了自己的请求,神告诉他:“我在你的一生中埋下了一个绝好的机遇,有了它你就可以中一次大奖,记住,你的生命中只有这么一次机会。” 他高兴极了,不断的感谢神的恩惠。 神又说话了:“当然,这个奖不是无偿给你的,它需要时间来培育,你必须用你的辛苦劳动来换取,你能忍受越长久的贫苦生活,将来你能拿到的奖会越大,得到的奖金会更多。得奖多寡就要看你自己了!” 一天,两天……穷人扳着指头数着,并一天天的忍耐下去…… 问问自己:如果你是那个穷人,你能忍受多久呢?
2005-03-03 / 生活 / 3,918 views浏览
阅读全文

那个角落

0 个评论
又回到了那个失落的世界,一个封闭的地方,一个愚昧落后的小山村。 天空飘着小雨,那条跨山小路显得泥泞不堪,加上当地正在修路,路况更加恶劣,望着这座大山和山间的小路,实在难以想象山后世代在此生活的人们是怎么踏着这种泥路去谋求生存和栖息的。 步行跨越这座山,一会的功夫,鞋上粘满了泥,终于深刻领略到举足轻重的含义,本以为可以到路旁的草丛里把鞋子擦干净,放眼望去,那些草已经被人践踏得失去了原本的青色,只留下的泥黄色的几根草竿,擦完鞋后才后悔,因为裤脚似乎被千刀万剐般留下了N条的草痕。 路中间是不方便行走的,偶尔有飞驰而过的摩托车溅起一潭的泥水,如果躲闪不及最后就人无完人了。再说路中的泥层较厚,人走在上面,鞋底也极易被粘连。每走一脚都需花很大的力气。于是,路边的水田自然地充当了行人的道路,收割后的水田里稻根一簇一簇的,在稍干的地方尚可承受行人的体重,遇到有水的湿地就要小心了,随时可能陷进去! 经过一个多小时的行进,总于到达目的地! 一阵忙碌以后开始吃午饭。 席中有人提及某个亲戚在外地开旅游车,月入四千,顿时惊讶不已,现今的世界真是变化太大了大学生已经呈泛滥趋势,结果是工资越来越低,想想即使在厂里混个工程师也不过两三千工资,还不如一个开车的。感觉知识是越来越不值钱啊! 记起报上也有报导说培养一个博士需要多少多少钱,并经过精确计算,是绝对不可能在短期内收回那些投资的,感觉自己真的很彷徨,不知道自己是否还需要那么努力去做那种绝不合算的生意!
2005-02-28 / 生活 / 4,356 views浏览
阅读全文

无泪之城

0 个评论
眼泪流干了是为无泪~~~~ 看到或者听到无泪之城,或许你会认为是个天堂般的地方,或许你会认为那里只充满快乐,而事实上,那里却是一片荒凉,一片死寂,是伤心地中最伤心处。即使这个地方让你如何的伤心,你却不能有任何的眼泪,眼泪只会让整个城市把你吞噬,只因为,这里是“无泪之城”。 (from 倩女幽魂)
2005-02-06 / 生活 / 3,758 views浏览
阅读全文

今天的制作进度!

0 个评论
发现天气小偷用不了了!再看看调用的站站!发现调用的站站打不开!没办法!又去找了几个代码!发现不是用YAHOO的漏夜界面的就是偷人家小偷的!感觉偷来偷去很慢! 干脆自己去学做算了!找到了演示小偷代码,改了改!本来还有更好的思路的,最后觉得反正不是自己用,搞那么好也没用。就将就着先这样先~! 一转眼一个晚上又过去了!郁闷啊!好快啊,想想也快放假了!5555555555没多少时间编代码了!最重要的是景点还不知道到底怎么编~是不是还用文章系统!头痛啊!
2005-02-02 / 网站制作技术 / 3,989 views浏览
阅读全文

前天装《上古卷轴》的时候发现贴图无法显示

0 个评论
还以为是游戏未安装完成的缘故,昨晚下了个魔兽,装上后发现也是背景无法显示,终于明白是自己机子游问题了,可能是显卡的问题吧,其实它也够老了,早就该换了!问题是我没钱,幸亏还能玩半条,先将就用到先!郁闷啊! 今天又偷懒了,没去上班!呵呵!没心情写代码!好累!555[neutral]
2005-01-31 / 生活 / 3,724 views浏览
阅读全文

小货的书签

0 个评论
其他 Name Server: NS1.4EVERDNS.COM   中国身份证号码:450100198111010259 (出生年月: 1981 年 11 月 1 日出生地区:广西壮族自治区南宁市性别:男性) 台湾身分证号码:W184859764(出生地区:金门县,性别:男性) 香港身分证号码:MZ5358952 韩国身分证号码:8111011647006(出生年月: 1981 年 11 月 1 日,性别:男性) ——————————————————————– http://gaojie616.vcp.bizcn.net http://nnxqd.w150.4everdns.com http://www.114best.com/ 查同一服务器玉米 ICQ:173856054 密码:中国人少1 345992110 密码:6 http://www.chinaren.com  lcxde@chinaren.com P:xiaox1
2005-01-31 / 网站制作技术 / 4,435 views浏览
阅读全文

空间还没恢复!晕倒!

0 个评论
不过发现竟然用他的二级玉米可以访问!不管了!先拿自己国米做转向了!还以为知道能找到个好空间!没想到一样不可靠!算了!还是继续我的免费之路!以后http://www.imxh.com做转向!imxh.com做解释!那么多漏夜空间!真麻烦啊!
2005-01-31 / 网站制作技术 / 3,947 views浏览
阅读全文

网站空间又出问题了!

0 个评论
好象主站空间确实不行,又不可以访问了!数据又没有备份,天啊!好麻烦啊! 今天有人来装宽带了!可惜他们说是两批人的!还有一批是调试机子的,没见来.郁闷啊!还要等,空虚啊,只好到外面上了,发现网吧门口有个纸张,说春节期间一小时2块钱,好卵贵啊!不过也没办法拉!将就将就拉,等装好宽带再说!
2005-01-29 / 网站制作技术 / 4,666 views浏览
阅读全文

梦中梦

0 个评论
因为历史的原因,我们应该憎恨整个大和民族,但是对于他们中的一些人的某些方面,我们还是值得借鉴和学习的。所谓:“师夷长技以制夷。”也便是如此了吧。 上面所感实因想起日剧《白色巨塔》中的情节,主角出身贫寒却凭着自己的努力成为大医院中有名的医师,虽然他争权夺利的手段令人不齿,但不可否认他确实有真才实学,而且相当优秀。只是医院中的权力斗争太白炽化而已。其争权的目的也是很简单的,只是想让母亲能过上好日子。 我只不过匆匆看过一集,期间也看了一些剧情介绍,大概了了解了这个故事,其中的恩恩怨怨暂略去不谈,只是看主人公的目的和成就,我觉得极有可取之处,回想现在的大学里,不少的贫困生也在努力学习中,一方面为了自己,另一方面何尝不是为了家人。也许真的是患难中才能见真情,贫困中才能奋发图强。忽然很羡慕那些奋发的人,他们的意志是那么坚强,能力是那么卓越。假如能有那份动力,宁愿用十来年的幸福去换取。 后从狼口中知故事结局,片重主角得绝症而亡,心底竟然产生一丝淡淡的悲哀,感慨天物弄人,不论如何的利欲熏心到头还是白忙了一场,可笑又可悲。忽然想起游戏《红楼梦》中的结局:宝玉倚在墙角,低着头,全身破破烂烂,以前的繁华富贵只是黄粱一梦,唉……不知道自己是否身处梦中,何日才会醒呢?
2005-01-09 / 生活 / 4,333 views浏览
阅读全文