在 NightTeam微信公众号上看见大佬一篇文章听说你碰到这种反爬就歇菜了?手把手教你秒杀它!
大佬具体扣代码没写,很是受伤,于是自己摸索了大半天,捋顺了大部分逻辑,写出来分享一下
ps:发送消息「隐式Style-CSS」到大佬微信公众号「NightTeam」即可获取样例地址~
前面分析,大神写的非常详细,具体看大神写的就好
- 观察与分析977行和1133行代码
977处代码
定义了变量_0xa12e
,1133处代码
是一段for循环
,经过观察1133处代码较为复杂,有许多未知变量:words,_0xea12, document,打上断点调试一下 - 调试结果
首先for函数主体for (var i = 0x0; i < words[_0xea12('0x18')]; i++) {
i
和words[_0xea12('0x18')]
明显为数字,用来控制函数循环次数
把鼠标移动到words上
可以看到words
是被替换的单词数组
跳转之后的函数
可以看到var _0xea12 = function (_0x56430f, _0x7f6841)
传递了2个参数_0x56430f, _0x7f6841
又定义了一个变量_0x4f7a0f
接受_0xa12e
函数_0x56430f
处理的结果
var _0x4f7a0f = _0xa12e[_0x56430f]
最后返回_0x4f7a0f
。
来看看_0xa12e
可看到上面代码定义了_0xa12e,经过函数变换之后结果如图所示。为长度48的数组
- 回过头来看1133行代码
一点一点的利用Console来进行测试,首先分析words[_0xea12('0x18')]
可以看到0x18
结果为24,之后_0xea12
函数(返回结果为数组)取下标为24的元素,结果为length
,之后words数组调用length方法,取得words数组的长度结果为24
所以for函数变为了for (var i = 0x0; i < 24; i++) {
同理,替换之后的函数变为
for (var i = 0x0; i <24; i++) {
try {
document["styleSheets"][0x0]["addRule"]('.context_kw' + i + "::before", 'content:\x20\x22' + words[i] + '\x22');
} catch (_0x527f83) {
document['styleSheets'][0x0]['insertRule'](