模拟JS执行以读取堆内存

问题描述

我遇到一个问题,需要查看特定的JavaScript源代码是否占用大量堆空间。理想情况下,我想访问堆内存使用情况和堆中对象的数据类型。问题在于,似乎我必须执行代码才能访问堆内存分配信息。

但是,该代码是恶意的(堆喷射攻击),因此我想避免完全执行。我有办法模拟执行吗?我已经读过我可以使用sbrk或API钩子(MSFT Detours)来获取特定进程(通常是JS解释器/引擎)的内存使用情况,但是看起来这些用例实际上执行了代码

编辑: 我需要将堆内存作为用于多个JS文件的管道的一部分进行访问,因此通过命令或API获得内存信息将是理想的选择。

解决方法

如果您使用的是Chrome,则可以使用“开发工具”的“性能”标签。只需按记录刷新页面或应用JS脚本即可: enter image description here

如果要查看JS内存,也可以使用任务管理器。 enter image description here->更多工具->任务管理器 enter image description here

,

“模拟执行”是什么意思?

通常来说:JavaScript引擎是用来执行JavaScript的。真实的。

对于分析恶意代码,您可能希望尽可能地对其进行沙盒隔离。从理论上讲,在浏览器中正常执行该操作就足够了-尽管在实践中,浏览器中有时确实存在安全漏洞,并且恶意代码会尝试利用这些漏洞,所以对于此特定目的,可能还不够。 >

一种方法是在沙箱中添加整个其他层。找到一个JavaScript-on-JavaScript解释器。或选择一个非JIT编译的JavaScript引擎,并将其编译为WebAssembly,然后从您的应用中运行它。然后,您可以检查运行恶意代码的WebAssembly实例的内存;此内存作为ArrayBuffer公开给您的JavaScript应用。 (对于这种JS引擎,我没有特别的建议,但我确定它们存在。)要使这样的设置进行一点点努力(不确定;还没有尝试过),但是它d使您与邪恶代码完全隔离。