@syskeylbz 看你的讲解,我比之前明白了很多。谢谢!
1,makesalt(制造随机数salt)函数里面有一句var _loc_2:*=MathRandom()*_loc_1.time
我百度没搜到后面.time是什么意思。。。这个".time"的意思在这里又很重要。。。只找到
"对象.gettime"返回的是把"1970/1/1"与“上一句代码(new date())获取的时间“作差的差值,
并以毫秒来表示。这里的_loc_1.time如果是这个意思,就是返回一个时间差,然后和
MathRandom()返回值相乘,得到一个由”当前时间“和”mathrandom随机数“决定的数。
这个数就是makesalt()函数的返回值。然后根据代码第9行(才发现AS代码前面有行数标识
。。。),确定selfsalt的值。是这样吗。。。
2,代码第37行,出现了param1变量,并且把param1的值赋值给targetsalt,然后获得了
selfsalt 和targetsalt,执行makekey()制造密钥。param1的值是怎么得到的。。这个SWF文
件有很多AS代码文件,虽然英文名字都把功能写得很清楚,但是我不知道怎么去看这个
param1是作为什么意义传进这个settargetsalt()函数。。。
3,你上面的给的式子我看了,代码制造的密钥keybuff[]是一个4个元素的数组。代码第44行
到第62行,我只看到一个把param1字节数组的长度值赋值给_loc_4。之后从param1的0号
元素开始,执行
param1[0]=param1[0] ^ keybuff[0%4]
param1[1]=param1[1] ^ keybuff[1%4]
直到对param1字节数组里的每个元素完成加密。
那么总结下,就是需要知道param1是个什么值。。。这个我无从下手。。还需要知道mathrandom()
的值,这个是返回一个0到1的随机数,该不会每次发封包,都执行一次mathrandom(),生成一个新的
随机数,然后生成一个新的KEY和keybuff[],然后对明文加密把。。。。。或者加载flash页游,只执行
一次mathrandom(),生成一个key。这个KEY不会改变,直到退出flash页游。下次加载flash,重新执行
mathrandom(),生成新KEY。或者这里的mathrandom()有其他意义?。。。。。。
我有一个猜想,param1里面存的是”封包里面需要加密的明文字段“。代码第39行,把要加密的明文数值
赋值给targetsalt,之后执行makekey()函数,用 "明文数值" 与 "mathrandom()和当前时间决定的selfsalt"
进行运算,决定keybuff[]。之后再把param1(需要加密的明文)转成字节数组,在encode函数里,按顺序把明文
的每8位,与对应的keybuff数组元素进行运算,完成对明文的加密。这是我的猜想,不知道是不是正确。。。
如果前面分析得不错的话,只要知道下面3个,就能知道加密方式。
1,mathrandom的值。是没加载一次flash,都生成一个mathrandom()的值,并且在flash关闭前这个值不会变。
2,第22行那个".time"后缀的意义。是和".gettime"一样,取当前时间与1970年1月1日的时间差(时间差以毫秒表
示)。。。?
3,param1的值和逻辑意义(有关于系统时间或者其它的逻辑意义)。
花了几个小时整理,希望我有表达清楚我想说的。。。。
附件里有GameFrame.swf,里面除了这个AS代码,还有其它的,其它的我只看到有个名为"lientpocket"的代
码文件对加密可能有用。
能不能帮看看。。。。。我是真的完全不知道怎么去跟那个param1变量的来源。。。
我在悬赏区也开了贴子,有偿。谢谢了!