
近日,一个名为 InvisibleJS 的新开源工具引发了安全社区的关注。它能够利用不可见的零宽度 Unicode 字符来隐藏 JavaScript 代码,这不禁让人联想到它在恶意软件活动中被滥用的潜在风险。
InvisibleJS 由开发者 oscarmine 托管在 GitHub 上,其核心原理是利用隐写术将源代码嵌入到看似完全空白的文件中。具体过程是将 JavaScript 代码转换为二进制字符串,然后将“0”映射到零宽度空格 (U+200B),将“1”映射到零宽度非连接符 (U+200C)。运行时,一个微小的引导加载程序会解码并执行这些隐藏的有效载荷,使得代码在 VS Code 等编辑器中用肉眼无法察觉。
两种版本,适用于不同环境
该工具库提供了两个版本,以适应不同的运行环境:
- 版本 1(经典版,带 eval):非常适合 CommonJS 和旧版 Node.js 设置,原生支持
require 和 module.exports。
- 版本 2(现代导入):以 ES 模块为目标,使用动态
await import() 来支持顶级 await 和导出。不过,它需要 .mjs 文件或在 package.json 中配置 “type”: “module”。
通过 CLI 轻松隐藏代码
通过命令行界面 (CLI) 来隐藏代码非常简单,只需执行相应版本的命令即可:
版本 1:
node hideV1.mjs -i input.js -o hidden.js
版本 2:
node hideV2.mjs -i input.js -o hidden.js
执行 node hidden.js 命令后,尽管文件在编辑器中看起来是一片空白,但程序依然会正常产生预期的输出结果。
潜在的安全风险与关联
这项技术与 2018 年出现的“零宽度 JavaScript”概念验证技术一脉相承,而后者如今已被实际应用于网络钓鱼攻击中。攻击者会滥用类似的 Unicode 混淆技术,例如使用韩文字符来编码二进制数据,从而在脚本中隐藏恶意负载,并绕过带有反调试检查的安全扫描器。

InvisibleJS 的出现可能会放大此类威胁。它使得在 Node.js 环境或 Web 应用程序中部署隐蔽的恶意软件加载器成为可能,从而让威胁检测工作变得更加复杂。对于开发者和安全研究人员而言,理解这类隐写术的原理是防范相关安全风险的第一步。
如果你想深入探讨更多前沿技术或安全话题,欢迎来 云栈社区 与大家交流分享。
|