特别声明:本文章只作为学术研究,不做其他用途;如有侵权请联系我删除文章
目录:
一、前言
二、逆向分析
三、插装点
四、日志分析
五、明文顺序
一、前言
二、逆向分析
其中collect与sess就是我们要分析的值,话不多说,开始处理
三、插装点
四、日志分析
-
日志追踪
-
日志还原
-
日志分析
这里选择把部分日志copy到本地进行分享,这时候就会出现,根本找不到这个数字由来的算法,再往上倒推开始异常困难了,十几万行日志根本遭不住,换个思路,找到明文然后往下推,上文提到的四处明文,发现开头一直都是{“cd”:,那就全局搜他
很明显{–>123,"–>34,是经过charCodeAt得到,结合看到的<< 0、8、16、24,这里就可以得到我们想要的算法了
并且可以在当前日志往下看个十几行发现也有这种操作,很明显这是两个四位字符串为一组去做加密的。
这两个四位字符串最终得到的两个数字分别是1684218491、844839458,接下来就是tx的难点xtea算法了,这里建议先找个tea算法了解个大概,对一些符号运算混个眼熟,然后再看下面的日志。
现在开始解剖tea,这里开始先对num2(844839458)进行了操作
844839458 '<<' [4] 'result is' 632529440
844839458 '>>>' [5] 'result is' 26401233
632529440 '^' [26401233] 'result is' 606174193
606174193 '+' [844839458] 'result is' 1451013651
得到左边的算法-->((num2 << 4) ^ (num2 5)) + num2)
将上面得到的数字与key亦或后再累加num1(1684218491)就得到第一轮的num1了
通过上面两张图的分析可以得到以下算法
//这里的sum初始值为0
num1 += (((num2 << 4) ^ (num2 >>> 5)) + num2) ^ (sum + key[sum & 3]);
接着分析,这里出现了一下关键数字delta–>2654435769,就是通过这个数字确定xtea算法的
由上面这张图可以得到以下算法
sum += delta;
num2 += (((num1 << 4) ^ (num1 >>> 5)) + num1) ^ (sum + key[(sum >>> 11) & 3]);
这时候大致的算法已经出来了,然后再耐心的往下翻翻日志,会发现他一直在循环这个操作,直至明文取完(还会补位空字符)
function teaEncryptBlock(num_lis) {
var num1 = num_lis[0];
var num2 = num_lis[1];
var sum = 0;
key = [1466852942, 1768312662, 1715955288, 1498245202];
var delta = 2654435769;
for (var i = 0; i < 32; i++) {
num1 += (((num2 << 4) ^ (num2 >>> 5)) + num2) ^ (sum + key[sum & 3]);
sum += delta;
num2 += (((num1 << 4) ^ (num1 >>> 5)) + num1) ^ (sum + key[(sum >>> 11) & 3]);
}
return [num1, num2];
}
其实到这里已经清晰明了,没啥好说的了,就接下来开始分析明文了
五、明文顺序
先来看看明文长什么样,atr2和atr4都是轨迹,其他文章常说的tx38位数组其实就是atr1+atr3+atr4拼接而成的
到了这里,其实就是腾讯滑块最变态的地方,通过多次调试会发现,这38位数组每次的顺序都不一样,这里只能开补,目前而言tx滑块没办法做到真正意义上的纯算,这里的处理方式是先让这个js跑起来,然后通过正则在js里添加点内容最后返回明文再对明文做点处理最后走算法,这样减少一些dom环境的检测,让我们补环境时间大大节俭
其实到这里,腾讯的防水墙算是完结,已经没有啥可以继续讲的了,后续更新的强度保持在一周两更,同时也会弄一些其他文章,不在专注与web方向了。
既然已经看到这里了,不妨留个关注吧
原文始发于微信公众号(二进制科学):逆向百例之腾讯防水墙
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论