Rust 编译 Wasm 文本格式的问题

2022-11-21 22:39:24 +08:00
 horou

我用 Rust 编译到WebAssembly后,看了一下WebAssembly的文本格式

发现里面能看到我定义的全局变量的值和函数名称,还有使用的库和库的路径。

想问一下各位大佬有没有什么办法能够去掉这些,或者让其不明文显示。

2070 次点击
所在节点    Rust
16 条回复
0o0O0o0O0o
2022-11-21 22:43:29 +08:00
strip
horou
2022-11-21 22:53:59 +08:00
@0o0O0o0O0o 试过了,没用呃
DianQK
2022-11-21 22:56:34 +08:00
看起来是 panic 之类会记录当前的一些信息,不知道转成 abort 有没有帮助?
GeruzoniAnsasu
2022-11-21 23:45:25 +08:00
rust 我不懂

但 c/c++上,想要去掉一切可能暴露本地环境的字符串的方法是,覆盖掉 __file__ __func__ 之类的宏
araaaa
2022-11-22 08:01:58 +08:00
开启 lto 试试
GuuJiang
2022-11-22 08:46:06 +08:00
--remap-path-prefix
horou
2022-11-22 09:38:35 +08:00
@DianQK 感觉有点像这个问题,但是我加了 panic = "abort" 还是没效果
horou
2022-11-22 09:38:52 +08:00
@araaaa 开启了,没得效果
horou
2022-11-22 09:39:47 +08:00
@GuuJiang 我是用的 wasm-pack 编译的,这个参数该怎么加上去呀,我用 RUSTFLAGS="--remap-path-prefix=" 这种方式加上,没得效果
lisxour
2022-11-22 17:40:20 +08:00
@horou RUSTFLAGS="--remap-path-prefix=C:\Users\XXX\.cargo=CARGO_HOME"
注意只能替换一部分,没法完全去除
horou
2022-11-22 18:10:57 +08:00
@lisxour 谢谢,这种方式可以把用户名的路径隐藏掉, 字符串常量我也用编译混淆的工具解决了,目前就只有这些使用的库的路径还有自己定义的模块名和函数名称还是没办法去掉。
lisxour
2022-11-23 08:58:23 +08:00
@horou 这个问题 Rust 社区已经反馈很久了,目前来说,后面的部分是无法隐藏的,且没有工具能去除。
horou
2022-11-23 09:27:04 +08:00
@lisxour 可执行的二进制文件倒是可以用 upx 压缩解决,但是不适用 wasm 。
whoami9894
2022-11-23 16:33:06 +08:00
cargo -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort build
horou
2022-11-23 22:38:22 +08:00
@whoami9894 感谢,虽然还是没有效果,但是这个 FLAGS 让我编译出来的 wasm 文件大小减少了很多,哈哈
ginjedoad
2023-01-16 15:56:20 +08:00
试试 obfstr

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX