爬虫中,PHP 运算 JavaScript 混淆表达式的结果

问题#

最近写爬虫遇到下面这样的一个东西

<script type="text/javascript">
$(function(){       
    $(document).ready(function(){       
        var fid = $.sha1(String(((!![]+!![])*!![]))+((!![]+!![]+!![]-![]-![]+![]+[])*(!![]-![]-![]+!![]+!![])));
        $.ajax({
            // 获取完整数据
        });
    }); 
}); 
</script>

因为原站页面正文的数据是被裁剪过的,访问完网页后,它通过 JavaScript 获取完整数据后替换掉不完整的内容。

那串代码是个啥子#

String(((!![]+!![])*!![]))+((!![]+!![]+!![]-![]-![]+![]+[])*(!![]-![]-![]+!![]+!![])) 放到 Chrome 的 Console 上执行,结果是 29

看了几个页面,都是 String (...)+(...) 的结构,这样运算的结果都是字符串。其中,它的右边有时是可以用 eval 运算的,也时是 JavaScript 拼接,eval 运算不了,这种情况需要进行替换。

如何解决#

本来想用 V8js,但是安装一遍没弄好。Chrome 无头浏览器对这个也不行,想着这个东西蛮好玩的,就自己写代码去运算,主要是用到了迭代。

弄了四个示例,结果分别为

29
35
09
79

以下代码复制直接运行

代码已被折叠,点此展开

一个生活中实际小应用代码,可能 GitHub 早有代码,如果有知道的话,可以分享下。或者可以用十几行代码解决的,也请指教下。

无论在现实或是网络中,我都是孤独的。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

这玩意是这样来的: https://jscrew.it

推荐还是弄个专业的 parser 来做这活 (各种 chromeDriver 之类的)

5年前 评论
小李世界 (楼主) 5年前