WebAssemblyの解析
WebAssembly Inspector
.wasmモジュールのインポート・エクスポート・メモリ・セクションの大きさを並べ、テキスト形式でも出力します。
`.wasm`のファイルを開いて、中に何が入っているかを見せます。セクションとその大きさ、インポートとエクスポートのすべて、メモリとテーブルの宣言、そしてビルドがnameセクションを残していれば関数名まで出ます。モジュールはパースするだけで、インスタンス化も実行もしません。
.wasm モジュールをドロップ
このタブで解析します。モジュールを調べるだけで、インスタンス化も実行もしません。
WebAssembly.validate で照合します。関数の本文は大きさを測るだけで、逆アセンブルはしません。ここに出るのはモジュールが何を宣言し何に触れるかであって、テキスト形式への完全な変換ではありません。使い方
モジュールを置きます
`.wasm`のファイルなら何でも構いません。このタブの中で読み、ブラウザ自身の`WebAssembly.validate`と突き合わせます。整形式かどうかについて、2つ目の意見も一緒に得られるということです。
まずセクションを見ます
大きさの表が、バイトがどこへ行ったのかをいちばん早く示します。dataセクションが大きければアセットが埋め込まれているということで、customセクションが大きければ、たいていはデバッグ用の名前かDWARFです。
インポートを読みます
インポートは、そのモジュールとホストとのあいだの契約のすべてです。呼び出せる関数も、共有するメモリも、全部そこにあります。自分でビルドしていないモジュールを調べているなら、重要なのはこの一覧です。
よくある質問
実際のコードを見られますか
見られません。関数の本体は大きさを測るだけで、逆アセンブルはしません。モジュールが何を宣言し、何に触れるのかを報告するだけで、テキスト形式に変換することはありません。完全な逆アセンブルは、WABTの`wasm2wat`の仕事です。
関数名が出ないのはなぜですか
ビルドがnameのカスタムセクションを取り除いたからです。リリース向けのビルドはふつうそうします。エクスポートのほうは名前を保ちます。モジュールのインターフェースだからです。だからエクスポートされた関数は、それでも見分けられます。
インポートのあるモジュールは危険ですか
それ自体では危険ではありません。WebAssemblyはホストが渡したものにしか届きませんし、インポートの無いモジュールは外の世界にまったく触れられません。インポートに書かれているものが、そのモジュールにできることのすべてです。だからインスタンス化する前に読む値打ちがあります。
パースはできたのに、エンジンの検証は無効だと言います
見ているものが違います。パースは構造を読み、`WebAssembly.validate`は関数の本体の型まで検査します。セクションの構造はきれいに読めるのに、それでも拒否されることがあります。ファイルが途中で切れているか、後処理の工程が触ってはいけないバイトを書き換えた場合です。
ここから渡せます
16進ダンプビューアー
Hex Viewer
どんなファイルもオフセット・16進・ASCIIのダンプで開き、マジックバイトから形式を当て、検索の当たりを光らせます。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
鍵ペア生成
Key Pair Generator
RSA・ECDSA・Ed25519の鍵ペアを作り、PEM・JWK・OpenSSHで書き出します。
SSH鍵の生成
SSH Key Generator
コメントを付けたOpenSSHの鍵ペアを作り、フィンガープリントも表示します。秘密鍵はパスフレーズなしで出力されるので、必要ならssh-keygen -pで自分でかけてください。
次の一手
このツールが出したものをそのまま受け取れる道具です。
Dockerイメージのレイヤー解析
Docker Image Explorer
書き出したイメージのtarを開き、レイヤーごとのコマンド・大きさ・足したり消したりしたファイルを見せます。
16進ダンプビューアー
Hex Viewer
どんなファイルもオフセット・16進・ASCIIのダンプで開き、マジックバイトから形式を当て、検索の当たりを光らせます。
JavaScript整形・圧縮
JavaScript Beautifier & Minifier
名前は一切変えずにJavaScriptやTypeScriptからコメントと空白だけを落とし、1行に潰れたバンドルは読めるところまでインデントし直します。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
curlをコードに変換
curl to Code
curlのコマンドをfetch・axios・Pythonのrequests・Go・PHP・PowerShellのコードに変換します。
文字列のハッシュ
Text Hash
文字列のMD5・SHA-1・SHA-256・SHA-384・SHA-512・CRC-32を計算し、大文字表記とBase64での出力も選べます。