Ser*_*eit 33 javascript tostring
我刚刚发现当你在javascript函数上调用toString()myFunction.toString()时,就会返回该函数的源代码.
如果您在Firebug或Chrome控制台中尝试它,它甚至可以很好地为您格式化,即使对于最小化的JavaScript文件也是如此.
我不知道混淆文件有什么用.
这样的toString实现有什么用?
HoL*_*ieR 25
它有一些调试用途,因为它可以让你看到函数的代码.您可以检查函数是否已被覆盖,以及变量是否指向正确的函数.
它有一些混淆的JavaScript代码的用途.如果你想在javascript中进行硬核混淆,你可以将整个代码转换成一堆特殊字符,不留任何数字或字母.这种技术在很大程度上依赖于能够通过强制对所有内容进行toString调用来访问大多数字母表+""(例如:(![]+"")[+[]]is f).有些字母v只能通过在本机函数上调用toString来访问[].sort.这封信v对于混淆代码很重要,因为它可以让你调用eval,它可以让你执行任何东西,甚至循环,而不使用任何字母.这是一个例子.
您可以将它用作Javascript源中多行字符串的实现.
正如@tjanczuk在此博客文章中所描述的,Javascript中的一个巨大不便之处是多行字符串.但是您可以利用.toString()多行注释(/* ... */)的语法来生成相同的结果.
通过使用以下功能:
function uncomment(fn){
return fn.toString().split(/\/\*\n|\n\*\//g).slice(1,-1).join();
};
Run Code Online (Sandbox Code Playgroud)
...然后,您可以按以下格式传递多行注释:
var superString = uncomment(function(){/*
String line 1
String line 2
String line 3
*/});
Run Code Online (Sandbox Code Playgroud)
在原始文章中,注意到Function.toString()行为不是标准化的,因此实现是离散的 - 推荐的用法是Node.js(可以依赖V8解释器); 然而,我写的一个小提琴似乎适用于我可用的每一个浏览器(Chrome 27,Firefox 21,Opera 12,Internet Explorer 8).
| 归档时间: |
|
| 查看次数: |
34599 次 |
| 最近记录: |