很多人都基本知道WPE怎么工作的了,但是还是不能用它来修改游戏,不能做出外挂来,为什么?其实很简单,因为他们对封包的分析不够,不知道封包是可以加密的,更不知道怎么解密,这里我们给大家讲解游戏里面使用频率非常高的几大加密方式-----异或运算加密、背包运算加密等等,并给大家讲解怎么分析这些加密的封包,怎么找到它的内在规律,怎样自己制作假封包满足它的加密规律,来达到修改游戏的目的!
一般来说,网络游戏的封包都可以加密,对一般数据采用简单的加密,不会影响游戏速度,但是对游戏的安全却非常管用,对于非常重要的数据,则采用复杂的加密方式,可以保证游戏平衡,例如:游戏中人物的等级,这个属于非常重要的数据,必须采用非常好的加密方式来保密数据不会轻易被修改,好了,这个大家自然明白,那么我们就开始3大常用加密方式告诉大家,并给出解密方法,大家注意掌握,这个对游戏修改至关重要!不能解密,就做不出象样的外挂!
异或运算加密:
异或运算加密是通常的加密方式,为了大家直观理解,下面给大家图片分析!
这个是一个非常简单的异或运算,经过加密以后,我们看到的是a,b,c ,d ,e ,f但是,他的实际意思不是这样的,实际意思是,1,2,3,4,5,6,当我们看到的是1时,他的实际意思就是6,当然,这个异或运算是比较简单的,但是在映射的时候没有按照一定规律影射,如果要在只知道a,b,c的情况下来破解其中的规律,那是需要一定经验和技巧的!
如果大家有高中以上文化水平(我想都该没有问题吧?),我想利用函数的方法来讲解加密问题,这样大家容易理解,大家知道函数
y=f(x),
这里的 x就相当于我们图上的abcdef,而y呢就是123456,箭头就是f,f是映射方式,函数就是某种映射方式,从函数和映射的角度来理解加密是非常好的和正确的,
我们为什么要讲这种加密方式呢?
因为这种加密方式,不是非常隐蔽,但是非常容易实现,建立一个映射,可以在整个软件中调用,所以,在游戏制作的时候,制作一个映射并不需要太高的技术,而且这个映射可以在任何时候修改,非常容易维护和更新,如果映射规律被破解了,也可以更新游戏来更新映射,达到保密的作用,所以,这种加密方式是游戏里面经常采用的加密方式,更重要的是,这种加密方式对电脑要求低,运算速度快,不会影响游戏速度,所以经常被采用,如果能很好地破解这种加密方式,那么对于游戏里面的一些关键数据,我们就可以非常方便的修改了。
下面结合一个网吧管理软件来讲解异或运算加密,并给大家讲解如何破解这种加密方式:
在一个网管软件中,有一个会员功能,功能是这样的,凡是会员,就可以不在网吧老板那儿去登记而是直接上机,开机后填写自己的用户名和密码就可以解锁,可以开始使用电脑了,相信去过网吧的人都知道这个功能吧?
其实,该软件实现该功能的过程是这样的,首先用户输入用户名和密码,然后把用户名和密码发送到主控电脑(一般是网吧老板身边的那台电脑),由主控电脑检查该用户名是否存在,如果存在,再检查密码是否正确,这些我们不管了,我们已经知道用户名和密码都会发送到主控电脑那儿去,好,有密码发送,就会有封包发到主控机上去,就可以中途拦截,这个是WPE的专长,当然也可以使用其他黑客工具来拦截,我们不管那么多,先拦截几个用户名密码先,下面这个是某台电脑上被拦截到的封包,内容如下:
send 0000 01 00 00 00 7a 68 61 6e 67 6a 75 6e 30 30 37 00
00 02 00 64 66 6c 64 68 6a 66 64 65 6a 68 00 00
要分析这个封包还真是麻烦,呵呵,那么长,总不能乱抓吧?这里有简单方法的,别忘了我们前面已经讲过的方法哦,我们的黄金规则:比较法则和结构法则,这里我们用比较法则,利用比较法则的相同比较和不同比较,很容易辨认用户名和密码各在那一段,这样对我们的分析是非常有用的,至于如何比较,在前面的章节都详细说了,相信大家都知道了,好了,这里就不再罗嗦了!直接给出!
通过比较我们知道,
用户名是: 7a 68 61 6e 67 6a 75 6e 30 30 37
密码是: 64 66 6c 64 68 6a 66 64 65 6a 68
马上使用我们的进位专家来对付这些16进制的文字,翻译出来的结果如下:
用户名:zhangjun007
密码:dfldhjfdejh
显然密码是不大正确的,因为这个密码一般人是很难记住的,从一般的情况分析,一般不会把密码随便显示出来的,总要经过加密才可以安全地发送,不然是很危险的,万一被人拦截,很容易被盗,所以,我们有充分的理由相信,这个不是真正的密码,那么怎么分析呢?这下该运用我们的异或运算分析来分析这个密码!
看一看密码的特点,全部是字母,而且集中在A到L,在没有任何分析的前提下,我们可以假设这是一个单满映射(关于单满映射的特点及分析方法在后面给出),那么我们得到的是映射的原象,现在要自己建立一个映射来分析,简单的,从字母到字母的映射,看能不能找到一个规律,分析很长,我们建立了从A到A的映射到从A到Z的映射逐个分析,结果都是错的,所以,应该考虑从字母到数字的映射,最后检查出映射是从C到L映射到0-9,分析结果出来了:
密码是:13915731275
估计是个手机号,经过测试,这个密码是正确的,可以使用!
上面这个例子不是教大家怎么分析,而是叫大家明白异或运算加密是怎么回事!好了,下面我们进入异或运算的分析,大家注意分析的方法,并多加练习,以后遇到加密的封包就会很容易对付的!
如果大家学习过加密技术,可以跳过您所熟悉的章节!
加密解密
异或运算分析方法,为了简单,这里我们不再一封包作为分析,因为封包要从16位到10位的步骤,很麻烦,我们直接看下面的异或。
从一个进制到另一个进制是一中异或运算,而且是单满映射,所谓单满映射,意思是每一个象都有原象,每一个原象都有象,例如我们的映射是从16进制到10进制,象,就是10进制里面的所有的数,而16进制里面的数就是原象,每一个10进制的数都唯一对应一个16进制的数,所以说所有象都有唯一一个原象,而反过来,每一个16进制也唯一对应一个10进制的数,所以每一个象都有且只有一个象,这样的映射就是单满映射!这样的映射使用起来效率最高,可以知道每次调用函数返回的值都是有用的,下面这个也是单满影射:
但是这个运算要分析起来是复杂的,我们从简单的分析,你想一想,如果我们这样对应,0对应A,1对应B,这样一个一个对应下去,那么如果你的生日是:1986年2月14日,如果我们把生日加密,按照我们的映射,结果就是这样了,BJIG年C月BE 日,看看这个结果,是不是不那么容易认了,这个就是加密,如果改变对应的开头,不是0对应A而是0对应E那么会是怎么样呢?当然会变的,异或运算本身简单,但是可以看出来,加密还是很有效的!
那么我们怎么知道一个封包是不是异或运算加密的呢?
我们不知道!
对于这个回答,大家也许有写心灰,其实完全没有必要,你知道我早上吃的什么?不知道吧?当然不知道,谁知道呢?但是我们可以知道,要么吃的食物,要么喝的水,要么什么都没有吃,如果没吃,很简单嘛,如果吃了,我把所有食物都说一遍,总有一个是你吃的吧,所以,我们虽然不知道封包具体使用异或运算没有,但是我们可以假设已经采用了,然后继续分析!异或运算不改变数据的任何性质,不会影响任何分析。
那么怎么分析呢?如果一个封包确实是异或运算加密的,我们如何可以找到它的加密方法呢?这就要采用枚举法来做了,所谓的枚举法,也称穷举法,如果你认为你发封包应该是数字,那么就找到数字的映射,可以建立方程,比如:y=F(x)
那么我们找几个点,称为已知点,然后解方程,例如,我们我们已经知道:a对应的是0,d对应的是3,f对应的是5,那么我们可以这样做,F(a)=0,F(d)=3,
而这种异或运算都是线性的,也就是可以认为是一维的,那么有两个点就可以算出来了,我们可以认为,映射就是:F(x)=Asc(x)-97,这里是Asc()是VB里面的一个函数,就是返回该字母的Ascii码,这样,我们可以带f对应5进行检验,也许你会问我怎么来这些点,这些可以确定函数的点从那里来?其实很简单,举个例子,你要知道游戏里面钱的数字与封包里面数字的联系怎么办,要确定这个对应关系,就要自己去找一些点来确定,我们可以通过一些方法来找到的,例如,我们扔掉一元钱,看看数字是多少,这里就找到一点了,一个点如果确定不了,可以多取一些点来确定,如果还是不行,那么再来,如果是不规则的影射,就要取遍所有点,当然象钱这样的数字,由于可边范围太大,不可能建立想我们给的图那样的非规则影射,否则很难计算,影响游戏速度,所以可以肯定:游戏里面钱的数字的加密一定是规则的运算加密的,至于是不是异或运算加密的就不知道了!但是我们可以假设是,然后做我们想做的事啊!
当然,异或运算的规则是自己建立的,可以有无穷多,要给大家讲解所有的破解方法是不行的,大家是要多动手分析才行,这个需要的是经验和技巧,你要从别人的角度想,“如果我要加密,我会怎么做能做到计算简单,加密性好,而且加密函数又容易设计”,想多了,你就知道其实异或运算加密是可以比较容易地分析出来的,当然,光靠我们的大脑是痛苦的,何不找一些工具来帮助分析呢?很多黑客软件都具有分析加密数据的功能,试者学习一些,会对您的封包破解很有帮助的,也许他们能提供更好的破解思路也不一定!
加密解密
背包加密是一中相当高级的加密方式,不容易破解,而且还原也相对容易,因此采用这种加密方式加密游戏数据也是非常好的,只要知道背包,就可以轻易算出来,所以在游戏里面采用这种加密方式加密对游戏的影响也不是很大,不会给服务器带来太大的负担,而且加密是非常安全的,对于一些重要的数据采用这种方式加密是非常可靠的,说了那么多,你也许会问:“什么是背包加密方式”,好下面给大家说明。
背包分两种,加法背包和乘法背包!想讲加法背包!
我们知道:1<2,1+2<4,1+2+4<8,1+2+4+8<16,……,那么如果我们选择这样一些数,这些数从小到大排列,如果前面所有的数加起来的值总小于后面的数,那么这些数就可以构成一个背包,我们给一个这个背包里面的某些数的和,这个数就是被加密的数,由这个背包组成这个数只有一种组合方式,这个方式就是秘密了,例如给大家一个封包(2,3,6,12,24,48),由这个背包里的某些数构成的数:86,你知道86怎么来的吗?当然,你看着背包里面的内容,可以知道是由2+12+24+48得到的,如果你没有这个背包,而是直接得到这个86,你知道组成这个86的最小的数是多少吗?你无法知道,因为加起来等于86的数非常多:85+1=86,82+2=86等等,你是无法知道的,所以,背包加密非常难破。
那么游戏里面如何利用这个加密呢?可以给大家一个例子。
如果游戏里面,用户名和密码只能有字母和数字组成,那么总共就那么36个元素,我们利用一个包含36个元素的背包,背包的一个元素对应一个字母或者数字,当玩家设好用户名后,我们把这个用户名翻译成背包里面的元素,然后把这些用户转化而来的数字加起来,得到一个数,这个数就是用户名,你得到这个数,你知道用户名吗?也许大家还没明白我说什么,我把例子更具体一点,你也许就明白了!
有个密码是:511,这个密码是经过加法背包加密的,如果你没有背包,你知道密码吗?不知道吧,呵呵!
如果我告诉你背包是:(1,2,4,8,16,32,64,128,256),也许你对密码了解多也些了!
如果我告诉你,这个是加法背包,而且有如下对应关系:1对应a,2对应b,4对应c,8对应d,16对应e,32对应f,64——>g,128---->h,256---->i,那么你也许知道密码就是:abcdefghi,怎么样,从511到这个密码,是不是很难想到呢?也许你会说,如果密码不是这个顺序呢?当然,这个完全是可能的,但是我们这里为了简单就没有考虑这个。
这么复杂的加密,怎么解密?有如下两中破解方法:
1.利用孤立点破解;2.利用背包破解。
所谓孤立点,还是以上面的背包为例子,我们可以把密码设为a,看看得到了什么密码?1,如果我们把密码设为b,得到的密码为2,同理,可以把背包里面的所有元素都利用孤立点的方法全部枚举出来,这样我们就把背包弄到手了,对下面的破解就不成问题了,是不是很简单?其实在加密的时候,也许它们回利用异或运算先加密一下,再利用背包加密,这样更难破,孤立点方法非常有效,但是不是万能的,要结合前面的方法配合使用!
利用背包,这个就简单了,想一想,要加密也的有背包才能完成加密啊,要解密也要背包啊,呵呵,这就是说,不管是游戏的用户端,还是游戏的服务器端,都会有该背包的,找到该背包不是就解决问题了吗?怎么找?参考其他书籍,本书无法容纳那么多的内容!特别注意游戏编程,知道是怎么做的就知道东西在哪儿了!
讲完加法背包,下面讲乘法背包!
加密解密
乘法背包
乘法背包比加法背包更复杂,不仅是运算量大了很多,更重要的是你得到的一个被加密了的数据更大,一般都是上亿的,而且在许多机密的机关里面,背包的数据都不是有这个单位,而是用位,一个加密的数据有几百位,呵呵,你得到这个数字,可以看到你满脸的茫然,如果这个数不是10进制,而是什么7进制啊,3进制啊,这些很不常用的进制,你要破可就难了,不过不要害怕,游戏里面绝对不会有这么复杂的加密的,如果一个数据就几百位,而且还非常用进制,那么可以想想电脑要算多久啊,会多么影响游戏速度啊!所以我们有充分的理由相信,游戏里面加密是简单的,还了,下面给大家看看乘法背包:
1<2,1+2<3,1*2*3<7,1*2*3*7<43,1*2*3*7*42<1683, 数字的增长还是很快的,之所以复杂,就是因为数字很大啊!
背包的特点是:如果背包里面的数据按小到大排列,那么,前面所有数据的乘积小于后面的任何一个元素,这个就是背包的特点,是不是很简单,但是要知道乘积的数字的增长是非常快的!
怎么破解乘法背包呢?
同加法背包一样,可以利用孤立点的方法,也可以使用直接得到背包的方法破解!
一般来说游戏里面不会使用乘法背包来加密,但是如果使用一些小的数据,也不是不可以的,大家对这种加密也可以了解一下!:
如果我们已经知道背包了,也得到加密数据,我们怎么知道这个背包数是有那些元素组曾的呢?
在加法背包里面是这样的,找背包里面最接近这个数但是又比这个数小的数A,这个数A 一定在里面,然后把加密的数减去A,比较被减后的数,继续重复上面的操作,是很容易就能找到所有的组成元素了!乘法的方法也是一样的道理,这里就不介绍了!
背包解密是很复杂的,大家可以稍微学习一些,能掌握就掌握,不能掌握就算了!
好了,加密解密就这些内容,如果大家有兴趣,可以学习更多的加密解密技术,这个技术是新兴的技术,很多数据都需要加密,例如银行的数据,加密就非常重要,如果你学到这门技术,对你的以后发展也是有用的!
WPE:Winsock Packet Editor
WPE中文名称是:网络封包编辑器
很简单的一个道理,你在玩网络游戏的时候,你本地的客户端给服务器发送信息,比如你升级的,聊天的,加点的,很多很多,你每一个动作都会产生大量的信息发送给服务器(只是你看不见)。而服务器返回给你的信息是经过多重加密的(这个要看对方服务器的加密情况了)就想你贴出来的那些看不懂的数字,就是加密过的数据,仅仅是一个数字1而已。。。。。
如果你要利用WPE这个工具把你加密过的信息,或者你截取的信息发送给服务器的话,我想,就WPE,是实现不了的。如果能实现,也就证明了对方服务器的不安全性!
wpe所要改的,不是[游戏里面的数值],而是[伪造信息封包]。
什么意思??就是我们用wpe所要改的,并不是"生命力由100变成10000"之类的东西, 这种东西无法用wpe改, 我们要改的可能是把"我卖了一个500元的东西" 改成"我卖了一个50000元的东西"或把"我得了10的exp"改成"我得了10000的exp"之类的,或者是明明身上没东西还一直卖"500元的东西"或没怪物还"一直打10的exp"
我一样的
向一楼高手学习