加密解密2

异或运算分析方法,为了简单,这里我们不再一封包作为分析,因为封包要从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进行检验,也许你会问我怎么来这些点,这些可以确定函数的点从那里来?其实很简单,举个例子,你要知道游戏里面钱的数字与封包里面数字的联系怎么办,要确定这个对应关系,就要自己去找一些点来确定,我们可以通过一些方法来找到的,例如,我们扔掉一元钱,看看数字是多少,这里就找到一点了,一个点如果确定不了,可以多取一些点来确定,如果还是不行,那么再来,如果是不规则的影射,就要取遍所有点,当然象钱这样的数字,由于可边范围太大,不可能建立想我们给的图那样的非规则影射,否则很难计算,影响游戏速度,所以可以肯定:游戏里面钱的数字的加密一定是规则的运算加密的,至于是不是异或运算加密的就不知道了!但是我们可以假设是,然后做我们想做的事啊!
  
当然,异或运算的规则是自己建立的,可以有无穷多,要给大家讲解所有的破解方法是不行的,大家是要多动手分析才行,这个需要的是经验和技巧,你要从别人的角度想,“如果我要加密,我会怎么做能做到计算简单,加密性好,而且加密函数又容易设计”,想多了,你就知道其实异或运算加密是可以比较容易地分析出来的,当然,光靠我们的大脑是痛苦的,何不找一些工具来帮助分析呢?很多黑客软件都具有分析加密数据的功能,试者学习一些,会对您的封包破解很有帮助的,也许他们能提供更好的破解思路也不一定!

posted @ 2018-12-16 13:51  匿名小猿  阅读(286)  评论(0编辑  收藏  举报