小议 开源中国 I LOVE YOU js代码
今天在开源中国看到一篇神作《I LOVE YOU js代码》是17号的文章了,也许你已经看过了。
文章非常有意思,由 5 个 "爱心" 组成的一段js代码,能正常执行,执行后弹出 "I love you." 字符串。
$= ~[]; $={___:
++$,$$$$: (![]+"")[$],
__$:++$,$_$_:(![]+"")
[$],_$_:++$,$_$$:
({} + "")[$],
$$_$
:
($[$]+"") [$],_$$:
++$,$$$_:(!""+"")[$],$__:
++$,$_$:++$,$$__:({}+"")
[$],$$_: ++$,$$$:++$,
$___:++$,$__$:++$
};$.$_ = ($.$_=
$ + "")
[
$.$_$]+ ($._$=
$.$_[$.__$ ])+($.$$=(
$.$+"")[$.__$])+((!$)+"")
[$._$$]+($.__=$.$_[$.$$_
])+($.$=(!""+"")[$.__$
]) + ($._= (!""+"")
[ $._$_]) +$.$_
[ $.$_$ ]+
$.__+
$._$+ $.$;
$.$$=$.$+(!""+"")
[$._$$]+$.__+$._+$.$+
$.$$;$.$=($.___)[$.$_]
[$.$_];$.$($.$($.$$+
"\""+$.$_$_+(![]+
"")[$._$_]+
$.$$$_+
"\\"+
$.__$+ $.$$_+
$._$_+$.__+"(\\\"\\"+
$.__$+$.__$+$.__$+"\\"+
$.$__+$.___+(![]+"")[$._$_]+
$._$+"\\"+$.__$+$.$$_+$.$$_+
$.$$$_+"\\"+$.$__+ $.___+
"\\"+$.__$+$.$$$+$.__$+
$._$+$._+".\\\"\\"+
$.$__ +$.___+
")"+ "\"")
( ))(
)
高手觉得没什么技术含量,无非就是类似 jsfuck 之类的。
当然,这个没jsfuck那么复杂,其实作者只是拼接字符串然后得到 Function 然后执行了下。
只是这个排版可能花了不少时间吧。
来,我们来简单的分析下这个js。我水平不够,不是直接看代码分析的,是在控制台下动态调试跟踪了几遍。
(function() {
debugger;
var $ = ~ []; // -1
$ = {
___: ++$, // 0
$$$$: (![] + "")[$], // "false"[0] => f
__$: ++$, // 1
$_$_: (![] + "")[$], // "false"[1] => a
_$_: ++$, // 2
$_$$: ({} + "")[$], // "[object Object]"[2] => b
$$_$: ($[$] + "")[$],
_$$: ++$, // 3
$$$_: (!"" + "")[$], // "true"[3] => e
$__: ++$, // 4
$_$: ++$, // 5
$$__: ({} + "")[$], // "[object Object]"[5] => c
$$_: ++$, // 6
$$$: ++$, // 7
$___: ++$, // 8
$__$: ++$ // 9
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
// 这里这么长就是为了组成 "constructor" 字符串
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$; // "return"
$.$ = ($.___)[$.$_][$.$_]; // (0).constructor.constructor => Function
// $.$ = Function
// return"ale\162t(\"\111\40lo\166e\40\171ou.\"\40)"
$.$(
$.$(
$.$$ + "\"" + $.$_$_ + (![] +"")[$._$_] + $.$$$_ + "\\" +
$.__$ + $.$$_ +
$._$_ + $.__ +
"(\\\"\\" +
$.__$ + $.__$ + $.__$ + "\\" +
$.$__ + $.___ + (![] + "")[$._$_] +
$._$ + "\\" + $.__$ + $.$$_ + $.$$_ +
$.$$$_ + "\\" + $.$__ + $.___ +
"\\" + $.__$ + $.$$$ + $.__$ +
$._$ + $._ + ".\\\"\\" +
$.$__ + $.___ +
")" + "\""
// 这里这么长一段就是为了得到 return"ale\\162t(\\"\\111\\40lo\\166e\\40\\171ou.\\"\\40)" 字符串
)()
)();
// 这部分代码相当于
// Function(Function('return"ale\\162t(\\"\\111\\40lo\\166e\\40\\171ou.\\"\\40)"')())();
})();
这是我改造后的代码,这样在F12下动态调试非常容易阅读。
前面得到一些基本字符串,然后拼接出 constructor 和 return 字符,
接着利用 constructor 得到 Function 函数。
有了 Function 剩下的非常简单了,拼接字符串然后用 Function 执行下即可。
好了,今天水了,,因为有事情。。
小议 开源中国 I LOVE YOU js代码的更多相关文章
- 开源中国iOS客户端学习
开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客 http://blog.csdn.net/column/details/xfzl-kykhd.html ...
- oschina(开源中国)的Git代码托管平台使用教程
oschina(开源中国)的Git代码托管平台使用教程 第一章 平台介绍 一. Git@OSC简介 开源中国的Git@OSC一个账号最多可以创建1000个项目,包含公有和私有,开源中国代码托管地址:h ...
- Git(分布式版本控制系统)在Windows下的使用-将代码托管到开源中国(oschina)
一.Git是什么? Git --- The stupid content tracker, 傻瓜内容跟踪器.Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别? ...
- Windows 下使用git 将代码托管到开源中国-(http://git.oschina.net/)
一.准备工作 当然是准备在windows 下使用需要的环境,和工具. msysgit 下载地址:http://msysgit.github.io/ TortoiseGit 下载地址:https:// ...
- 使用git推送代码到开源中国以及IDEA环境下使用git
使用git推送代码到开源中国以及IDEA环境下使用git 在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多的同学由于不会操 ...
- 用开源中国(oschina)Git管理代码(整合IntelliJ 13.1.5)
简介 开源中国提供了Git服务(地址:http://git.oschina.net/),在速度上比国外的github要快很多.使用了一段时间,感觉很不错.oschina git提供了演示平台,可以运行 ...
- 沈晓军 / LarvaFrame - 代码托管 - 开源中国社区
沈晓军 / LarvaFrame - 代码托管 - 开源中国社区 统计
- AeroGear.js 1.2.0 发布,手机Web应用脚手架 - 开源中国社区
AeroGear.js 1.2.0 发布,手机Web应用脚手架 - 开源中国社区 AeroGear.js 1.2.0 发布,手机Web应用脚手架
- eclipse中如何向开源中国(码云)上传代码
摘要 本文将介绍如何将本地的项目提交到开源中国上去,过程比较详细,实现起来很简单.由于自己也算是一个新手,所以没有做过多的解释,只是单纯的描述了该如何去做. 1.在开源中国上面新建一个空项目 到这 ...
随机推荐
- 如何在Windows Server 2003搭建Windows+iis+asp+access环境
前提系统盘镜像要加载进来方案一:开始->管理您的服务器->添加或删除角色->下一步->自定义配置->下一步->选择应用程序服务器(IIS,ASP.NET)-> ...
- lambda表达式,map函数
lambda只是一个表达式,不需要定义函数,故也是匿名函数,用法为:lambda 参数:表达式. x=5 list1=[2,3,4] list2=[10,20,30] s=lambda x:x**3 ...
- Vue.js 相关知识(路由)
1. 简介 路由,工作原理与路由器相似(路由器将网线总线的IP分发到每一台设备上),Vue中的路由根据用户在网页中的点击,将其引导到对应的页面. 2. 使用步骤 安装vue-router或者直接引入v ...
- 1.AKATSUKI
## 1.AKATSUKI - “晓”,日本漫画<火影忍者>及其衍生作品中的一个秘密组织. - 成立之初是为了给自己的国家带来和平. ## 2.团队成员 - 邱东宝 - 211606325 ...
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...
- 《Linux 内核分析》第五周
[李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
- IOS的开发演变历史
对IOS开发平台一直抱有很大兴趣,正好通过这个机会好好了解一下IOS的开发历程! 通过一些查阅,我了解到IOS的开发平台主要是依靠Xcode软件来编写程序,同时又需要在MAC OS X的环境下运行,w ...
- 四种losses
1. Classification losses 每次输入一个样本,对样本进行类别预测,根据预测类别和真实标签得到对应的分类损失. 2. Pairwise losses 每次输入两个样本,数据集包含了 ...
- ns3的输入输出奥秘(三) Tracing系统
Tracing系统 (1)ASCII Tracing 还是以myfirst.cc为例子 可以在Simulator::Run()前面加上 AsciiTraceHelper ascii; pointToP ...