纵横三国外挂手记(1) 分析篇

本文作者分享了其从分析游戏到开发网游外挂的过程。包括使用IRIS抓包、分析登录流程、角色信息加载等内容,并介绍了游戏分析的暴破法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来自http://blog.youkuaiyun.com/lijun84 ,引用必须注明出处!

本文仅供个人学习研究之用,不得用于任何商业及非法目的,基于此产生的法律责任本人不承担连带责任之类的。



我写这篇Blog时,已经决定告别这款玩了5年的游戏。我将尽量详细深入的揭示从分析游戏到如何实现一款可用的网游外挂程序。

背景:

我从小学就爱玩游戏。从FC玩到SFC到后来的PS2N6401年迷恋上了传奇,后来自己也写了一些辅助挂和后期的变态挂(那时技术不是很纯熟,刚开始做软件开发)。在玩了无数款网游后,对大多数网游都很失望,难以维系我游戏的热情。我一直对三国系列游戏情有独钟,那是06年的一天,我无意中发现了一款2D的三国游戏(那时叫乱世三国),这游戏画面不算酷,45度角2D表现,上手比较简单,后来的体验使我觉得它是一个美的系统,没有太多冗余,平衡性和可玩性也达到对称。

现在看来才知道。原来上面都是老玩家。80%都是玩了至少3年以上的。有个游戏玩家很调侃的说:“我玩它时孩子还没出生,现在孩子都快4岁了,每次看到就叫爸爸又在三国了。”其实这款游戏的平均年龄估计在28岁以上,30岁以上也应该大有人在。它的人文气氛是我后期慢慢感觉到的。

08年春节前发布了春节期间双倍公告,可我春节很忙根本没空上游戏,那个郁闷啊心里不是滋味额。我终于做了个一直想做没做的决定(因为知道做外挂很烦,我很懒),写个可以自动打怪喝药并且放技能的外挂(我那时工作是做杀毒软件和防火墙,毕竟也做了6年软件,技术上已经很纯熟了)。废话不多说了,转正题,我们开始分析。

分析游戏:

其实按键精灵方式的挂我一直没考虑过,因为我觉得它性能有问题,并且框架并不好无法实现复杂的需求。我一开始就考虑做脱机挂(我当然知道分析的代价很高)。

既然决定写脱机挂当然要从登录开始分析,分析的第一步就是抓包,我选的工具是IRIS,先打开任务管理器看看游戏的进程ID,然后打开命令行用win自带的netstat ip –ao看下它开了哪些端口,OK,打开游戏开始,设置好IRIS过滤器开始抓包,登陆选择角色,离开停止抓包,保存报文,靠,居然帐号和密码都是明文。。。(勾起了我盗号的兴趣..没多想,继续分析),发现登陆部分比较简单。先和游戏服务器建立连接,再用HTTP Get请求将帐号和密码发到帐号服务器做验证,返回成功标志。就可以开始和游戏服务器通讯了。

好了,我们来分析下游戏创建角色和进入游戏加载角色信息吧。晕。抓下来后对应一些数值(血量等信息)只分析出10%不到的角色初始量。。。,郁闷了。看来必须找到一种更好方式,又初步分析下游戏的资源和二进制脚本文件,没啥有价值的发现。算了,用黑客常用的绝招-暴破法吧。

这里介绍下,游戏分析的暴破法和Crack中用的方法不同,游戏分析暴破是用截获的报文进行探测性修改并对客户端发包,观察客户端里事物的变化从而猜测报文字段的意义。说白了就是把客户端当成服务器,对其发包,以恢复它在之前游戏中运行的画面状态。后期很多分析都用到这种技巧。因为只有这种技巧可以快速有效的破解80%以上的游戏报文。以至于我如果想的话都可以写它的SF了。

分析时需要注意的:

1,如果服务器IP配置在文件中,自己改就OK,否则可能需要改客户端程序,不多说,用UE或者winhex就行。

2,对客户端发包可以用工具WPE写脚本可以,当然我一般自己写程序也很方便。

3,分析抓下来的报文时,最好先用正值表达式过滤成自己方便的查看的格式。在分析如技能或者买药等动作时最好多抓些此类报文并列放到一起看,这样通过列的对比可以看出复杂的规律来。

分析就写到这,贴出部分我分析的报文(比较敏感的报文此处就不贴出了,请见谅),后期谈外挂实现时会用到。

备注:

灰色=固定字节

蓝色=确定用途的字节

紫色=未确定用途的猜测字节

绿色=在一组值中循环复用的未确定字节

黑色=待分析的未确定字节

报文分析:

下一个内容报文大小应答:

DE 01 02 03大小(1b)00 00 00 00 00

移动请求:

022715 0032X(2b) Y(2b)3D

应答(L):(56b

16角色显示ID00X1 Y1 X2 Y2FE 00 09 01 49

00 00 00 E1 00 02 00 00是否骑马(0/1)(1b)(1b)00马鞍(1b)00马嘴头(1b)00马鬙(1b)

00马蹄(1b)00 00 00 00

备注:一个移动请求,可能需要多个应答描述。

吃东西请求:

022521包裹中的位置(1b)3400 00 00 003F

备注:位置从包裹左上第一格开始数,以0计数。

打怪请求:

022902 0138怪物ID(2b)02 003300

备注:此绿色部分从打1个怪到N个怪对于所有角色序列一样。

检东西请求:

022063 0131X Y3A

应答(20b)

4C角色显示ID00 0061 82 B400X Y X1 Y1000C00 E9X11 Y11C3 00

传送员请求:

020D03 011C传送员ID(2b)01 0017

应答:

8B 00返回码(1b)00返回码:(魏0-19,20-39,吴40-59)公共地图的同一传送员,国家不同,返回码也不同,但同国家同传送员一定相同。所以可传送地可点击限制在客户端判定。

85 FE 30 00 00 00 00 00任务未完成,无法请求传送

传送请求:(10b)

1C20国代码(1b)0031菜单项(1b)0001003A

备注:菜单项从0开始数第N

应答:

867400A5 DE B30077057400SX(2b) SY(2b)角色类型码(1b)

0C77007400DX(2b) DY(2b)00(1b)00 00 00 00 00

00 00 00 000100 00 00 00

退出游戏请求:(10b)

031201 00FF00 00 00 0008(服务器检查开头03就够了)

刷怪报文:

怪物移动:20b

0C怪物ID(2b) X(2b) Y(2b) X1(2b) Y1(2b)(FE|9A)怪代码(1b)等级(1b)3C00(2b)00 00

怪物受攻击:(15b)

0F怪物ID(2b) X(2b) Y(2b)怪代码(1b)等级(1b)费血数(2b)剩余血量(2b)00 00

怪物攻击:(13b

0D怪物ID(2b) MX(2b) MY(2b) DX(2b) DY(2b)怪代码(1b)等级(1b)

怪物死亡角色加值:

0E怪物ID(2b) X(2b) Y(2b)怪代码(1b)等级(1b)最后一下费血数(2b)42 540020 E0 B3003D00经验值(8b)01 00 00 000A001000

掉钱:

DE XY 00 00 钱数(2b) 00 00 00 00 ID 00 00

怪物消失

11怪物ID(2b)

掉东西:

DE X Y 00 00钱数量(2b) 00 00 00 00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值