炉石传说真尼玛好玩

炉石传说真尼玛好玩!
开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?
答案当然是否定的。开源运动同样有自己的游戏规则和道德准则。不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿。现今存在的开源协议很多,而经过Open Source Initiative 组织通过批准的开源协议目前有 58 种。我们在常见的开源协议如 BSD,GPL,LGPL,MIT 等都是 OSI 批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。首先借用一张相当直观清晰的图来划分各种协议:

今天笔者在进行 WordPress 博客考古活动时,得知了一个彩蛋。来源见:WordPress 的彩蛋。
在 WordPress 文章中使用 Compare Revisions 功能,如果两个相比较的文章 ID 一致,就会触发彩蛋。其效果是显示文字:
Wake up XXX… The matrix has you. Follow the white rabbit. Don’t let this happen again.
这是一个致敬《黑客帝国》的彩蛋。经过对WordPress 历史版本的分析,发现该彩蛋已在 4.x 版本移除。通过分析 3.0.2 版本的文件,找到了该版本的revision.php和revision-js.php文件,并大致研究出了其实现方法。在revision.php中有这样一串代码:1
2
3
4
5
6// If we're comparing a revision to itself, redirect to the 'view' page for that revision or the edit page for that post
if ( $left_revision->ID == $right_revision->ID ) {
$redirect = get_edit_post_link( $left_revision->ID );
include( './js/revisions-js.php' );
break;
}
而在revision-js.php中,有一串经过了eval混淆的代码,用于向用户输出彩蛋内容。 目前笔者正在尝试反混淆代码,并复现这个彩蛋。如果你有兴趣,也可以下载revision-js.php进行研究。
本文更新于 2017 年 11 月 11 日:
由于笔者并不准备搭建旧版本 WordPress 的运行环境,于是决定从代码入手,分析这个彩蛋。
在revisions-js.php中定义的函数dvortr()作用是使用一对一的替换来加密字符串,该文件中有两次调用此函数:1
dvortr( "Erb-y n.y ydco dall.b aiacbv Wa ce]-irxajt- dp.u]-$-VIr XajtWzaVv" )
和1
dvortr( 'Eabi.p!' )
经过解密,其输出分别为1
Don't let this happen again. <a id='goback' href='$'>Go Back</a>
和Danger!。
而定义的变量$j作用是包含 jQuery 库,$n是获取的当前用户名,$d是 noscript 时的输出。通过替换掉一些 WordPress 中定义的函数,笔者成功地使部分解码后的 PHP 文件在本地 Apache 服务器成功运行。并且,笔者还重新制作了这个彩蛋,现在它已经可以在ZSQ.IM 以某种方式触发~
下面附上整个解密过程中所用到的文件:WordPress-Easter-Egg。其中revision.php和revisions-js.php是原文件,decode.php是部分解密后的文件,decode.js是浏览器获取的匿名 js 文件,decoder.html是根据原文件的加密算法编写的加密、解密脚本。
上帝说,要有
于是就有了光。
注:以上文字旨在测试
使用方法:在 HTML 页面中,通过1
2<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<!--config后的参数可以根据需求自定义,默认为?config=default-->
即可加载 MathJax,该脚本将会渲染页面中的所有
如果要在 WordPress 中使用,可以通过在编辑文章界面,选择「文本」(如果使用「可视化」,字符将被转义,导致脚本无法加载),输入以上内容达到相同效果。
使用时还需要注意的是,根据官方文档,标记行内公式的$符号默认不会被识别。你可以在 HTML 页面中加入以下配置以启用之:1
2
3
4
5
6
7
8
9
10
11
12<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
TeX: {equationNumbers: { autoNumber: "AMS" }},
"HTML-CSS": { linebreaks: { automatic: true }, EqnChunk: (MathJax.Hub.Browser.isMobile ? 10 : 50) },
SVG: { linebreaks: { automatic: true }}
});
</script>
其中inlineMath项启用了$符号标记的行内公式,而linebreaks项则会在屏幕宽度较小时自动使公式换行。
更多信息可以访问官方网站:MathJax
本文更新于 2018 年 5 月 20 日:
在 Hexo 中,如果使用了 NexT 主题,可以通过配置主题目录下的_config.yml简单地使用 MathJax。在_config.yml中找到mathjax选项,将其子选项设置为enable: true,并在需要加载 MathJax 的文章的 Front-matter 中添加mathjax: true即可。
本文更新于 2018 年 10 月 3 日:
还有一种解决方案是调用知乎的 API:https://www.zhihu.com/equation?tex=,通过 GET 请求,就可以将
本文更新于 2020 年 3 月 19 日:
MathJax3 已经推出,本文内容可能过时。