JavaScript 字符串字母大小写组合生成

近一个月, 博客的多说评论框总是被一个河北IP发的黄网钓鱼链接刷屏, 除我以外, 不少多说用户表示自己也遇到了同样的情况. 多说评论框的官方似乎处于一个无人管理的状态, 官方的讨论区在几个月前就已经被广告帖刷爆, 这个评论框服务就算明天停止服务都不会显得奇怪. 多说的 WordPress 群里有人把http的各种大小写组合形式(比如hTTp, hTtP...)都列入了多说的关键词黑名单, 以此防止垃圾评论, 我自己试了一下好像没有效果...可能这个功能就是个摆设吧. 不过这个大小写的组合形式倒是引起了我的兴趣, 虽然我知道发垃圾评论的程序生成的组合肯定是随机的, 但研究一下这些组合有多少种, 该怎么输出所有的组合还是挺有意思的. 我只能想出两种可以穷举出这些组合的方式, 一种是二叉树, 一种是二进制. 不过二叉树的算法我已经不会写了(也许是时候去刷LeetCode了...), 所以就用了二进制的方式. »


漫谈 JavaScript 方言与派系

JavaScript 近几年的表现十分优秀, 语言还是那个语言, 可给人的感觉已经有了很大不同. 前端摩尔定律里, 每18个月前端的难度就上升一倍, 现在看来似乎也不是没有道理. 按照前端摩尔定律, 自我接触 JavaScript 以来, 前端的难度已是一开始的16倍. 从 jQuery 一统天下, 到 Vanilla JS 的崛起; 从第二次浏览器大战初出茅庐便震惊世界的 Chrome, 到现在坐拥浏览器份额宝座的Chrome; 从在浏览器里都没人愿意多看一眼的编程语言, 到现在哪都能用的万能胶水语言, JavaScript 经历了太多太多, »


使用JavaScript脚本配合Steam inventory helper扩展快速出售Steam上的多余卡片

Steam一年一度折扣力度最大的圣诞节冬季特卖活动正在展开, 在像例行事项一般将愿望单里的游戏尽数购买后才发现钱包空空的后悔之时, 各位可以考虑在这个季节将自己库存的卡片出售一下了. 对博主这种喜+1到2000个游戏的Steam用户来说, 出售卡片一直是个漫长又痛苦的差事, 一方面是由于游戏太多, 挂出的卡片规模太庞大(比如, 我的卡片数量常年在1000~2500张左右浮动), 另一方面是没有好的出售多余卡片的方法(也许是我没有发现), 像是那些一个徽章所需的6种卡片里只收集了1种或是2种的基本不会去合成的卡片, 留着也没有什么用处. 平日里在Steam inventory helper扩展的帮助下, 我可以同时选中多张卡片然后一并出售, 但这并没有解决我卡片数量巨大带来的问题: 前天我试图卖掉我多余的卡片, 可1个小时过去了, 我似乎连多余卡片的一半都还没能卖掉, 卡片实在是太多了! 人工产生的效率在已经形成规模的数据面前未免过于渺小, 于是当天我花了点时间编写出了steam-surplus-card-sells-helper. »



JavaScript 在对象中查找指定值并返回引用路径

该函数用于在对象中查找指定的数值, 返回包含该值的引用路径的数组. 参数allowCircleStruct用于设定是否递归环状结构, 通常设为false即可, 若设为true在一些情况下可能造成堆栈溢出. 参数allowEnumProto用于设定是否允许枚举Prototype中的可枚举属性, 设为true时将使用for-in循环, 设为false将使用Object.keys返回的数组循环. 参数depth用于设定递归深度. 据说ES6支持尾递归, 不过看了下好像也改造不成尾递归, 就没有继续做进一步优化. 例子: GetValueReferencePath({'a': {'b': 1}, 'b': 1, 'c': [1]}, 1) //Return ["['a']['b'] »


JavaScript 反混淆的一般套路和技巧: 结

本来《JavaScript 反混淆的一般套路和技巧》是打算作为一篇单独的长文来写的, 后来硬生生被我拆成了《起》、《承》、《转》、《结》四章, 在《转》里面整个反混淆的事情其实已经被我们解决了, 结果就是这作为最后一篇的《结》, 变成了多余的一章. 这章该写些什么让我想了很久, 最后决定还是想到什么写什么. 下面是我在写这篇文章时暂时能够想到的一些反混淆中的注意事项. 避开陷阱和可能利用陷阱实现的混淆 由于JavaScript和ES在历史上遗留的问题很多, 运行环境复杂, 所以存在不少的陷阱. 一旦遇到可能是陷阱的代码, 请立即运行查看结果, 否则到最后发现出现了什么问题, »


JavaScript 反混淆的一般套路和技巧: 转

把没用的多余的简写的代码处理完后, 代码就差不多有个基本的样子了, 不过现在还没到休息的时候. 由于函数错综复杂、变量名表达不出语义等原因, 我们的代码虽然可读性较之前已经得到了提高, 但想要完整理解代码的意图, 在当前的情况下仍然是一件麻烦的事. 为了理解代码, 通常我们要做两件事, 一件是“基于主函数的运行顺序整理”, 另一件是” 猜解变量名和函数名 ” , 之后, 代码在可读性上就能更加接近原始代码的级别了. 基于主函数的运行顺序整理 除非你在反混淆的代码是一个库或者模块, 否则每一段独立的程序, 都会有一个主体的部分, 反混淆到达这一步, 你需要找出整个代码的主函数. 主函数可能是整段代码中最长的那段代码, 也可能是整段代码最尾部的那一段代码, 或者, 整段代码就是被安排好了顺序执行的, »


JavaScript 反混淆的一般套路和技巧: 承

反混淆的本质, 是提升代码的可读性, 反混淆的过程中, 你所做的大多数事情, 都是在保证代码运行结果不变的情况下, 提升代码的可读性, 人工进行反混淆这一行为本身, 就是对自己阅读代码能力的一种锻炼. 本篇文章将讨论一些常见的混淆方式和反混淆的方法, 以及怎样组织各个流程的顺序, 为了方便叙述, 我们以反混淆的几个主要步骤来展开讲解: 解密被加密的代码, 将代码结构尽可能还原至最接近原始代码的状态. 去除可能存在的最外尾的IIFE的参数, 将参数转化为函数顶部的变量定义. 将只使用一次的变量转化为值或表达式. 计算所有可直接计算的表达式. 还原判断语句的短路逻辑简写. 还原变量类型转换简写. 去除专门用于妨碍阅读的代码. 基于主函数的运行顺序整理. 猜解变量名和函数名. 解密被加密的代码, 将代码结构尽可能还原至最接近原始代码的状态 对于一些加密过多次的混淆代码, »


JavaScript 反混淆的一般套路和技巧: 起

最近发现网上没有什么专门深入去讲解JavaScript反混淆的文章, 能找到的, 基本都是针对于某一种加密方式的简单解密方法, 虽然能够解决一时的问题, 但从学习和研究的角度去看, 并没有太多价值. 加之近日从他人手中接手了一个算是有些棘手的反混淆单子, 感觉有所收获, 遂将自己在反混淆方面的一些理解和方案, 做一下记录, 于是便有了此文. 这篇文章假设你是一位使用JavaScript的中级以上水平的前端工程师, 对于一些相对基础的内容, 将不做讨论和额外讲解. 原先打算只写一篇文章, 但考虑到内容较多, 没有一次性写完的精力, 请原谅我分成多篇文章来写. 在开始动手之前, 你需要知道… 作为一位熟练使用JavaScript的编程人员, 你应该已经非常明白, JavaScript作为一个以函数式为核心的多范式动态弱类型脚本语言, 它的灵活性太强大了, 这直接导致了源代码在经过一些压缩工具的蹂躏之后, 变得极难还原. »


[Bookmarklet]当前网站Cookie获取

使用这个书签可以直接获取当前页站点的Cookie值字符串, 原理过于简单就不做说明了. 获取Cookie 拖动该链接到书签栏, 需使用时点击书签即可. 源代码: javascript:void(prompt(decodeURIComponent('%E4%BB%A5%E4%B8%8B%E5%86%85%E5%AE%B9%E4%B8%BA% »