質問: webサイトのhtmlに ```
回答: > > 実際にハッシュを計算しているcryptnightのアルゴリズムは > > coinhiveサーバーから読み込まれたjsファイルのどこに含まれているのでしょうか > > > CoinhiveのJavaScript内には、WebAssembly のバイナリコードが含まれています。このWebAssemblyはいくつかの関数を提供し、恐らくその中の`_cryptonight_hash_variant_2` が繰り返し呼ばれるメインの処理です。 では、WebAssemblyがJavaScriptのコードのどこにあるかというと、冒頭の箇所 ``` (new Function((function(s){var d={},a=(s+"").split(""), /*略*/ atob("dmFyIF8w /*略*/ ``` で`atob`関数に渡されている長い文字列の中です。これはデコードされると下のようなJavaScriptコードとなり、`Function` に渡されて実行されます。 ``` var _0xb10b = [ "wss://ws024.authedmine.com/proxy", /*略*/ "Res", "\x20self.WASM_BINARY_INLINE=\x20[0,97,115,109,1,0, /*略*/ ``` この中の `"\x20self.WASM_BINARY_INLINE=\x200,97,115,109,1,0,` で始まる文字列は[BlobにされWorkerに渡されることで、これもまた下のようなJavaScriptのコードとなりCPUの数だけ起動されたWorker内で実行されます。 ``` self.WASM_BINARY_INLINE= [0,97,115,109,1,0,0,0,1,51,9,96, /*略*/ ``` この冒頭で `self.WASM_BINARY_INLINE` に代入されている配列が該当のWebAssembryです。これが`WebAssembly.instantiate()` によってコンパイルされ実行されます。