【发布时间】:2018-10-13 10:43:03
【问题描述】:
我正在试验 webAssembly 并试图找出一种方法来验证 webAssembly 模块使用的 JS 方法的完整性。
为了讨论的目的,我们假设二进制模块是不可破解的(我知道不是这样),但 JS 端是。
给定以下 C 代码:
#include <emscripten.h>
//js method to validate
void validateMe();
int validateMethods(){
// check validateMe integrity.
// return 1 if validation succeeded.
}
EMSCRIPTEN_KEEPALIVE
void doStuff(){
if (validateMethods()){
// do stuff
}
}
我想从JS端调用doStuff(),只有完整性检查成功后doStuff()才会运行。
我想进行某种完整性检查,类似于Subresource,检查方法的 toString 表示。但是,如果我想获取当前的(内存中的)JS 方法 toString,我将不得不调用可能被破坏的 JS。
问:我可以通过其他方式获取 toString 吗?任何其他方法也将不胜感激。
更新:深挖了一下,看了this article,貌似除了共享数组之外没有办法访问JS内存了。因此,任何验证技术都会受到赞赏。
更新 2(目标):我的最终目标是确保 WASM 部分仅适用于特定的 JS,或者至少使其更难与被操纵的 JS 交互。
Fiddle 示例:following fiddle,是一个简单的函数验证,将函数 char 的 toString 逐个字符进行比较。如果您更改 validateMe 函数,验证将失败。我正在尝试“防弹”它。
【问题讨论】:
-
这还不清楚你为什么要混合 javascript 和 wasm 和 C?所以你想使用从 c 文件生成的 wasm 来检查 JS 方法的完整性?另外,“为了讨论的目的,我们假设二进制模块是不可破解的(我知道不是这样),但 JS 端是。”不清楚您所说的“但JS方面是”是什么意思?客户端的一切都不可信。
-
其实你的问题可以分为两个,一个是C部分,另一个是“可以用WASM来检查JS方法的完整性吗?”。我不明白你为什么在你的问题中添加 C 使它变得广泛和不清楚。
-
感谢您的回复。 WASM 是从 C 代码编译而来的。目的是提高恶意用户的门槛,IE:WASM 代码更难操作/调试,JS 对任何调试知识最少的人都是可见的。我的目标是确保 WASM 与特定的 JS 一起工作。
-
请检查我的更新
标签: javascript c security emscripten webassembly