Javascript匿名函数是否保持可见?(使用Java小程序,一种隐藏JS代码的方法)

Javascript匿名函数是否保持可见?(使用Java小程序,一种隐藏JS代码的方法),javascript,applet,Javascript,Applet,我正在使用Javascript编写一个应用程序。我正在寻找一种隐藏代码的方法,我想我已经找到了一种,使用JavaApplet 无论如何,我认为只有当js anonimous函数的代码在经过评估后不能以任何方式保持可访问性时,这才有可能实现 (function(){...}).call(obj) 小程序可以获取对其所在浏览器窗口的引用,并调用其eval方法来评估js代码: // java code JSObject window = JSObject.getWindow(this); windo

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

无论如何,我认为只有当js anonimous函数的代码在经过评估后不能以任何方式保持可访问性时,这才有可能实现

(function(){...}).call(obj)
小程序可以获取对其所在浏览器窗口的引用,并调用其
eval
方法来评估js代码:

// java code
JSObject window = JSObject.getWindow(this);
window.eval( "(function(){"
  + ...
  + "}).call("
  + thisObjectName
  + ")" );
因此,我可以更改我的js代码,就像某些函数调用applet函数而不是将其代码放在内部一样,该函数要求窗口
eval
原始js函数代码,并向窗口传递一个匿名函数,这样就不会保留任何函数引用。当然,js函数必须为java函数提供对象的名称(this),java函数必须组成一个匿名函数,向调用(objectName)方法添加一个调用,以正确使用this引用

MyJsClass.prototype.func = function() { ... };
贝卡姆斯:

MyJsClass.prototype.func = function() 
{
  ...
  myApplet.evalJsCode(thisObjectName);
  ...
};

[更新]我的想法不好有两个原因

  • Java字节码(.class)易于反编译(感谢)

  • 小程序调用的
    window.eval
    函数与您可以通过javascript覆盖的函数完全相同(感谢)


  • 你考虑过以下可能性吗

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

    也就是说,覆盖
    eval
    函数几乎不费吹灰之力。

    我可以下载小程序的.class文件并通过Java de编译器运行它们,然后只查看字符串吗?@Alessandro:一切都需要“可见”,否则您将无法运行它。使用“visible”我的意思是您可以反编译它并获取文本代码。我不认为你可以用exe文件做同样的事情。我见过一些用Java编写的商业应用程序:如果反编译这么容易,那怎么可能呢?如果我用另一个名称复制eval函数呢?问题是时间。您永远无法确定,每当您创建副本时,
    eval
    尚未被覆盖。无论如何,如果字节码是可读的,则我的escamotage是无用的。没有一个Java应用程序是封闭源代码的?即使如此,一个坚定的攻击者也可以重新编译浏览器JS解析器来记录通过它运行的所有内容。如果我编译一个嵌入JS代码的开放源代码浏览器并将其用作我的应用程序呢?