Javascript果然深不可测,你看得懂这段代码吗?

bobshi 发布于 2011/08/19 09:05
阅读 1K+
收藏 4
(function (F, i, r, e, b, u, g, L, I, T, E) {
		if (F.getElementById(b))
			return;
		E = F[i + 'NS'] && F.documentElement.namespaceURI;
		E = E ? F[i + 'NS'](E, 'script') : F[i]('script');
		E[r]('id', b);
		E[r]('src', I + g + T);
		E[r](b, u);
		(F[e]('head')[0] || F[e]('body')[0]).appendChild(E);
		E = new % 20Image;
		E[r]('src', I + L);
	})
(document, 'createElement', 'setAttribute', 'getElementsByTagName', 'FirebugLite', '4', 'firebug-lite.js', 'releases/lite/latest/skin/xp/sprite.png', 'https://getfirebug.com/', '#startOpened');
加载中
0
烈冰
烈冰
定义一个函数然后立即调用,这种写法在一些框架里很流行
ValueError
ValueError
大多数是为了隔离变量作用域, js 的特色嘛
0
叶联铿
叶联铿
太深奥了,不懂。。
0
RainJ
RainJ
觉得你传的参数有问题~!~
0
xyz555
xyz555

从形式上看就是1楼说的。把最后括号里的参数代入就很容易看懂了。

不过就是在head或body里动态添加一个脚本。

添加的脚本如下。

<script id="FirebugLite" src="https://getfirebug.com/firebug-lite.js#startOpened" firebuglite="4"></script>

但要指出一处错误

E = new % 20Image;

应该是

E = new Image;

效果就是页面底下出现firebug的调试控制台。

0
loowj
loowj
  真不舒服,  (F, i, r, e, b, u, g, L, I, T, E) 这个传参数这命名玩的,把名字替换一下,也就不是很深奥了!
0
Andre.Z
Andre.Z
就是一段压缩过的js
0
bobshi
bobshi
嗯,都是高手啊,就属xyz555说的最详细了,其实这段代码就是firebuglite的书签里的url去掉前面的javascript:,哈哈~我当时就是很好奇,就加个书签就可以在任何你打开的页面注入js代码然后调用了,真是强大,然后看了一下这个书签的的内容,结果发现代码有点儿绕有点儿难懂,勉强看得明白,但发现如果是自己,肯定不会想到这么用,这就是差距啊...
答复哈
答复哈
系统学习一下也就不难了~
0
Liuxd
Liuxd
什么代码这么处理下都很深奥的,因为压根不是给人看的,是给机器看的。机器表示无压力。
0
scl33
scl33

很正常, JS做BASE64,DES加密,MD5摘要, ZIP压缩/解压缩等算法, 早就有人实现了, 你这个只是简单的函数调用, 牵涉原型链的才深奥. 看看下面这个.运行后弹出代码你能看懂吗?

 

eval(function(p,a,c,k,e,r){var b,e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--)a[c]=(r[b=e(c)]=k[c])?b:'\\x0';e=function(){return a.join('|')||'^'};k=[function(e){return r[e]}];c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b('+e(c)+')\\b','g'),k[c]);return p}('alert(0(){2 f=0(o){for(2 m in o){8[m]=o[m]}};2 g=Object.3.1;4 0(a,b,c){9(typeof b==\'object\'){c=b;b=a;a=c.1!=g?c.1:0(){b.apply(8,arguments)}}2 6=0(){},d,e=b.3;6.3=e;d=a.3=new 6();d.1=a;a.h=e;9(e.1==g){e.1=b}a.5=0(o){7.5(a,o)};d.h=d.supr=(0(){4 e});d.5=f;7.5(a,c);a.i=0(o){4 7.i(a,o)};4 a}});',[],31,'function|constructor|var|prototype|return|override|F|Ext|this|if||||||||superclass|extend'.split('|'),0,{}));

0
I12fly
I12fly
写代码不该这样的,参数命名应该明了,让人一看就知道是什么,用来干什么。而不是用来玩猜谜游戏的,若在项目里这样写代码,是会被人砍死的,这样写代码只能说很业余。若代码经过压缩处理,那另当别论
返回顶部
顶部