Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tools for WebAssembly #10

Open
monperrus opened this issue Sep 2, 2019 · 62 comments
Open

tools for WebAssembly #10

monperrus opened this issue Sep 2, 2019 · 62 comments

Comments

@monperrus
Copy link
Collaborator

monperrus commented Sep 2, 2019

we collect open-source tools here

@monperrus
Copy link
Collaborator Author

WABT: WebAssembly Binary Toolkit
https://github.com/WebAssembly/wabt

@monperrus
Copy link
Collaborator Author

Octopus: Security Analysis tool for WebAssembly module
https://github.com/quoscient/octopus

@Jacarte
Copy link
Collaborator

Jacarte commented Sep 2, 2019

WASABI: First tool for dynamic analysis of webassembly modules, implemented in RUST

@jianguda
Copy link
Collaborator

jianguda commented Sep 3, 2019

Wasmer: a standalone WebAssembly runtime, for running WebAssembly outside of the Browser
https://github.com/wasmerio/wasmer

@monperrus
Copy link
Collaborator Author

monperrus commented Sep 6, 2019

A small and efficient runtime for WebAssembly & WAS
https://wasmtime.dev/

https://github.com/bytecodealliance/wasmtime

@satabin
Copy link
Collaborator

satabin commented Sep 6, 2019

A small and efficient runtime for WebAssembly & WAS
https://wasmtime.dev/

On that topic, I also intend to add a WASI implementation to Swam, might be relevant for you as it also include security by capabilities.

@Jacarte
Copy link
Collaborator

Jacarte commented Sep 6, 2019

@Jacarte
Copy link
Collaborator

Jacarte commented Sep 24, 2019

@monperrus
Copy link
Collaborator Author

for fun:
Vim editor ported to WebAssembly
https://github.com/rhysd/vim.wasm

@monperrus
Copy link
Collaborator Author

TeaVM is an ahead-of-time compiler for Java bytecode that emits JavaScript and WebAssembly
http://teavm.org/

@monperrus
Copy link
Collaborator Author

Similar to TeaVM
Java to WebAssembly compiler
https://github.com/i-net-software/JWebAssembly

@jianguda
Copy link
Collaborator

Lucet (the Sandboxing WebAssembly Compiler)
Lucet is a native WebAssembly compiler and runtime. It is designed to safely execute untrusted WebAssembly programs inside your application.
https://github.com/bytecodealliance/lucet

@shrin18
Copy link
Contributor

shrin18 commented Nov 17, 2019

a) Web Assembly Studio:
https://webassembly.studio/

b) WASM Explorer - Side by side comparison of WASM, LLVM with Firefox x86 programs
https://github.com/mbebenita/WasmExplorer

@Jacarte
Copy link
Collaborator

Jacarte commented Nov 18, 2019

binaryen.js

@orestisfl
Copy link
Contributor

WebAssembly to C decompiler
https://github.com/wwwg/wasmdec
https://wwwg.github.io/web-wasmdec/

@monperrus
Copy link
Collaborator Author

monperrus commented Nov 26, 2019 via email

@monperrus
Copy link
Collaborator Author

SideFuzz is an adaptive fuzzer that uses a genetic-algorithim optimizer in combination with t-statistics to find side-channel (timing) vulnerabilities in cryptography compiled to wasm.
https://github.com/phayes/sidefuzz

@Jacarte
Copy link
Collaborator

Jacarte commented Nov 29, 2019

Cheerp: a C/C++ compiler for Web applications

@monperrus
Copy link
Collaborator Author

Walrus is a WebAssembly transformation library
https://github.com/rustwasm/walrus

@monperrus
Copy link
Collaborator Author

GraalWasm a WebAssembly engine in GraalVM
https://github.com/oracle/graal/tree/master/wasm

@monperrus
Copy link
Collaborator Author

Gate: a WebAssembly runtime which can migrate live programs across CPU architectures
https://savo.la/introduction-to-gate.html

@Jacarte
Copy link
Collaborator

Jacarte commented Dec 10, 2019

ilwasm
Maps a subset of .NET CIL to WebAssembly S-expressions. Implemented as a custom code generator backend for the JSIL CIL -> JS compiler.

@shrin18
Copy link
Contributor

shrin18 commented Dec 12, 2019

WASM Binary file parser from Mozilla: https://github.com/bytecodealliance/wasmparser

@jianguda
Copy link
Collaborator

twiggy

Twiggy is a code size profiler for Wasm. It analyzes a binary's call graph to answer questions like:

  • Why was this function included in the binary in the first place? Who calls it?
  • What is the retained size of this function? I.e. how much space would be saved if I removed it and all the functions that become dead code after its removal.

@Jacarte
Copy link
Collaborator

Jacarte commented Dec 23, 2019

@monperrus
Copy link
Collaborator Author

@monperrus
Copy link
Collaborator Author

Fuzzing JavaScript WebAssembly APIs with Dharma/Domato (Chrome/v8)
https://webassembly-security.com/fuzzing-wasm-javascript-dharma-chrome-v8/

@monperrus
Copy link
Collaborator Author

inNative WebAssembly Runtime: inNative is an AOT (ahead-of-time) compiler for WebAssembly that creates C compatible binaries, either as sandboxed plugins you can dynamically load, or as stand-alone executables that interface directly with the operating system
https://innative.dev/

@monperrus
Copy link
Collaborator Author

monperrus commented Jan 14, 2020 via email

@Jacarte
Copy link
Collaborator

Jacarte commented Feb 20, 2020

UNIX IN YOUR BROWSER TAB
Run C, C++, Go and Node.js programs as processes in browsers, including LaTeX, GNU Make, Go HTTP servers, and POSIX shell scripts.

https://browsix.org/

@Jacarte
Copy link
Collaborator

Jacarte commented Mar 12, 2020

@Jacarte
Copy link
Collaborator

Jacarte commented Mar 12, 2020

WebAssembly Tool Conventions

This repository holds documents describing conventions useful for coordinating interoperability between wasm-related tools. This includes descriptions of intermediate file formats, conventions for mapping high-level language types, names, and abstraction features to WebAssembly types, identifiers, and implementations, and schemes for supporting debuggers or other tools.

These conventions are not part of the WebAssembly standard, and are not required of WebAssembly-consuming implementations to execute WebAssembly code. Tools producing and working with WebAssembly in other ways also need not follow any of these conventions. They exist only to support tools that wish to interoperate with other tools at a higher abstraction level than just WebAssembly itself.

These conventions are also not exclusive. There could be multiple conventions for a given language for a given purpose. There are natural benefits to interoperability, but there are many reasons where having more than one way to do things can also make sense in many circumstances.

@monperrus
Copy link
Collaborator Author

Octopus: Security Analysis tool for WebAssembly module (wasm) and Blockchain Smart Contracts (BTC/ETH/NEO/EOS)
https://github.com/pventuzelo/octopus

@Jacarte
Copy link
Collaborator

Jacarte commented Mar 16, 2020

Instruments wasm files and traces execution, using Binaryen.js and Wasmer.js

https://github.com/wasm3/wasm-trace

@monperrus
Copy link
Collaborator Author

WebAssembly Virtual Machine: WAVM uses LLVM to compile WebAssembly code to machine code with close to native performance.
https://github.com/WAVM/WAVM/

@monperrus
Copy link
Collaborator Author

the tigress c obfuscator now targets webassembly
https://tigress.wtf/

@satabin
Copy link
Collaborator

satabin commented Apr 20, 2020

Instruments wasm files and traces execution, using Binaryen.js and Wasmer.js

https://github.com/wasm3/wasm-trace

I rely like this one, I think it would be easy to adapt our tracer to produce the same kind of output.

@monperrus
Copy link
Collaborator Author

But you can use <WASMER> in a lot of other languages. After having announced libraries to use Wasmer, and thus WebAssembly, in:

  • PHP with the ext/wasm extension,
  • Python with the wasmer library,
  • Ruby with the wasmer library,
  • Go with the wasmer library (see Announcing the fastest WebAssembly runtime for Go: wasmer), and even
  • Postgres with the wasmer library (see Announcing the first Postgres extension to run WebAssembly),
  • and many other contributions in .NET/C#, R and Elixir…
  • …we are jazzed to announce that Wasmer has now landed in Java!

https://medium.com/wasmer/announcing-the-first-java-library-to-run-webassembly-wasmer-jni-89e319d2ac7c

@monperrus
Copy link
Collaborator Author

Enarx is an application deployment system enabling applications to run
within Trusted Execution Environments (TEEs) without rewriting for
particular platforms or SDKs. It handles attestation and delivery into a
run-time “Keep” based on WebAssembly [...] Work is
currently underway on AMD SEV and Intel SGX.

https://github.com/enarx/enarx

@monperrus
Copy link
Collaborator Author

Proprietary software: Jeb decompiler for WebAssembly

@monperrus
Copy link
Collaborator Author

Blazor: run C# and .NET in WebAssembly
https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor

@Jacarte
Copy link
Collaborator

Jacarte commented Sep 4, 2020

@monperrus monperrus pinned this issue Sep 12, 2020
@orestisfl
Copy link
Contributor

(wasmer) WebAssembly Runtime for python

https://github.com/wasmerio/wasmer-python

@monperrus
Copy link
Collaborator Author

Webassembly Plugins for the Envoy proxy
https://www.solo.io/blog/the-state-of-webassembly-in-envoy-proxy/

(We could write a diversifying proxy by putting Crow there)

@orestisfl
Copy link
Contributor

wasm-smith: A WebAssembly test case generator

https://github.com/fitzgen/wasm-smith

@monperrus
Copy link
Collaborator Author

WasmView: Visual Testing for WebAssembly Applications
https://www.acsu.buffalo.edu/~alanroma/WasmView_Visual_Testing_for_WebAssembly_Applications.pdf

@Jacarte
Copy link
Collaborator

Jacarte commented Oct 27, 2020

wasm-decompile https://v8.dev/blog/wasm-decompile

@bbaudry
Copy link
Member

bbaudry commented Nov 11, 2020

Hosting Blazor WebAssembly in Nginx
https://www.endycahyono.com/article/hosting-blazor-webassembly-in-nginx

@Jacarte
Copy link
Collaborator

Jacarte commented Dec 17, 2020

z3.wasm

https://github.com/cpitclaudel/z3.wasm

This repo contains a build script to compile Z3 to WebAssembly using emscripten. To make things more reproducible, the build script may be run in a Vagrant VM.

@Jacarte
Copy link
Collaborator

Jacarte commented Jan 25, 2021

aWsm - An Awesome Wasm Compiler and Runtime
https://github.com/gwsystems/awsm

@Jacarte
Copy link
Collaborator

Jacarte commented Mar 3, 2021

@vshymanskyy
Copy link

vshymanskyy commented Mar 18, 2021

Just published my collection of wasm tools:
https://github.com/vshymanskyy/awesome-wasm-tools

Hope this is helpful.. Feel free to contribute!

@monperrus
Copy link
Collaborator Author

Thanks @vshymanskyy we have a WASM superoptimizer and a WASM superdiversifier for your awesome list :)

@vshymanskyy
Copy link

@monperrus would love to accept some PRs!
For superdiversifier, it would be cool to see some simple Getting Started guide.

@monperrus
Copy link
Collaborator Author

LAM: an actor-model VM for WebAssembly and native
https://notamonadtutorial.com/lam-an-actor-model-vm-for-webassembly-and-native-d7939362e1b8

@Jacarte
Copy link
Collaborator

Jacarte commented May 4, 2021

https://github.com/migueldeicaza/mono-wasm

@monperrus
Copy link
Collaborator Author

WASM Tooling in Rust by Fastly and Bytecode Alliance: https://github.com/bytecodealliance/wasm-tools (@Jacarte is now contributing to it)

@Jacarte
Copy link
Collaborator

Jacarte commented Dec 7, 2021

wasm-mutate is a new tool for fuzzing Wasm compilers, runtimes, validators, and other Wasm-consuming programs. https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasm-mutate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

8 participants