WebAssembly 可以用来保护小程序代码吗?

薛定喵君 发表于 2021/09/24 20:09:06 2021/09/24
【摘要】 WebAssembly是个啥玩意儿?WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案。非 JavaScript 代码可以是 C、C++ 或 Rust 等。这些代码会被编译进你的浏览器,在你的 CPU 上以接近原生的速度运行。这些代码的形式是二进制文件,你可以直接在 JavaScript 中将它们当作模块来用。是不是很爽,JAVA程...

WebAssembly是个啥玩意儿?

WebAssembly 是一种可以使用非 JavaScript 编程语言编写代码并且能在浏览器上运行的技术方案。

非 JavaScript 代码可以是 C、C++ 或 Rust 等。这些代码会被编译进你的浏览器,在你的 CPU 上以接近原生的速度运行。这些代码的形式是二进制文件,你可以直接在 JavaScript 中将它们当作模块来用。是不是很爽,JAVA程序员写的应用可以跑在浏览器里。

所以 WebAssembly 不是编程语言,它是一种中间格式,字节码,可以作为其他语言的编译目标用的。如果是这样的话,那么编译之后的二进制文件字节码实际上就很难被读懂了,也是起到了保护的作用。

那么问题来了,这种技术方案能不能用来保护小程序的代码呢?

要回答这个问题就必须先解决一个问题:
javascript代码是否可以被编译为 wasm?

答案是比较遗憾的,js是一种弱类型的语言,wasm呢是强类型的,想要达到编译目的还是挺难的,虽然网上有很多尝试性的项目,但大多数还只是实验性质的,无法用于生产环境。

所以咯,用js编写的小程序应用自然就无法使用这种手段来保护了。

虽然比较遗憾,但是随着 WebAssembly不断发展。目前,已经有以下语言支持它了:

  • C / C +±通过EmScripten或其他基于LLVM的最小工具链提供了很好的支持(可用于生产环境)
  • Rust-WebAssembly是受官方支持的目标,周围有非常活跃的社区。
  • Go-现在已将WebAssembly作为正式但实验性的目标来支持
  • C#-通过Blazor具有实验支持,但是当前需要将.NET运行时嵌入Wasm。最近发布了预览版,Blazor被Microsoft正式用作实验技术。
  • D-D的“ betterC”子集可以通过LDC(LLVM编译器)编译为WebAssembly。
  • TypeScript-通过AssemblyScript,实验性强,但势头强劲。
  • Java-通过TeaVM或Bytecoder
  • Haxe-刚刚宣布支持
  • Kotlin-Kotlin / Native 0.4通过WebAssembly和TeaVM获得了实验支持
  • Python-Pyodide是WebAssembly的Python移植,其中包括科学Python堆栈的核心软件包(Numpy,Pandas,matplotlib)。
  • PHP-实验性的,但具有有效的原型
  • Perl-WebPerl是Perl二进制文件到WebAssembly的端口,允许您在Web上运行Perl脚本。
  • Scala-使用Emscripten编译器
  • Ruby-通过run.rb项目
  • Swift-使用SwiftWasm,目前正在开发中

商业解决方案:

  • RemObjects-已宣布支持C#,Java,Swift和Oxygene

关于JavaScript,由于WebAssembly是一种静态类型的汇编语言,因此不太可能获得支持。

总之,希望未来会有所突破吧。

参考资料:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。