这个网站定义了哪些javascript函数?

时间:2011-09-06 23:01:51

标签: javascript hide obfuscation hidden

我想知道在访问网站时是否可以隐藏javascript文件。在第一时刻,我认为这是不可能的,您可以尽可能地混淆代码,但用户仍然可以访问它。

然而,我开始阅读一些博客帖子和网站,这些帖子和网站提出了一些黑客攻击"尝试"隐藏js代码。我读到的一些帖子在哪里发表论文:

http://www.webmasterworld.com/forum91/2713.htm

http://www.codingforums.com/archive/index.php/t-23293.html

我对它们并不了解。有人可以向我解释一下吗?

这是一个示例:我一直在浏览此页面http://www.regexbuddy.com/,我开始使用谷歌浏览器检查器查看源代码,以了解如何实现显示菜单下拉列表的功能。我可以看到每个菜单项都有一个onmouseover =" showpopup(x);"事件。不幸的是我无法找到这个js函数" showpopup",在整个代码中都没有使用其他javascript函数(例如showmenu)。服务器发送2个javascript文件 menu.js jgsoft.js ,但这些文件都不包含函数定义。这些函数既未在html中定义为内联脚本。

奇怪的是,如果在谷歌控制台中输入window.showpopup我能够读取该功能。那么这些功能在哪里定义?可能的黑客攻击"尝试"隐藏javascript文件?如何绕过这些黑客攻击?

3 个答案:

答案 0 :(得分:1)

在regexbuddy.com的情况下 - 正如您所猜测的那样,代码全部在this file,但是它使用packer打包。它可能包装试图更快地提供它,而不是让它难以阅读,但它可能是两个原因。

您可以通过将jgsoft.js的内容粘贴到this tool来“解压缩”。

所以基本上 - 是的,你可以隐藏所有代码,但由于浏览器必须执行它,所以总是可以实现。

答案 1 :(得分:1)

Javascript的eval()函数将字符串作为参数,将该字符串的内容解析为javascript源并在调用上下文中执行。这通常是这种混淆代码的核心。

在您的示例页面上,文件jgsoft.js包含javascript,执行时会生成一个字符串,其中包含所需函数的定义,然后使用eval()执行该函数,从而定义函数

如果您首先浏览该函数并在相关点添加换行符/空格,则可以使用Javascript调试器,让您逐行执行执行并查看执行状态,如Firebug,以观察过程

在这种情况下,似乎已经完成了打包以使文件更小,而不仅仅是混淆。一般来说,javascript混淆是没有意义的:如果你的浏览器可以看到它,你也可以。

答案 2 :(得分:0)

这是一个标准的黑客 -

document.write(
  '<scr' + 'ipt type="text/javascript">function fo' + 'o(){alert("hello!");}');

尝试搜索foo():)

的来源

最终,脚本始终存在 - 因为Javascript是一种解释(即脚本)语言,必须在某个时刻加载 naked 源才能执行。它可能会被混淆,但必须存在。

所以,不,你不能'隐藏'javascript源 - 你可以让它很难找到。通常,调试+步骤是答案;如果你有耐心。