天天看點

java js隐藏_Javascript匿名函數是否仍然可見? (使用Java applet,這是一種隐藏JS代碼的方法)...

我正在使用Javascript編寫應用程式.我正在尋找一種隐藏代碼的方法,我想我已經找到了一個使用Java Applet的代碼.

無論如何,我認為隻有在評估js匿名函數的代碼後仍然無法以任何方式通路它時,才應該可行.

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

小程式可以擷取對它們所在的浏覽器視窗的引用,并調用其eval方法來評估js代碼:

// java code

JSObject window = JSObject.getWindow(this);

window.eval( "(function(){"

+ ...

+ "}).call("

+ thisObjectName

+ ")" );

是以,我可以通過以下方式更改我的js代碼,即一些函數而不是将它們的代碼放入内部,而是調用applet函數,該函數要求視窗評估原始js函數代碼,并将一個匿名函數傳遞給視窗,是以功能參考仍然存在.當然,js函數必須為java函數指定對象的名稱(this),并且java函數必須組成匿名函數,将一個調用添加到call(objectName)方法中,以正确使用this引用.

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

成為:

MyJsClass.prototype.func = function()

{

...

myApplet.evalJsCode(thisObjectName);

...

};

[更新]我的主意不好有兩個原因

> Java位元組碼(.class)易于反編譯(感謝Pointy)

> Applet調用的window.eval函數與您可以通過javascript覆寫的完全相同(感謝Yoshi)

解決方法:

您是否考慮過以下可能性?

​window.eval = function (code) {

console.log('code');

};

eval('alert(1)');

意思是,幾乎不需要費力就可以覆寫eval函數.

标簽:applet,javascript

來源: https://codeday.me/bug/20191101/1984840.html