如何制作一个外挂.

一:什么叫外挂?

现在的网络游戏多是基于Internet上客户/服务器模式,服务端程序运行在游戏服务器
上,游戏的设计者在其中创造一个庞大的游戏空间,各地的玩家可以通过运行客户端程
序同时登录到游戏中。简单地说,网络游戏实际上就是由游戏开发商提供一个游戏环境
,而玩家们就是在这个环境中相对自由和开放地进行游戏操作。那么既然在网络游戏中
有了服务器这个概念,我们以前传统的修改游戏方法就显得无能为力了。记得我们在单
机版的游戏中,随心所欲地通过内存搜索来修改角色的各种属性,这在网络游戏中就没
有任何用处了。因为我们在网络游戏中所扮演角色的各种属性及各种重要资料都存放在
服务器上,在我们自己机器上(客户端)只是显示角色的状态,所以通过修改客户端内
存里有关角色的各种属性是不切实际的。那么是否我们就没有办法在网络游戏中达到我
们修改的目的?回答是”否”。我们知道Internet客户/服务器模式的通讯一般采用TCP/I
P通信协议,数据交换是通过IP数据包的传输来实现的,一般来说我们客户端向服务器发
出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。那么我们
把本地发出消息称为SEND,意思就是发送数据,服务器收到我们SEND的消息后,会按照
既定的程序把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么我们把
客户端收到服务器发来的有关消息称为RECV。知道了这个道理,接下来我们要做的工作
就是分析客户端和服务器之间往来的数据(也就是封包),这样我们就可以提取到对我
们有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,
这样就可以实现我们修改游戏的目的了。 目前除了修改游戏封包来实现修改游戏的目的
,我们也可以修改客户端的有关程序来达到我们的要求。我们知道目前各个服务器的运
算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家的状况几乎是不可
能的,所以有一些运算还是要依靠我们客户端来完成,这样又给了我们修改游戏提供了
一些便利。比如我们可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪
调试我们可以把一些对我们不利的判断去掉,以此来满足我们修改游戏的需求。 在下几
个章节中,我们将给大家讲述封包的概念,和修改跟踪客户端的有关知识。大家准备好
了吗? 
二:什么是封包?

怎么截获一个游戏的封包? 怎么去检查游戏服务器的ip地址和端口号?

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

那么我们所关心的内容只是IP包中的数据信息,我们可以使用许多监听网络的工具来截
获客户端与服务器之间的交换数据,下面就向你介绍其中的一种工具:WPE。

WPE使用方法: 执行WPE会有下列几项功能可选择:

SELECT GAME 选择目前在记忆体中您想拦截的程式,您只需双击该程式名称即可。

TRACE 追踪功能。用来追踪撷取程式送收的封包。 WPE必须先完成点选欲追踪的程式名
称,才可以使用此项目。 按下Play键开始撷取程式收送的封包。 您可以随时按下 | | 
暂停追踪,想继续时请再按下 | | 。 按下正方形可以停止撷取封包并且显示所有已撷
取封包内容。 若您没按下正方形停止键,追踪的动作将依照OPTION里的设定值自动停止
。 如果您没有撷取到资料,试试将OPTION里调整为Winsock Version 2。 WPE 及 
Trainers 是设定在显示至少16 bits 颜色下才可执行。

FILTER 过滤功能。用来分析所撷取到的封包,并且予以修改。

SEND PACKET 送出封包功能。能够让您送出假造的封包。

TRAINER MAKER 制作修改器。

OPTIONS 设定功能。让您调整WPE的一些设定值。
关于封包解密,加密 算法的一点东西
 

 

封包的解密加密,最简单的方法就是
异或 XOR 运算! 估计不是在服务器端,就是在客户端产生 私钥! 还有可能游戏一个
共钥
2次加密一个私钥,要加密的私钥在去加密和解密数据!

 

就是说每次进入游戏的时候同样的操作都会产生不同数据!

比如说:
  你要对AAAAAAAAAAAAA 进行加密 你的密钥是this is hack
   
  加密后生成为 5)(2a(2a) “*5
而你产生的数据就!也就是说有些游戏为什么同样的数据都不一样
  如果你有耐心,可以在游戏中反复拦截send数据,因为你已经知道明文和密文

  明文 = 你发送的话
  密文 = 你拦截的数据风暴
  
  多比较,要是游戏采用共用的加密算法的话,就可以解开数据了

  如果知道明文 和 密文 ,那私钥就肯定能破解了

知道了加密的方式就可以把自己的数据随意的发送到服务器了!

常用的加密算法

Blowfish http://www.counterpane.com/blowfish.html
DES Data Encryption Standard http://csrc.nist.gov/fips/fips46-3.pdf
EncryptGost http://www.jetico.sci.fi/index.htm#/gost.htm
EncryptXOR http://tuath.pair.com/docs/xorencrypt.html
EncryptRC4 http://www.rsasecurity.com/rsalabs/faq/3-6-3.html
EncryptSkipJack http://csrc.nist.gov/encryption/skipjack-kea.htm
EncryptTEA TEA, A Tiny Encryption Algorithm http://www.cl.cam.ac.uk/Researc
h/Papers/djw-rmn/djw-rmn-tea.html
Twofish http://www.counterpane.com/twofish.html

其他的还有什么凯撒加密什么。。。。在大学的时候都应该学的到
WPE实际经验和实例
1.虎卫版的破解 2.WPE系列教程之封包用法篇 
3.WPE系列教程之刷钱封包制作资料篇 4.WPE系列教程之祝福油和幽灵手套篇 
5.WPE系列教程之神秘封包制作篇 6.WPE系列教程之攻击代码篇 
 

 

虽然好多外挂都被封了,可是现在回头看看,对我们的学习使用wpe还是有很大的帮助,
以下的几篇文章都是实际的经验,而且里面的方法更是值得我们学习,如何分析问题,
如何查找关键数据,从何处入手,等等。这些文章都是从网站上抄来的,首先向他们的
作者致歉,因为经过好多次的转载,有些作者都找不到了,因此没有署名。下面让我们
一起来看看:

虎卫版的破解

虎卫版更新了mir.dat文件,在我们进入游戏时会有一个验证身份的过程,类似答考卷。
举个例子:服务器给mir.dat文件的试卷题目是“天王盖地虎”然后虎卫的mir.dat答案
是“宝塔镇蛇妖”,这样,服务器就知道了mir.dat是合法的。而半月看血的那个mir.da
t文件并不知道正确的答案是什么,只有硬着头皮随便说了个答案。所以它的身份很快就
被揭穿了。最终的结果就是,我们被服务器踢出来了!

  现在,我们需要做的就是—-欺骗服务器,让它认为半月看血的mir.dat文件是合法
的。我们知道,软件WPE的主要功能之一就是更换发送给服务器的数据包。只要在服务器
没有收到半月看血的mir.dat文件提交的答案之前,利用WPE将答案修改成正确的,服务
器就会认为半月看血的mir.dat文件是合法的。这样,挥半月,全屏看血,一步起跑,超
负重等功能就又可以实现了。

  下面就是具体的做法。(所需工具:WPE)

  准备工作:将patch这个文件改个名,这样可以避免服务器将半月版的mir.dat文件
自动更新成虎卫版的(两个版本的mir.dat文件大小不一样),这样做的话进入游戏的时
候会提示patch.exe程序不能使用,别管他,点OK就可以了。

  最关键的一步,是要知道合法的mir.dat文件所提交的试卷中的正确答案。在每次进
入游戏前,我们需要做的是选择自己的游戏帐号在哪个服务器、选择人物等等。这里的
每次选择,都会向服务器发送相应的封包。虎卫版和半月版在进入游戏之前所进行的前
几个步骤并没有太大的区别。在最后选择人物,点“开始”以后就有区别了—-使用半
月看血的会被服务器踢出来。所以,我们可以初步认定,正是这一步在提交试卷。所以
我们可以使用不同的mir.dat进入游戏,在点开始之前用WPE截一下数据就可以知道正确
的答案和错误的答案都是什么了。

  注意:在使用WPE之前最好先对这个软件进行一下设置,让它只截取我们发送给服务
器的封包。这样的封包才是我们能够随意修改的。下面是我截取的数据

使用半月mir.dat

SEND-> 0000 23 35 3C 3C 3C 3C 3C 42 58 3C 3C 3C 3C 3C 3C 3C #5<<<<<BX<<<<<<<

SEND-> 0010 3C 3C 56 62 61 5D 57 63 5D 65 57 5F 3C 6C 49 6E <<Vba]Wc]eW_<lIn

SEND-> 0020 7B 47 7A 58 47 5A 6C 78 53 52 67 68 63 5B 21 {GzXGZlxSRghc[!

SEND-> 0000 23 36 46 5E 65 66 56 52 41 6A 5A 42 61 6A 48 3F #6F^efVRAjZBajH?

SEND-> 0010 3C 73 47 78 6B 75 6C 69 77 3F 6D 59 56 6A 6E 59 <sGxkuliw?mYVjnY

SEND-> 0020 78 6B 48 4F 4C 70 4A 3F 58 70 47 6F 44 6C 48 3F xkHOLpJ?XpGoDlH?

SEND-> 0030 40 6D 48 3F 3C 72 47 6F 3C 21 @mH?<rGo<!

SEND-> 0000 23 37 3C 3C 3C 3C 3C 4B 64 3F 3C 3C 3C 3C 3C 3C #7<<<<<Kd?<<<<<<

SEND-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 23 38 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C #8<<<<<A@<<<<<<<

SEND-> 0010 3C 3C 21 <<!

使用虎卫mir.dat

SEND-> 0000 23 34 3C 3C 3C 3C 3C 42 58 3C 3C 3C 3C 3C 3C 3C #4<<<<<BX<<<<<<<

SEND-> 0010 3C 3C 56 62 61 5D 57 63 5D 65 57 5F 3C 6C 49 6E <<Vba]Wc]eW_<lIn

SEND-> 0020 7B 47 7A 58 47 5A 6C 78 53 52 67 68 63 5B 21 {GzXGZlxSRghc[!

SEND-> 0000 23 35 46 5E 65 66 56 52 41 6A 5A 42 61 6A 48 3F #5F^efVRAjZBajH?

SEND-> 0010 3C 73 47 78 6B 75 6C 69 77 3F 6D 59 56 6A 6E 59 <sGxkuliw?mYVjnY

SEND-> 0020 78 6B 48 4F 4C 73 48 4F 40 6F 47 6F 44 6C 48 3F xkHOLsHO@oGoDlH?

SEND-> 0030 44 6C 49 4F 44 6E 47 6F 3C 21 DlIODnGo<!

SEND-> 0000 23 36 3C 3C 3C 3C 3C 4B 64 3F 3C 3C 3C 3C 3C 3C #6<<<<<Kd?<<<<<<

SEND-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 23 37 3C 3C 3C 3C 3C 41 40 3C 3C 3C 3C 3C 3C 3C #7<<<<<A@<<<<<<<

SEND-> 0010 3C 3C 21 <<!

SEND-> 0000 2A *

SEND-> 0000 2A *

  可以看到,半月版截到了5组封包,虎卫版是7组。在这里我们大可不必理会数据的
多少,对比的时候以半月版为准。虎卫版数据多的原因是因为我们已经正常进入游戏了
。多出来的数据可能是客户端告诉服务器自己已经正常进入了,这样服务器才会告诉客
户端,他有什么物品,等级是多少……

  没得到我是神的指点前,我前半夜的时间就是浪费在这里了。

  再观察这些数据可以看到,每组数据大多以23开头,紧跟在后面的是3x(x代表0-9
的数字),这些是数据包编号信息,可以不理会它。右边是这些16进制数据对应的符号
,我们对比右边的符号就能知道两个版本同一组包里面的信息有什么不同了。可以发现
,两个版本所发送的第二组包差别最大。所以,这组数据成了重点!

  那天,我利用WPE的滤镜功能,(教程里有滤镜的使用说明),把半月版的除了数据
编号以外的所有信息写到了滤镜的正确值里,又把虎卫的信息写到了伪造值中,运行滤
镜。满以为这次会成功,结果服务器照踢不误。在这里我又浪费掉了后半夜时间~~~~~~

  后来得到我是神的指点,才知道即使是用同一个ID,使用同一个版本的mir.dat文件
登陆,所得到的第二组数据也会有所不同,个人认为那些不同的数据可能和登陆的时间
,服务器的状态有关。知道了这些,就可以把随机变化的不同部分排除掉。然后再对比
两个版本截到的数据中其他部分,发现只有SEND-> 0030这一行的第1-6个数值是不一样
的。把半月版的这6个数值填到滤镜中的正确值里,再把虎卫版相同位置上的6个数值填
到伪造值里就可以欺骗服务器了。

  在使用滤镜的时候应该用它的“递进模式”,并且选上“自定位修改”,(这样设
置后,WPE只要发现连续的这6个正确数值,就会连续的把这6个数值替换成为伪造值)滤
镜的“查找长度最大值”(我理解成在多长的一组包里查找相关数据)默认是40,可是
我们知道我们要修改的那组数值所在的封包长度已经超过40个字节了,所以我们可以将
“查找长度最大值”设置成大于封包长度的值。(我是神设的是80,我自己设的是64)
另外,当我们选上“递进模式”并且选上“自定位修改”后,伪造值的范围变成了-124
到+124,应该从000处开始填入伪造值才能使滤镜真正生效。

  好了,运行滤镜吧,试着使用半月版进入传奇,结果是—-成功。到了这一步,我
高兴的不得了,终于成功了!

  可是好景不长,休息了几个小时后这个滤镜竟然失效了。重新按前面的方法截获数
据,发现和以前截获的数据不一样了。我倒,原来服务器考试还分A、B卷啊。于是照改
不误,多做了两个滤镜—-这回彻底把服务器摆平了。(做成能够脱离WPE单独运行的封
包后就可以给朋友用了)

  由于要将patch解决掉才能使用这个封包,没了自动更新的功能,换成其他区的用户
登陆就会出现ID不存在的错误提示。好多朋友发表了解决这个问题的方法,有手工修改m
ir.ini文件的、有用WIN2000做模拟FTP服务器的、还有用防火墙截住patch不让它自动更
新的。个人认为在网吧使用以上方法还是有点费事。

  我是在家里上网的,那个patch文件改名后进入游戏会出现“patch.exe程序不能使
用”的提示,每次都要点“OK”,太罗嗦了。我把半月版的mir.dat设成只读属*了,所
以那个patch就没法把它更新成虎卫版了。不过,换其它区的ID登陆还是有问题。大家想
想办法把这个问题彻底解决。

WPE系列教程之封包用法篇

  由于不同区不同服务器的的数据不同,一个封包要想在每个服务器都能使用是不可
能的。这就需要我们对原有的封包进行修改。 
  大家不必要一味的要这个封包,要那个封包,学会了修改封包,就能自己动手了. 
大家在发封包之前,都会和NPC说话,然后进行搜寻,得到一批数据,就是16进制代码我
们要做的是打开所要发送的封包,然后选择要发送的命令如:Packet n 1,发送。现在
一个封包命令就发出去了,这就是WPE的用法,我要说的是怎么修改,大家继续看:
  现在,我们双击左边的Packet n 1,会出来一条对话框,里面也有16进制代码我所
需要做的是把第一排第3。4。5。6。4组数据修改成你刚才搜索的相应数据(注意:他的
相应数据是在搜索的时候,左边带S符号的那几排数据)
  如果在搜索的时候,出现了许多带S符号的数据排,则证明,有地方出错,你退出传
奇再进或者再次搜索一遍,一般只会出现2-3排的S,而其他带R的不用管他。你现在已经
把其他服务器的封包改成你这个服务器能用的封包了。
  比如赌场封包,在1号房搜索并修改1号封包数据后发送,撒6到了7号房,再搜索并
修改2号封包数据后发送,依次类推就可以到40号房间。注意,修改9号封包也就是拿钱
封包的时候必须等你出来与NPC对话出现成功字样的时候才能修改,如果你拿不到钱,你
所修改的封包则无任何用处,所以要修改拿钱封包,必须你先得拿到一次钱,但是如果
成功了和NPC说话后立即开始修改,而且要一次成功,慢点都无所谓,想想修改步骤,否
则你失败了再点NPC就会送你回去。 
  那么,现在虽然赌场的封了,你们还可以去试试神秘商店或者未知暗殿的封包,一
样能改好了。

WPE系列教程之刷钱封包制作资料篇

第一位23 表示 # 是 开头 
第二位 是数据传递的id从0-9(ascii码) 
第三四位是你放在物品篮的数据 
后面不变的则为此物品的数据

请大家自己研究!

WPE系列教程之祝福油和幽灵手套篇

现在让你站在比奇的人给新人2捆随机(随机带多少,随便,看你自己了),4000gold 
现在开始长征,我随机…….(此处省略若干过程),进比奇找老兵,给他4000到盟重! 
在跑!跑到仓库旁边的客栈里面!找到林小姐……,切出传奇,现在使用封包

  打开wpe如果大家有找不到我说明里面点击的地方在那里的!请下载此版本对照.

  双击 SELECT 选择 mir.dat(现在你的传奇应该是打开的哦,别告诉我你关了)

  双击 trace 选择 开始,就是哪个箭头标志

  切回传奇 点林小姐

  切出传奇,停止截取,就是哪个方的按纽

  现在开始用脑袋,你应该可以看到你刚才打开wpe哪一大片空白的地方有数据了吧! 
看看数据最前面,看到以S或者以R开头的小按纽了吗?现在找到以S开头的这样一段数据 
xx xx yy yy yy yy oo xx xx xx xx xx xx xx xx xx 
xx xx xx 
ok,现在继续

  双击你看到的任意一个S或者R的小按纽,你会看到跳一个窗口出来,里面写了个数字,
这个数字不固定,但是一般是 44 或者 56

  双击 SEND PACKET,看到<<封包列出>>下面的哪本打开的小书没有?,对了,点他选择
祝福油AND幽灵手套封包,然后点<>右边的哪个垃圾箱

  双击 <<封包列出>> 下面的 packet n 1 
  又开始用脑袋,你应该可以看到如下数据 
xx xx zz zz zz zz oo xx xx xx xx xx xx xx xx xx 
xx xx xx xx xx xx xx xx xx xx xx xx xx

现在继续

  把 zz zz zz zz 用yy yy yy yy替换掉!看清楚!为什么要替换掉!因为每个服务器的
林小姐的代码是不一样的

  写完了点离开就可以可!现在把 packet n 1 点一下!你会发现 packet n 1 变蓝色了
哦!对了,现在点哪个有3层的,有立体感的,画了个向右指的尖头的按纽,你会看到 <>,变
成了1%,而且右边也有了个 packet n 1 ,ok,.你已经接近成功了!

  如果你用的我告诉你的哪个wpe版本的话,你可以看到在 <<开启插座我>> 右边有个
数字,如果没有的话就不对!如果没有,重复第6 步.

  点击 阜 右边的那个 画了个黑色箭头的按纽,开始发送!现在切换回传奇,你就会看
到一个对话框了!选择3,就是幽灵手套了!

  注意!在你没有退出整个传奇的情况下!你新人一走到!只需要执行第13步就可以了

  我们7个人!一个盟重,一个比奇,剩下的5个都在跑新人………….. 好累!如果还
有人不会用的话!我就没有话说了

WPE系列教程之神秘封包制作篇

大家先到这里看看 (既然有现成的东西,何乐而不为,CC )

  再来说说我们现在玩的传奇。我这里就举个神秘商店的例子说明吧。

  1,进入传奇跑到兽人2F刘老头那
  2,打开WPE点选SELECT GAME双击MIR.DAT
  3,点选WPE上的TRACE按钮(此时出现一个3角的播放键和4方的停止键)点播放键开
始截取数据
  4,立刻切换回传奇点击刘老头,出现对话框(刘老头对你说XXX很厉害的字样)后
切换回WPE点4方型的停止键。

  这样我们就截取一组S和R数据(发给服务器点击刘老头和从服务器接收到的数据)
排除掉接收数据我们就会看到一组发送数据类下
23 3? ?? ?? ?? ?? 3F 4B 48 3F 3C 3C 3C 3C 3C 3C 3C 3C 21
(具体多少自己看了,都那个样)

  接着我们点选SEND PACKET按钮。打开(下载或者别人提供)进神秘的封包。查看刘
老头的数据,抄下或者用截图程序截下。关闭SEND PACKET窗口。回到WPE主窗口点选FIL
TER按钮,(这里用NORMAL模式即可)把你自己截取到的刘老头的数据填入第一行然后开
始对比自己截取的数据与封包内的数据的差别。。。找到不同的数据就填入第2行相同位
置。

比如: 位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
原 数据    23 3? ?? ?? ?? ?? 3F 4B [48] 3F 3C 3C 3C 3C 3C 3C 3C 3C [21]
修改数据   23 3? ?? ?? ?? ?? 3F 4B [44] 3F 3C 3C 3C 3C 3C 3C 3C 3C [4C] ?? ?? 
??

  这样你只需在第2行的第9位置填入44和19位置填入4C即可,如果修改数据长度超过
原数据, 就把他当做不同数据在19位置后继续填入。但是在右边的封包长度框内必须自
定义封包长度,不然FILTER只过滤1-19位置的数据。封包长度要看你修改数据的长度了
,大与修改数据长度也可以。

  如何实现全区通用—在传奇版本相同的情况下,各区封包是相同的。不同的只是位
置代码而已,大家看一下上面的2排数据,第一位 23 是开始代码,第 2位是 31-39的数
字,是数据编号,3-6位就是位置代码。在FILTER中把原数据行的3-6位清空不进行过滤
,就能简单的实现全区通用。

  再检查一次看看有没有错误,如果可以的话按QUIT推出FILTER编辑框。回到FILTER
控制窗口,勾上刚才修改的FILTER,启动FILTER(从左到右第5个按钮)进入传奇,点刘
老头,如果正常的话刘老头会拿走你5000块钱跟你说起废话

回到WPE的FILTER控制框保存刚才修改的FILTER为FLT文件

WPE系列教程之攻击代码篇

特殊修理:点普通修理,有时候(特别第一次点击)会出不来什么什么“正好有材料,
价格是3倍什么什么的废话,你需要点返回再点修理到一直出来为止,基本上第2次就可
以了。

  传奇出错:(个人想法)主要是封包长度问题。进行封包过滤的时候由于过滤封包
长度要大于待过滤封包。导致传奇非法。出错。目前还没解决,希望高手们能多发发帖
子。。。

  攻击方式:战士在传奇里攻击方式有空放3种(按住SHIFT打空),打怪4种(基本,
攻杀,刺杀,烈火),攻击方向有8个,代码3C,3D,3E,3F,41,42等。攻杀代码是64
,刺杀是68,放出攻杀和刺杀是由客户机随即决定的。刺杀是有条件的(也是客户机根
据条件决定的)。所以只要对截取到的封包过滤攻击方式那一字节就可以放出。

三:怎么来分析我们截获的封包?

首先我们将WPE截获的封包保存为文本文件,然后打开它,这时会看到如下的数据(这里
我们以金庸群侠传里PK店小二客户端发送的数据为例来讲解):

第一个文件:
SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B 
SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B 
SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A 
SEND-> 0000 E6 56 1B C0 68 12 12 12 5A
SEND->0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 
SEND-> 0000 E6 56 17 C9 12
第二个文件: 
SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E 
SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D 
SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 
SEND-> 0000 83 33 7E A5 21 77 77 77 3F 
SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 
SEND-> 0000 83 33 72 AC 77

我们发现两次PK店小二的数据格式一样,但是内容却不相同,我们是PK的同一个NPC,为
什么会不同呢? 原来金庸群侠传的封包是经过了加密运算才在网路上传输的,那么我们
面临的问题就是如何将密文解密成明文再分析了。

因为一般的数据包加密都是异或运算,所以这里先讲一下什么是异或。 简单的说,异或
就是”相同为0,不同为1″(这是针对二进制按位来讲的),举个例子,0001和0010异或
,我们按位对比,得到异或结果是0011,计算的方法是:0001的第4位为0,0010的第4位
为0,它们相同,则异或结果的第4位按照”相同为0,不同为1″的原则得到0,0001的第3
位为0,0010的第3位为0,则异或结果的第3位得到0,0001的第2位为0,0010的第2位为1
,则异或结果的第2位得到1,0001的第1位为1,0010的第1位为0,则异或结果的第1位得
到1,组合起来就是0011。异或运算今后会遇到很多,大家可以先熟悉熟悉,熟练了对分
析很有帮助的。

下面我们继续看看上面的两个文件,按照常理,数据包的数据不会全部都有值的,游戏
开发时会预留一些字节空间来便于日后的扩充,也就是说数据包里会存在一些”00″的字
节,观察上面的文件,我们会发现文件一里很多”12″,文件二里很多”77″,那么这是不
是代表我们说的”00″呢?推理到这里,我们就开始行动吧!

我们把文件一与”12″异或,文件二与”77″异或,当然用手算很费事,我们使用”M2M 
1.0 加密封包分析工具”来计算就方便多了。得到下面的结果:

第一个文件:

SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 
SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 
SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 
SEND-> 0000 F4 44 05 DB 00

第二个文件: 
1
SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 
SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 
SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 
SEND-> 0000 F4 44 05 DB 00

哈,这一下两个文件大部分都一样啦,说明我们的推理是正确的,上面就是我们需要的
明文!

接下来就是搞清楚一些关键的字节所代表的含义,这就需要截获大量的数据来分析。

首先我们会发现每个数据包都是”F4 44″开头,第3个字节是变化的,但是变化很有规律
。我们来看看各个包的长度,发现什么没有?对了,第3个字节就是包的长度! 通过截
获大量的数据包,我们判断第4个字节代表指令,也就是说客户端告诉服务器进行的是什
么操作。例如向服务器请求战斗指令为”30″,战斗中移动指令为”D4″等。 接下来,我们
就需要分析一下上面第一个包”F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89″,在这个包里包含什么信息呢?应该
有通知服务器你PK的哪个NPC吧,我们就先来找找这个店小二的代码在什么地方。 我们
再PK一个小喽罗(就是大理客栈外的那个咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 
05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 
00 00 C0 我们根据常理分析,游戏里的NPC种类虽然不会超过65535(FFFF),但开发时
不会把自己限制在字的范围,那样不利于游戏的扩充,所以我们在双字里看看。通过”店
小二”和”小喽罗”两个包的对比,我们把目标放在”6C 79 F6 05″和”CF 26 00 00″上。(
对比一下很容易的,但你不能太迟钝咯,呵呵)我们再看看后面的包,在后面的包里应
该还会出现NPC的代码,比如移动的包,游戏允许观战,服务器必然需要知道NPC的移动
坐标,再广播给观战的其他玩家。在后面第4个包”SEND-> 0000 F4 44 10 DA 01 DB 
6C 79 F6 05 02 27 35 01 00 00″里我们又看到了”6C 79 F6 05″,初步断定店小二的代
码就是它了! (这分析里边包含了很多工作的,大家可以用WPE截下数据来自己分析分
析)

第一个包的分析暂时就到这里(里面还有的信息我们暂时不需要完全清楚了)

我们看看第4个包”SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00″
,再截获PK黄狗的包,(狗会出来2只哦)看看包的格式: SEND-> 0000 F4 44 1A DA 
02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 
00

根据上面的分析,黄狗的代码为”4B 7D F6 05″(100040011),不过两只黄狗服务器怎
样分辨呢?看看”EB 03 F8 05″(100140011),是上一个代码加上100000,呵呵,这样
服务器就可以认出两只黄狗了。我们再通过野外遇敌截获的数据包来证实,果然如此。

那么,这个包的格式应该比较清楚了:第3个字节为包的长度,”DA”为指令,第5个字节
为NPC个数,从第7个字节开始的10个字节代表一个NPC的信息,多一个NPC就多10个字节
来表示。

大家如果玩过网金,必然知道随机遇敌有时会出现增援,我们就利用游戏这个增援来让
每次战斗都会出现增援的NPC吧。

通过在战斗中出现增援截获的数据包,我们会发现服务器端发送了这样一个包: F4 
44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC的代
码(这里我们就简单的以黄狗的代码来举例)。 那么,我们就利用单机代理技术来同时
欺骗客户端和服务器吧!

好了,呼叫NPC的工作到这里算是完成了一小半,接下来的事情,怎样修改封包和发送封
包,我们下节继续讲解吧。

三:怎么来分析我们截获的封包?

首先我们将WPE截获的封包保存为文本文件,然后打开它,这时会看到如下的数据(这里
我们以金庸群侠传里PK店小二客户端发送的数据为例来讲解):

第一个文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B 
SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 
1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 
0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 
C9 12

第二个文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E 
SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 
7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 
0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 
AC 77

我们发现两次PK店小二的数据格式一样,但是内容却不相同,我们是PK的同一个NPC,为
什么会不同呢? 原来金庸群侠传的封包是经过了加密运算才在网路上传输的,那么我们
面临的问题就是如何将密文解密成明文再分析了。

因为一般的数据包加密都是异或运算,所以这里先讲一下什么是异或。 简单的说,异或
就是”相同为0,不同为1″(这是针对二进制按位来讲的),举个例子,0001和0010异或
,我们按位对比,得到异或结果是0011,计算的方法是:0001的第4位为0,0010的第4位
为0,它们相同,则异或结果的第4位按照”相同为0,不同为1″的原则得到0,0001的第3
位为0,0010的第3位为0,则异或结果的第3位得到0,0001的第2位为0,0010的第2位为1
,则异或结果的第2位得到1,0001的第1位为1,0010的第1位为0,则异或结果的第1位得
到1,组合起来就是0011。异或运算今后会遇到很多,大家可以先熟悉熟悉,熟练了对分
析很有帮助的。

下面我们继续看看上面的两个文件,按照常理,数据包的数据不会全部都有值的,游戏
开发时会预留一些字节空间来便于日后的扩充,也就是说数据包里会存在一些”00″的字
节,观察上面的文件,我们会发现文件一里很多”12″,文件二里很多”77″,那么这是不
是代表我们说的”00″呢?推理到这里,我们就开始行动吧!

我们把文件一与”12″异或,文件二与”77″异或,当然用手算很费事,我们使用”M2M 
1.0 加密封包分析工具”来计算就方便多了。得到下面的结果:

第一个文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 
44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 
F4 44 05 DB 00

第二个文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 
44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 
F4 44 05 DB 00

哈,这一下两个文件大部分都一样啦,说明我们的推理是正确的,上面就是我们需要的
明文!

接下来就是搞清楚一些关键的字节所代表的含义,这就需要截获大量的数据来分析。

首先我们会发现每个数据包都是”F4 44″开头,第3个字节是变化的,但是变化很有规律
。我们来看看各个包的长度,发现什么没有?对了,第3个字节就是包的长度! 通过截
获大量的数据包,我们判断第4个字节代表指令,也就是说客户端告诉服务器进行的是什
么操作。例如向服务器请求战斗指令为”30″,战斗中移动指令为”D4″等。 接下来,我们
就需要分析一下上面第一个包”F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89″,在这个包里包含什么信息呢?应该
有通知服务器你PK的哪个NPC吧,我们就先来找找这个店小二的代码在什么地方。 我们
再PK一个小喽罗(就是大理客栈外的那个咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 
05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 
00 00 C0 我们根据常理分析,游戏里的NPC种类虽然不会超过65535(FFFF),但开发时
不会把自己限制在字的范围,那样不利于游戏的扩充,所以我们在双字里看看。通过”店
小二”和”小喽罗”两个包的对比,我们把目标放在”6C 79 F6 05″和”CF 26 00 00″上。(
对比一下很容易的,但你不能太迟钝咯,呵呵)我们再看看后面的包,在后面的包里应
该还会出现NPC的代码,比如移动的包,游戏允许观战,服务器必然需要知道NPC的移动
坐标,再广播给观战的其他玩家。在后面第4个包”SEND-> 0000 F4 44 10 DA 01 DB 
6C 79 F6 05 02 27 35 01 00 00″里我们又看到了”6C 79 F6 05″,初步断定店小二的代
码就是它了! (这分析里边包含了很多工作的,大家可以用WPE截下数据来自己分析分
析)

第一个包的分析暂时就到这里(里面还有的信息我们暂时不需要完全清楚了)

我们看看第4个包”SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00″
,再截获PK黄狗的包,(狗会出来2只哦)看看包的格式: SEND-> 0000 F4 44 1A DA 
02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 
00

根据上面的分析,黄狗的代码为”4B 7D F6 05″(100040011),不过两只黄狗服务器怎
样分辨呢?看看”EB 03 F8 05″(100140011),是上一个代码加上100000,呵呵,这样
服务器就可以认出两只黄狗了。我们再通过野外遇敌截获的数据包来证实,果然如此。

那么,这个包的格式应该比较清楚了:第3个字节为包的长度,”DA”为指令,第5个字节
为NPC个数,从第7个字节开始的10个字节代表一个NPC的信息,多一个NPC就多10个字节
来表示。

大家如果玩过网金,必然知道随机遇敌有时会出现增援,我们就利用游戏这个增援来让
每次战斗都会出现增援的NPC吧。

通过在战斗中出现增援截获的数据包,我们会发现服务器端发送了这样一个包: F4 
44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC的代
码(这里我们就简单的以黄狗的代码来举例)。 那么,我们就利用单机代理技术来同时
欺骗客户端和服务器吧!

好了,呼叫NPC的工作到这里算是完成了一小半,接下来的事情,怎样修改封包和发送封
包,我们下节继续讲解吧。

三:怎么来分析我们截获的封包?

首先我们将WPE截获的封包保存为文本文件,然后打开它,这时会看到如下的数据(这里
我们以金庸群侠传里PK店小二客户端发送的数据为例来讲解):

第一个文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B 
SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 
1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 
0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 
C9 12

第二个文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E 
SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 
7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 
0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 
AC 77

我们发现两次PK店小二的数据格式一样,但是内容却不相同,我们是PK的同一个NPC,为
什么会不同呢? 原来金庸群侠传的封包是经过了加密运算才在网路上传输的,那么我们
面临的问题就是如何将密文解密成明文再分析了。

因为一般的数据包加密都是异或运算,所以这里先讲一下什么是异或。 简单的说,异或
就是”相同为0,不同为1″(这是针对二进制按位来讲的),举个例子,0001和0010异或
,我们按位对比,得到异或结果是0011,计算的方法是:0001的第4位为0,0010的第4位
为0,它们相同,则异或结果的第4位按照”相同为0,不同为1″的原则得到0,0001的第3
位为0,0010的第3位为0,则异或结果的第3位得到0,0001的第2位为0,0010的第2位为1
,则异或结果的第2位得到1,0001的第1位为1,0010的第1位为0,则异或结果的第1位得
到1,组合起来就是0011。异或运算今后会遇到很多,大家可以先熟悉熟悉,熟练了对分
析很有帮助的。

下面我们继续看看上面的两个文件,按照常理,数据包的数据不会全部都有值的,游戏
开发时会预留一些字节空间来便于日后的扩充,也就是说数据包里会存在一些”00″的字
节,观察上面的文件,我们会发现文件一里很多”12″,文件二里很多”77″,那么这是不
是代表我们说的”00″呢?推理到这里,我们就开始行动吧!

我们把文件一与”12″异或,文件二与”77″异或,当然用手算很费事,我们使用”M2M 
1.0 加密封包分析工具”来计算就方便多了。得到下面的结果:

第一个文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 
44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 
F4 44 05 DB 00

第二个文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 
44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 
SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 
F4 44 05 DB 00

哈,这一下两个文件大部分都一样啦,说明我们的推理是正确的,上面就是我们需要的
明文!

接下来就是搞清楚一些关键的字节所代表的含义,这就需要截获大量的数据来分析。

首先我们会发现每个数据包都是”F4 44″开头,第3个字节是变化的,但是变化很有规律
。我们来看看各个包的长度,发现什么没有?对了,第3个字节就是包的长度! 通过截
获大量的数据包,我们判断第4个字节代表指令,也就是说客户端告诉服务器进行的是什
么操作。例如向服务器请求战斗指令为”30″,战斗中移动指令为”D4″等。 接下来,我们
就需要分析一下上面第一个包”F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 
05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89″,在这个包里包含什么信息呢?应该
有通知服务器你PK的哪个NPC吧,我们就先来找找这个店小二的代码在什么地方。 我们
再PK一个小喽罗(就是大理客栈外的那个咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 
05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 
00 00 C0 我们根据常理分析,游戏里的NPC种类虽然不会超过65535(FFFF),但开发时
不会把自己限制在字的范围,那样不利于游戏的扩充,所以我们在双字里看看。通过”店
小二”和”小喽罗”两个包的对比,我们把目标放在”6C 79 F6 05″和”CF 26 00 00″上。(
对比一下很容易的,但你不能太迟钝咯,呵呵)我们再看看后面的包,在后面的包里应
该还会出现NPC的代码,比如移动的包,游戏允许观战,服务器必然需要知道NPC的移动
坐标,再广播给观战的其他玩家。在后面第4个包”SEND-> 0000 F4 44 10 DA 01 DB 
6C 79 F6 05 02 27 35 01 00 00″里我们又看到了”6C 79 F6 05″,初步断定店小二的代
码就是它了! (这分析里边包含了很多工作的,大家可以用WPE截下数据来自己分析分
析)

第一个包的分析暂时就到这里(里面还有的信息我们暂时不需要完全清楚了)

我们看看第4个包”SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00″
,再截获PK黄狗的包,(狗会出来2只哦)看看包的格式: SEND-> 0000 F4 44 1A DA 
02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 
00

根据上面的分析,黄狗的代码为”4B 7D F6 05″(100040011),不过两只黄狗服务器怎
样分辨呢?看看”EB 03 F8 05″(100140011),是上一个代码加上100000,呵呵,这样
服务器就可以认出两只黄狗了。我们再通过野外遇敌截获的数据包来证实,果然如此。

那么,这个包的格式应该比较清楚了:第3个字节为包的长度,”DA”为指令,第5个字节
为NPC个数,从第7个字节开始的10个字节代表一个NPC的信息,多一个NPC就多10个字节
来表示。

大家如果玩过网金,必然知道随机遇敌有时会出现增援,我们就利用游戏这个增援来让
每次战斗都会出现增援的NPC吧。

通过在战斗中出现增援截获的数据包,我们会发现服务器端发送了这样一个包: F4 
44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC的代
码(这里我们就简单的以黄狗的代码来举例)。 那么,我们就利用单机代理技术来同时
欺骗客户端和服务器吧!

好了,呼叫NPC的工作到这里算是完成了一小半,接下来的事情,怎样修改封包和发送封
包,我们下节继续讲解吧。

进制的转换
 

 

进制的转换
十进制 二进制 八进制  十六进制 
  0   0000   0     0 
  1   0001   1     1 
  2   0010   2     2 
  3   0011   3     3 
  4   0100   4     4 
  5   0101   5     5 
  6   0110   6     6 
  7   0111   7     7 
  8   1000   10    8 
  9   1001   11    9 
 10   1010   12    A 
 11   1011   13    B 
 12   1100   14    C 
 13   1101   15    D 
 14   1110   16    E 
 15   1111   17    F

 

这里我只说十进制转换成任意进制数的方法:

十进制数转任意进制数方法是:十进制数整数转换成任意进制数用除基取余法,

十进制小数转换成任意进制小数用乘基取余法.

例:把十进制小数205.7转换成十六进制

整数部分:十进制数/16————-十六进制数位系数=余数

205/16=12 ——————— K0=13 K0=D

12/16=0 ———————– K1=12 K1=C

小数部分:十进制小数*16 ——— 十六进制小数的数位系数=乘积整数部分

0.7*16=11.2 ——————- K-1=11 K-1=B

0.2*16=3.2 ———————- K-2=3 K-2=3

略 —————————- 略

转换结果是:205.7约等于CD.B3H
 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容