C#论坛-玄机论坛-C#论坛-玄机宝盒-玄机类库-C#

 找回密码
 关闭注册

QQ登录

只需一步,快速开始

查看: 17428|回复: 20

[资源分享] C# 封包挂的初解与实例分析

[复制链接]
h0730303779 发表于 2014-10-28 22:43:31 | 显示全部楼层 |阅读模式

玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
如有疑问,请加入官方群询问

您需要 登录 才可以下载或查看,没有帐号?关闭注册

x
玄机论坛 C# 封包挂初解与实例分析,本文讲述如何使用C#制作封包辅助.将会讲述所有需要用到的知识与技术等.
一.什么叫外挂?

  现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我们修改的目的?回答是"否"。

  我们知道Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,这样就可以实现我们修改游戏的目的了。

  目前除了修改游戏封包来实现修改游戏的目的,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运算能力是有限的,非凡在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判定分支,通过跟踪调试我们可以把一些对我们不利的判定去掉,以此来满足我们修改游戏的需求。 在下几个章节中,我们将给大家讲述封包的概念,和修改跟踪客户端的有关知识。大家预备好了吗?

  游戏数据格式和存储:

  在进行我们的工作之前,我们需要把握一些关于计算机中储存数据方式的知识和游戏中储存数据的特点。本章节是提供给菜鸟级的玩家看的,假如你是高手就可以跳过了,假如,你想成为无坚不摧的剑客,那么,这些东西就会花掉你一些时间;假如,你只想作个江湖的游客的话,那么这些东西,了解与否无关紧要。是作剑客,还是作游客,你选择吧!

  现在我们开始!首先,你要知道游戏中储存数据的几种格式,这几种格式是:字节(BYTE)、字(WORD)和双字(DOUBLE WORD),或者说是8位、16位和32位储存方式。字节也就是8位方式能储存0~255的数字;字或说是16位储存方式能储存0~65535的数;双字即32位方式能储存0~4294967295的数。

  为何要了解这些知识呢?在游戏中各种参数的最大值是不同的,有些可能100左右就够了,比如,金庸群侠传中的角色的等级、随机遇敌个数等等。而有些却需要大于255甚至大于65535,象金庸群侠传中角色的金钱值可达到数百万。所以,在游戏中各种不同的数据的类型是不一样的。在我们修改游戏时需要寻找预备修改的数据的封包,在这种时候,正确判定数据的类型是迅速找到正确地址的重要条件。

  在计算机中数据以字节为基本的储存单位,每个字节被赋予一个编号,以确定各自的位置。这个编号我们就称为地址。

  在需要用到字或双字时,计算机用连续的两个字节来组成一个字,连续的两个字组成一个双字。而一个字或双字的地址就是它们的低位字节的地址。 现在我们常用的Windows 9x操作系统中,地址是用一个32位的二进制数表示的。而在平时我们用到内存地址时,总是用一个8位的16进制数来表示它。

  二进制和十六进制又是怎样一回事呢?

  简单说来,二进制数就是一种只有0和1两个数码,每满2则进一位的计数进位法。同样,16进制就是每满十六就进一位的计数进位法。16进制有0--F十六个数字,它为表示十到十五的数字采用了A、B、C、D、E、F六个数字,它们和十进制的对应关系是:A对应于10,B对应于11,C对应于12,D对应于13,E对应于14,F对应于15。而且,16进制数和二进制数间有一个简单的对应关系,那就是;四位二进制数相当于一位16进制数。比如,一个四位的二进制数1111就相当于16进制的F,1010就相当于A。
  了解这些基础知识对修改游戏有着很大的帮助,下面我就要谈到这个问题。由于在计算机中数据是以二进制的方式储存的,同时16进制数和二进制间的转换关系十分简单,所以大部分的修改工具在显示计算机中的数据时会显示16进制的代码,而且在你修改时也需要输入16进制的数字。你清楚了吧?

  在游戏中看到的数据可都是十进制的,在要寻找并修改参数的值时,可以使用Windows提供的计算器来进行十进制和16进制的换算,我们可以在开始菜单里的程序组中的附件中找到它。

  现在要了解的知识也差不多了!不过,有个问题在游戏修改中是需要注重的。在计算机中数据的储存方式一般是低位数储存在低位字节,高位数储存在高位字节。比如,十进制数41715转换为16进制的数为A2F3,但在计算机中这个数被存为F3A2。

  看了以上内容大家对数据的存贮和数据的对应关系都了解了吗? 好了,接下来我们要告诉大家在游戏中,封包到底是怎么一回事了,来!大家把袖口卷起来,让我们来干活吧!

二:什么是封包?

  怎么截获一个游戏的封包?怎么去检查游戏服务器的ip地址和端口号? Internet用户使用的各种信息服务,其通讯的信息最终均可以归结为以IP包为单位的信息传送,IP包除了包括要传送的数据信息外,还包含有信息要发送到的目的IP地址、信息发送的源IP地址、以及一些相关的控制信息。当一台路由器收到一个IP数据包时,它将根据数据包中的目的IP地址项查找路由表,根据查找的结果将此IP数据包送往对应端口。下一台IP路由器收到此数据包后继续转发,直至发到目的地。路由器之间可以通过路由协议来进行路由信息的交换,从而更新路由表。

  那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截获客户端与服务器之间的交换数据,下面就向你介绍其中的一种工具:WPE。
关于WPE 的应用百度一搜一堆我就不再这边类述
一下直接介绍本人抓到的数据包和解析的方法内容详解
发送:00 00 00 16 00 0A 0B 01 0D 75 73 65 72 49 64 04 49 07 63 6D 64 0482 A1 09 01
返回: 00 00 00 AD 00 0A 73 01 07 63 6D 64 0D 75 73 65 72 49 64 0F 65 7272 43 6F 64 65 0B 76 61 6C 75 65 15 67 65 74 46 72 65 65 4E 75 6D 09 67 6F 6473 15 70 75 74 46 72 65 65 4E 75 6D 04 82 A1 09 04 49 04 00 04 00 04 00 09 0701 09 01 11 75 73 65 72 4E 61 6D 65 06 19 E5 A4 8F E4 B8 B6 E9 9B AA E5 AE 9C0B 67 6F 64 49 64 04 82 DB F3 7B 15 65 78 70 69 72 65 44 74 74 6D 05 41 D5 140C 54 40 00 00 02 05 40 52 40 00 00 00 00 00 01 09 01 0E 06 10 12 04 82 DB F37E 14 05 41 D5 14 0C 54 80 00 00 02 05 40 52 40 00 00 00 00 00 01 01 04 00
这两段是什么意思?没研究过当然一抹黑.拿反编译逆向flash 找到数据包解法和加密就能知
道用什么方式解包(逆向工具问哆啦R梦要吧他啥都有名字叫Sothink_SWF_硕思闪客Flash反编译工具”)
Q3.jpg Q2.jpg Q1.png
以上三张图是AS3语言写的 解包与封包过程 解读完了 就用C# 写个工具吧 解读数据包

L1.png
L2.png






按照某款游戏的规则前4位是数据包的长度也就是(标记1)
(标记2)是长度与数据包的隔开
最后是数据包长度-1
数据包是AMF格式加密
发送:{"userId":73,"cmd":37001}

返回:{"cmd":37001,"userId":73,"errCode":0,"value":0,"getFreeNum":0,"gods":[{"userName":"玩家名","godId":11400059,"expireDttm":1414541649,"userId":73},{"userName":"玩家名","godId":11400062,"expireDttm":1414541650,"userId":73},null],"putFreeNum":0}
发送给服务器命令是37001 查询参数是”userId(用户ID)” 73....的玩家
返回73ID玩家信息 JSON格式的                     
格式化后
{
    "cmd": 37001,
    "userId": 73,
    "errCode": 0,
    "value": 0,
    "getFreeNum": 0,
    "gods": [
        {
            "userName": "玩家名",
            "godId": 11400059,
            "expireDttm": 1414541649,
            "userId": 73
        },
        {
            "userName": "玩家名",
            "godId": 11400062,
            "expireDttm": 1414541650,
            "userId": 73
        },
        null
    ],
    "putFreeNum": 0
}                              
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复

使用道具 举报

 楼主| h0730303779 发表于 2014-10-28 22:55:20 | 显示全部楼层
沙发                           
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

Solo 发表于 2014-10-28 23:28:04 | 显示全部楼层
板凳。。。。在这里。
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

speed2018 发表于 2014-10-30 16:48:55 | 显示全部楼层
很有挑战性,不错
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

jeanarysun 发表于 2014-11-18 09:23:39 | 显示全部楼层
学习了,
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复

使用道具 举报

luochaowei 发表于 2014-12-11 17:04:39 | 显示全部楼层
好厉害的样子
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

eric2006livecn 发表于 2015-3-29 01:46:24 | 显示全部楼层
感谢楼主的精彩分享
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

undead 发表于 2015-5-9 00:28:37 | 显示全部楼层
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复

使用道具 举报

milest 发表于 2015-5-21 19:22:11 | 显示全部楼层
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复

使用道具 举报

coody 发表于 2016-2-1 16:13:08 | 显示全部楼层
zhichi支持一下是否可以出个什么教程什么的
玄机论坛-专业的C#交流论坛 交流QQ群: 16885911
帖子内网盘失效后请使用下面地址

http://bbs.msdn5.com/forum.php?mod=viewthread&tid=1218
如果失效请联系站长重新分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 关闭注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|玄机论坛

GMT+8, 2024-4-20 05:14 , Processed in 0.298817 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表