小议 开源中国 I LOVE YOU js代码

今天在开源中国看到一篇神作《I LOVE YOU js代码》是17号的文章了,也许你已经看过了。

文章非常有意思,由 5 个 "爱心" 组成的一段js代码,能正常执行,执行后弹出 "I love you." 字符串。

     $= ~[];    $={___:
   ++$,$$$$: (![]+"")[$],
    __$:++$,$_$_:(![]+"")
      [$],_$_:++$,$_$$:
        ({} + "")[$],
           $$_$
             :

       ($[$]+"")   [$],_$$:
     ++$,$$$_:(!""+"")[$],$__:
      ++$,$_$:++$,$$__:({}+"")
       [$],$$_: ++$,$$$:++$,
         $___:++$,$__$:++$
          };$.$_ = ($.$_=
             $ + "")
                [

             $.$_$]+      ($._$=
            $.$_[$.__$  ])+($.$$=(
           $.$+"")[$.__$])+((!$)+"")
           [$._$$]+($.__=$.$_[$.$$_
            ])+($.$=(!""+"")[$.__$
              ]) + ($._= (!""+"")
               [ $._$_]) +$.$_
                  [ $.$_$ ]+
                    $.__+

            $._$+    $.$;
          $.$$=$.$+(!""+"")
        [$._$$]+$.__+$._+$.$+
        $.$$;$.$=($.___)[$.$_]
         [$.$_];$.$($.$($.$$+
           "\""+$.$_$_+(![]+
             "")[$._$_]+
                $.$$$_+
                 "\\"+

        $.__$+    $.$$_+
      $._$_+$.__+"(\\\"\\"+
     $.__$+$.__$+$.__$+"\\"+
   $.$__+$.___+(![]+"")[$._$_]+
   $._$+"\\"+$.__$+$.$$_+$.$$_+
    $.$$$_+"\\"+$.$__+  $.___+
      "\\"+$.__$+$.$$$+$.__$+
        $._$+$._+".\\\"\\"+
          $.$__  +$.___+
            ")"+ "\"")
              ( ))(
                )

高手觉得没什么技术含量,无非就是类似 jsfuck 之类的。

当然,这个没jsfuck那么复杂,其实作者只是拼接字符串然后得到 Function 然后执行了下。
只是这个排版可能花了不少时间吧。
来,我们来简单的分析下这个js。我水平不够,不是直接看代码分析的,是在控制台下动态调试跟踪了几遍。

(function() {
    debugger;
    $ = ~ []; // -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代码,布布扣,bubuko.com

时间: 2024-10-13 16:22:30

小议 开源中国 I LOVE YOU js代码的相关文章

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

eclipse中如何向开源中国(码云)上传代码

摘要 本文将介绍如何将本地的项目提交到开源中国上去,过程比较详细,实现起来很简单.由于自己也算是一个新手,所以没有做过多的解释,只是单纯的描述了该如何去做. 1.在开源中国上面新建一个空项目 到这里也就结束了,一个空项目创建完成. 2.将本地项目上传到我们新建的项目中去 2.1在eclipse中新建一个测试项目 2.2 右键team->分享项目 2.3 将项目本身做为仓库,项目下会多一个.git的文件夹. 2.4 Finish完成之后,项目会发生一些变化.表示我们没有将数据提交到仓库中,下面将代

【轻松一刻】项目代码已上传至开源中国[email&#160;protected]

项目代码已上传至开源中国[email protected],实际上16号左右就改的差不多了,一直耽搁没上传.其中程序中关于趣图的部分我并没有写.其他部分基本完整.主要原因是聚合数据返回的趣图大小不一,且图片尺寸偏小,在1080p和720p的手机上效果都很不好.暂时就不加了.您可以自行找合适的图片接口或者网上爬取合适尺寸的图片,其中图片list的展示与笑话的list展示类似. 后续这个小项目可能也不再更新了. 需要说明的是聚合数据接口的使用是有时间限制的,要想一直使用接口,需要应用上线,并且官网实

关于开源中国代码托管的一些问题

之前,我发布一篇解决dropbox被封,导致苹果in-house方式安装问题的一篇博文,因为写文档时间比较仓促,关键地方没有说明白,导致大家看后有些疑惑.主要是在开源中国的那个问题,普遍反映都找不到开源中国新建项目的地方.今早我特意整体又走了一遍,发现确实我上一篇文章写的有问题,在这里给大家致歉了,并在稍后会改正过来.下面就说下开源中国怎么新建项目. 1.百度"代码管理 开源中国"或者直接访问http://git.oschina.net/ 2.有账号的直接登录,没有账号的注册账号. 3

oschina(开源中国)的Git代码托管平台使用教程

oschina(开源中国)的Git代码托管平台使用教程 第一章 平台介绍 一. [email protected]简介 开源中国的[email protected]一个账号最多可以创建1000个项目,包含公有和私有,开源中国代码托管地址:http://git.oschina.net/. 一. OSChina团队协作开发平台简介 开源中国团队协作开发平台,和代码托管平台一起,打造了一个十分好的团队开发平台,开源中国团队协作平台地址:http://team.oschina.net/,团队协作平台支持

用开源中国(oschina)Git管理代码(整合IntelliJ 13.1.5)

简介 开源中国提供了Git服务(地址:http://git.oschina.net/),在速度上比国外的github要快很多.使用了一段时间,感觉很不错.oschina git提供了演示平台,可以运行提交到git的代码(注意,如果是java项目,则需要项目是maven项目),如下图: 支持的应用类型有 本文介绍了在window平台下用git客户端管理远程git代码,并整合到IntelliJ中. 1. 创建项目 到http://git.oschina.net/projects/new 中创建自己的

中国省市 JS代码

很实用的一段JS代码, 用户注册的时候,选择地址常用到.代码如下: <script language="javascript"> var g_selProvince; var g_selCity; var Provinces=new Array( new Array("110000","北京市"), new Array("120000","天津市"), new Array("13000

中国第二代身份证验证js代码

下面这部分代码截取自盛大的某个网页,具体我就不给url了,下面是对应的js代码: iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); iSum = 0; for( i=0;i<17;i++){ iC = v_card.charAt(i) ; iVal = parseInt(iC); iSum += iVal * iW[i]; } iJYM = iSum % 11; var sJYM = ''; if(iJYM == 0) sJYM = &qu

Java实现简单地抓取开源中国主页的相关数据

代码示例 package demo0806; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection;