OP 发了不少帖子了,一直想证明前端利用 wasm 做混淆很难破解。这个结论本身没问题,你要逆向 wasm 的内部逻辑就要走汇编调试那一套。只靠单纯的前端技术应付不了,但是在做逆向的人眼里,没什么区别。
这里大部分回复的都是在说,wasm/js 的交互机制决定了,多数时间把 wasm 当黑盒,用 RPC 方式调用就好了。没有必要去理会内部实现。
这里讨论的隐藏前提是用混淆手段防机器人的,基于加密参数限制非 web 客户端对于后端 api 的调用。
然后 OP 提出,这个加密逻辑全生命流程只能执行一次。说实话我想象不到这样的代码的应用场景,特别是防机器人的方面。(比较接近的是类似微信读书,原始 html 用 canvas 重渲染然后删掉原始数据)
对于 RPC 调用的应对,OP 认为可以在 wasm 内部做针对外部环境的检测。这一点我从根本上就不认同。
因为从根本上,客户端就不是可信的运行环境。别说浏览器了,手机 app 为什么都要做 root 越狱检测,都是一样的道理。这是个技术之外的哲学问题,你能判断自己是不是生活在虚拟世界里吗?
至于实践方面,我是比较赞同 @
tool2d 的,基于虚拟机的混淆,模糊掉控制流和调用逻辑,给逆向的人造成的烦躁感远比 wasm 大多了。
而且虚拟机类型的混淆是可以高度自动化的,你可以每天都变换生成参数和算法。然而逆向虚拟机类混淆是没有什么自动化手段的。