我正在使用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