美文网首页python_爬虫
06:Python爬虫|网洛者反反爬虫练习平台第四题:JJFuc

06:Python爬虫|网洛者反反爬虫练习平台第四题:JJFuc

作者: HAO延WEI | 来源:发表于2021-12-23 20:27 被阅读0次

转载地址:https://mp.weixin.qq.com/s?__biz=Mzg5NzY2MzA5MQ==&mid=2247487102&idx=1&sn=3a4f360f3c70fb015cf4100f2606f4be&chksm=c06f2762f718ae74b384f851f3c4b8b0c768b9af02d8cc5da7608e49fe29798dfe8350e0afd7&scene=178&cur_album_id=1996451898278608899#rd
如有侵权,请及时联系我立即删除!
详情请关注微信公众号: K哥爬虫
感谢K哥爬虫教学贴,学习爬虫不迷路


  • 目标:网洛者反反爬虫练习平台第四题:JSFuck 加密
  • 链接http://spider.wangluozhe.com/challenge/4
  • 简介:本题仍然是要求采集100页的全部数字,并计算所有数据加和,需要抠出源码进行计算,主要使用了 JSFuck 加密

逆向参数

逆向的目标主要是翻页接口 _signature 参数,调用的加密方法仍然是 window.get_sign(),和前面几题是一样的


继续跟进,会发现是一个 JSFuck 混淆:



我们将这段代码复制出来,放到编辑器里面,这里以 PyCharm 为例,由于我们要选中匹配括号里的内容,所以我们可以设置一下 PyCharm 括号匹配高亮为红色,便于我们查找,依次点击 File - Settings - Editor - Color Scheme - General - Code - Matched brace,设置 Background 为显眼的颜色



此时我们选中最后一个括号,往上找,就可以非常明显地看到与之匹配的另一个括号,如下图所示:

我们将括号里面的内容复制出来(可以包含括号,也可以不包含),放到浏览器控制台运行一下,就可以看到源码了:

将源码复制下来,本地分析一下:

(function () {
    let time_tmp = Date.now();
    let date = Date.parse(new Date());
    window = {};
    let click = window.document.onclick;
    let key_tmp;
    let iv_tmp;
    if (!click) {
        key_tmp = date * 1234;
    } else {
        key_tmp = date * 1244;
    }
    if (time_tmp - window.time < 1000) {
        iv_tmp = date * 4321;
    } else {
        iv_tmp = date * 4311;
    }
    const key = CryptoJS.enc.Utf8.parse(key_tmp);
    var iv = CryptoJS.enc.Utf8.parse(iv_tmp);
    (function tmp(date, key, iv) {
        function Encrypt(word) {
            let srcs = CryptoJS.enc.Utf8.parse(word);
            let encrypted = CryptoJS.AES.encrypt(srcs, key, {
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            return encrypted.ciphertext.toString().toUpperCase();
        }

        window.sign = Encrypt(date);
    })(date, key, iv);
})();

可以看到就是一个 AES 加密,这里主要注意有两个 if-else 语句,第一个判断是否存在 window.document.onclick,第二个是时间差的判断,我们可以在控制台去尝试取一下 window.document.onclick 和 window.time,看一下到底走的是 if 还是 else,在本地把这两个值也补全即可,实际上经过K哥测试 window.document.onclick 为 null,然后不管是走 if 还是 else 都是可以拿到结果的,所以对于本题来说,两个 window 对象都无所谓,直接去掉,key_tmp 和 iv_tmp 任意取值都可以

JSFuck 解混淆方法

JSFuck 在调用方法时通常都是通过Function(xxx)()eval(xxx)的形式来执行,因此 JSFuck 常见解混淆的方式如下:

    1. 使用在线工具直接解密,比如:https://lelinhtinh.github.io/de4js/
    1. 针对 Function 的情况,复制代码最外层倒数第二个括号内的内容,放到浏览器里面去直接执行就可以看到源码;
    1. 针对 eval 的情况,复制代码最外层最后一个括号内的内容,放到浏览器里面去直接执行就可以看到源码;

相关文章

网友评论

    本文标题:06:Python爬虫|网洛者反反爬虫练习平台第四题:JJFuc

    本文链接:https://www.haomeiwen.com/subject/heihqrtx.html