博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小议 开源中国 I LOVE YOU js代码
阅读量:6340 次
发布时间:2019-06-22

本文共 3323 字,大约阅读时间需要 11 分钟。

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

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

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

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

当然,这个没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下动态调试非常容易阅读。

前面得到一些基本字符串,然后拼接出 constructorreturn 字符,
接着利用 constructor 得到 Function 函数。
有了 Function 剩下的非常简单了,拼接字符串然后用 Function 执行下即可。

好了,今天水了,,因为有事情。。

转载地址:http://vihoa.baihongyu.com/

你可能感兴趣的文章
Nginx 的软件负载均衡详解
查看>>
TIMED OUT WAITING FOR OHASD MONITOR
查看>>
过滤器
查看>>
Html与CSS快速入门02-HTML基础应用
查看>>
Tr A
查看>>
poj 3185 The Water Bowls
查看>>
常用HTTP状态码备忘
查看>>
资源合集
查看>>
MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系
查看>>
解决phpredis 'RedisException' with message 'read error on connection'
查看>>
php设计模式(二):结构模式
查看>>
《图解TCP_IP_第5版》读书笔记
查看>>
RMAN Complete Recovery
查看>>
[ CodeForces 1064 B ] Equations of Mathematical Magic
查看>>
NYOJ-15:括号匹配(二)
查看>>
首次记录在案的
查看>>
成长路上如何快速升级?你需要强大的自我驱动力
查看>>
C#设计模式之十六观察者模式(Observer Pattern)【行为型】
查看>>
MySQL 读写分离介绍及搭建
查看>>
AgileEAS.NET之ActiveXForm运行容器
查看>>