Javascript匿名函数是否仍然可见? (使用Java applet,一种隐藏JS代码的方法)

时间:2012-03-07 20:00:03

标签: javascript applet

我正在使用Javascript编写应用程序。我正在寻找隐藏代码的方法,我想我已经找到了一个,使用Java Applet。

无论如何,我认为只有在js anonimous functions '代码在评估之后无法以任何方式保持可访问时才应该可行。

(function(){...}).call(obj)

Applet可以获取对它们所在浏览器窗口的引用,并调用其eval方法来评估js代码:

// java code
JSObject window = JSObject.getWindow(this);
window.eval( "(function(){"
  + ...
  + "}).call("
  + thisObjectName
  + ")" );

因此,我可以改变我的js代码,就像一些函数,而不是在里面的代码,调用一个applet函数,要求窗口eval原始的js函数代码,传递给窗口一个无穷大的函数,所以没有函数引用。当然,js函数必须给java函数赋予对象的名称(this),并且java函数必须组成添加对call(objectName)方法的调用的anonimous函数,才能使用{{1正确引用。

this

becames:

MyJsClass.prototype.func = function() { ... };

[更新] 出于两个原因我的想法并不好

  1. Java字节码(.class)易于解编译(感谢Pointy

  2. Applet调用的MyJsClass.prototype.func = function() { ... myApplet.evalJsCode(thisObjectName); ... }; 函数与您可以通过javascript覆盖的函数完全相同(感谢Yoshi

1 个答案:

答案 0 :(得分:4)

您是否考虑过以下可能性?

​window.eval = function (code) {
  console.log('code');
};

eval('alert(1)');

意思是,几乎不需要覆盖eval函数。