解释某宝的一段混淆视听的代码
在某宝的登录界面上,有这么一段代码
S.one(window).on("load", function() {eval(function(p, a, c, k, e, d) {e = function(c) {return c};if (!''.replace(/^/, String)) {while (c--) {d[c] = k[c] || c}k = [function(e) {return d[e]}];e = function() {return '\\w+'};c = 1};while (c--) {if (k[c]) {p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c])}}return p}('0 1=5;0 2=4;0 3=1&2;6.9("8").7=3;', 10, 10, 'var|a|b|c|110|10|document|value|gvfdc|getElementById'.split('|'), 0, {}))
});
初看之下,很复杂,实际上,分析下来真的很简单,最大的特色就是利用string的replace代码完成了一个把某些文本构造成一个真实有用的语句,然后执行
先来看这句
''.replace(/^/, String)
实际上这句的结果永远为false,大家可以用Firebug在控制台下执行一下看。
这样分析下来, 那下面这句
while (c--) {d[c] = k[c] || c}
在分析这句之前,我们先来看看K的值,它的值为'var|a|b|c|110|10|document|value|gvfdc|getElementById'.split('|')执行得到的,会得到一个10个元素的字符串数组
所以,上面那句语句的含义,我们现在也可以很清楚的知道了,就是分别把它们放到对应下标的词典中去。
最后一个大复杂句,我们再来看一下
while (c--) {if (k[c]) {p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c])}}
由于上面c=1了,所以这个循环,实际上只执行一次,就是这个关键的replace语句。把所有的单词进行了一个全局替换,替换的内容由k[c]这个值。前面我们会看到k[c]这个东西实际为下面语句:
k = [function(e) {return d[e]}];
看到了吗,实际上它返回的就是对应d这个词典中以e(也就是前面正则匹配的单词)为下标对应的项。
到此,整个这么大块语句下来,最后的结果就很清楚了。
你还不知道,那还不快用Firebug去控制台执行看看。
这说不定会成为你写让人看不懂代码的一个突破哦
转载于:https://www.cnblogs.com/richardy2012/p/3693802.html
解释某宝的一段混淆视听的代码相关推荐
- 我与WIFI宝的一段奇缘
我与WIFI宝的一段奇缘 我背井离乡来到大城市在一家大型公司行政部工作,租赁的房子只有一根网线,还是在室友的房间内,而办公室居然木有无线网络,这对于我这种手机控而言,是多么痛苦的事情. 每天坐在公交车 ...
- taobao.trades.sold.increment.get( 淘宝店铺订单交易数据接口,淘宝店铺订单解密提额接口,淘宝店铺订单解密接口)代码对接教程
taobao.trades.sold.increment.get( 淘宝店铺订单交易数据接口,淘宝店铺订单解密提额接口,淘宝店铺订单解密接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述( ...
- vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...
- php 间隔时间执行任务,PHP间隔一段时间执行代码的方法
PHP间隔一段时间执行代码的方法 发布于 2015-11-16 18:26:46 | 230 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...
- Python:非常详细的解释如何判断某个变量的类型以及代码实现
Python:非常详细的解释如何判断某个变量的类型以及代码实现 目录 非常详细的解释如何判断某个变量的类型以及代码实现 非常详细的解释如何判断某个变量的类型以及代码实现 #判断变量类型的函数 def ...
- php图片变成代码怎么解决,一段图片处理代码PHP代码转C#代码,该怎么解决
一段图片处理代码PHP代码转C#代码 把下面代码转换成 C#代码 $res = json_decode(stripslashes($_POST['jsondata']), true); /* get ...
- 总结以下三种方法,实现c#每隔一段时间执行代码:
总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...
- 段寄存器中代码段数据段堆栈段附加段
段寄存器中代码段数据段堆栈段附加段
- 汇编语言:编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中
题目介绍 程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储b段中. assume cs:code,ds:a,ss:ba segmentdw 1,2,3,4,5,6,7 ...
最新文章
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- B站面试官炫耀身价过亿,贬低北邮应试者引热议!不知北邮毕业的B站创始人作何感想?
- sarscape 将dem文件转化成stl_SARscape与SARProz软件中的重要缩写
- java对象与c网络语言通信,JAVA与C语言的网络通信代码案例.pdf
- Java中线程池,你真的会用吗?
- 第七章:在Spark集群上使用文件中的数据加载成为graph并进行操作(3)
- opencv puttext
- Microsoft C++ 异常: 内存位置处的 std::bad_alloc问题解决办法
- Pytorch生成Tensor常用方法汇总
- 百度网盘上传文件时提示超过4G限制如何解决?
- office 论文 页码_论文页码如何设置,如何给论文设置完美页码
- 服务器端方法级权限控制----------@Secured注解的使用
- window、linux、mac 文件路径禁止字符, 路径长度【全网总结】
- android开发网站的流程图,Android_客户端开发流程图及案例.pdf
- Vue 2.爷爷点击事件触发孙子的方法
- 前端性能监控相关指标
- 迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅
- 企业会计准则(具体准则)第4号——固定资产
- 2022年web前端开发值得学习的10个javascript框架
- 运城学院C语言题目,C语言课程设计实验报告【运城学院计算机科学与技术系】.doc...