好友
阅读权限10
听众
最后登录1970-1-1
|
本文不提供具体网址哈,简单分析一下6代第一次cookie的生成,注意是简单分析
首先在页面写个油猴脚本hook住cookie
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function() {
debugger;
console.log('Getting cookie');
return cookie_cache;
},
set: function(val) {
debugger;
console.log('Setting cookie', val);
var cookie = val.split(";")[0];
var ncookie = cookie.split("=");
var flag = false;
var cache = cookie_cache.split("; ");
cache = cache.map(function(a){
if (a.split("=")[0] === ncookie[0]){
flag = true;
return cookie;
}
return a;
})
cookie_cache = cache.join("; ");
if (!flag){
cookie_cache += cookie + "; ";
}
this._value = val;
return cookie_cache;
},
});
在如图所示的地方打上断点后再次刷新页面进入静态js的eval函数执行前
这里只要再按一下F11即可进入vm,不过我们先看下静态js生成的$_ts
这里的$_ts里,cd是页面script里的cd,cp[1]和cp[3]是根据页面nsd生成的850个参数名和vm代码的每隔一段距离的字符的charCodeAt的和,简单点来说就是对代码做了校验。
下面说下eval里代码第一次cookie的生成逻辑
插桩点:搜索 <= 63,在此处插桩打印日志
这里简单说下vm的函数里有功能不会变的函数,分别是数组转字符串,字符串转数组、字符串转数字、数字转数组、两组数组进行操作获得新数组...
首先对把cd转化成数组,如果你观察过多组cd转化的数组,会发现转化后的数组都是0开头
cd转化后的数组(假设是arr),根据前两位(假设是[0,175]开头),首先对arr.slice(2).slice(0,175)得到preArr,arr.slice(177)得到suffixArr
前面截取的这段数组preArr通过一系列操作得到一个8位数组。
后面的suffix通过和这个8位数组异或得到新数组。
后面的操作通过对这个新数组的截取来继续进行
根据插桩日志往前看,在cookie生成之前先是一个176位的数组,176位数组之前是144位数组,再之前是96位数组,然后是95位,最后定格在117位数组的生成。
逆推分析出大概流程后,需要先分析这个117位数组的产生
[1,0,33,128],这是117数组的前四位,前两个数字写死,第三个33是eval.toString()的长度,128是1<<7,这些都可以通过分析插桩日志获得
后面对ua,随机数,固定值,屏幕分辨率,时间,特定函数toString()(完整、截取),suffixArr截取的几段数组 (一般是[95,36]开头,4位长度) fromCharCode 生成的函数名 的函数(例如_$aa在vm代码里对应的函数 里面大概率会有一个 [xxx] xxx是一个数字) 映射对应的值 进行了校验(填充到117数组里),最后填充一些数组长度值和一些默认值生成117位数组。
117位数组生成后,需要将它转化成95位长度的数组
这里的tempArr我是写死的,似乎生成的逻辑不会改变(不确定,暂时没发现什么问题)
生成95位数组后,截取suffixArr的一部分(11,43)32位长度数组对前16位进行异或得到新的95位长度数组
后续的插桩在 = {},(这里页面搜索有19个,位置不固定,没法给出确定的位置)
按照这个方法走下去,对日志进行分析,最终就能得到176位的数组,其实在拿到117位数组的时候,后面的都不是什么难事了,最好自己动手去实现一遍,感觉无聊逆一逆rs还挺消磨时光的。
117数组里比较困难的点在于对代码的检查,这里不同的人有不同的办法,不过可以在静态文件里找方法(毕竟要检查的代码都拿到了...)
小弟第一次在52发文章,对编辑器也不是很熟悉,也不敢讲的太详细,写的不好的地方还请见谅。简单说了下我对rs6第一次cookie生成的分析过程(其实啥也没说hhh)。刚开始调试的时候还需要写AST来还原一下那段异常难看的三元,后面弄多了直接就在三元上开干了(捂脸)
个人感觉rs6应该不存在严格意义上的纯算(吧),至少应该抠代码(吧)。还有就是,可能我分析的这个网站或者说我这个做法,不一定适合其他网站哈,不过同一个版本的分析流程应该或许大概差不多(吧)。
祝你成功~ 加油! |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|