HTMLやSVGの添付ファイルから、隠れたペイロード、atob/evalの連鎖、外部へ送信するフォームを調べます。
多層デコーダー
ツール自体は英語ですが、このページではお客様の言語でその使い方を説明しています。
多層デコーダー を使用してください
機能の説明
エンコードまたは難読化されたテキストを貼り付けると、読めるテキストか既知のファイル形式になるまで、デコーダーが1層ずつはがしていき、各ステップを表示します。すべてブラウザ内で実行されます。
すべてブラウザ上で動作します。入力した内容は一切アップロードされません。
多層デコーダー の使い方
- エンコードされたテキストを貼り付ける. スクリプト内のBase64データ、長い16進文字列、パーセントエンコードされたテキスト、String.fromCharCodeのリストなどを、Encoded textに貼り付けます。
- デコードする. Decode layers(層をデコード)またはCtrl+Enterを押します。認識された層が最大12層まで順にはがされます。
- 連鎖を読む. 見出しには層が順番に一覧表示されます。各ステップには、方式、前後のサイズ、プレビューが表示されます。
- 結果を活用する. デコードしたテキストをコピーするか、Indicators in the resultを読むか、Send toでHTML Attachment Analyzer、Link Unwrapper、IOC Converter、URL Defangerに渡します。
- 手動で介入する. 層が見逃された場合は、Decode asで方式を選んで適用します。Undo last layerで1つ前に戻ります。
例
gzipをBase64化してURLエンコードしたもの
H4sIAAAAAAACA7MpTi7KLCixK8%2FMS8kv18vJT04syczP08soSk1TsFVQyigpKSi20tdPrUjMLchJ1UvOz9UvSy3KTKu0L04tLgYqtTVPM05UsrbRh5oEACvqcc1SAAAA3 layers: URL percent-encoding → Base64 → gzip
No further encoding recognised.
1
URL percent-encoding
1 escape · 130 → 128 bytes
H4sIAAAAAAACA7MpTi7KLCixK8/MS8kv18vJT04syczP08soSk1TsFVQyigpKSi20tdPrUjMLchJ1UvOz9UvSy3KTKu0L04tLgYqtTVPM05UsrbRh5oEACvqcc1SAAAA
2
Base64
decodes to gzip · 128 → 96 bytes
00000000 1f 8b 08 00 00 00 00 00 02 03 b3 29 4e 2e ca 2c |...........)N..,|
00000010 28 b1 2b cf cc 4b c9 2f d7 cb c9 4f 4e 2c c9 cc |(.+..K./...ON,..|
00000020 cf d3 cb 28 4a 4d 53 b0 55 50 ca 28 29 29 28 b6 |...(JMS.UP.())(.|
… 48 more bytes
3
gzip
96 → 82 bytes
<script>window.location.href = "hxxps://example[.]com/verify?session=7f3a";</script>
Result
Text, 82 bytes.
<script>window.location.href = "hxxps://example[.]com/verify?session=7f3a";</script>
Indicators in the result (1)
URL
hxxps://example[.]com/verify?session=7f3a
Copy indicators (raw)3つの層があります。URLのパーセントエンコード(%2F)、gzipデータにデコードされるBase64、そしてgzip自体で、最後にブラウザをhttps://example.com/verifyに移動させるスクリプトが現れます。
チェック対象
| シグナル | その意味 |
|---|---|
| 層の連鎖 | エンコードの順番で、たとえばHex → Base64です。短いURLやコマンドを何層も包んでいる場合、たいていは誰かがそれを隠したかったことを意味します。 |
| ステップごとのサイズ | 各層の入力と出力のバイト数です。gzipやdeflateの層で大きく増えるのは、通常の展開によるものです。 |
| UTF-16LEのテキスト | 1文字あたり2バイトで、PowerShellの-EncodedCommandに典型的なものです。デコードされたコマンドが何かをダウンロードしたり起動したりする場合は、危険な兆候です。 |
| バイナリの結果 | 最終結果がテキストでない場合は、先頭512バイトの16進ダンプが、検出された形式とともに表示されます。16進数またはBase64としてコピーしてください。決して実行しないでください。 |
| Indicators in the result | デコードしたテキスト内で見つかったURL、メールアドレス、IPv4アドレスで、デファングして表示され、そのままの形でコピーするボタンが付きます。 |
| 停止メッセージ | それ以上のエンコードが認識されなかった、12層の上限に達した、またはステップが以前の結果を繰り返すことになる、のいずれかです。上限に達した場合は、さらに層がある可能性があります。 |
| デファングのオプション | 既定でオンで、結果内のURLとメールアドレスはデファングして表示されます。Copyでは常にそのままのテキストが得られます。 |
| 自動で続けるオプション | 手動のDecode asのステップの後、チェックを外さない限り、デコードが自動的に続きます。 |
| Decode asのリスト | 自動処理で飛ばされたステップのための、Base64、URLセーフBase64、16進数、URLのパーセントエンコード、HTMLエンティティ、エスケープ、文字コード、quoted-printable、gzip、zlib、raw deflate、UTF-16LEです。 |
| コピーボタン | Copyはデコードしたテキストをそのまま渡します。バイナリの結果の場合は、代わりにCopy as hexとCopy as Base64が用意されます。 |
その他の例
RFC 4648のテストベクター
Zm9vYmFy1層:Base64、8 → 6バイト。結果はテキストfoobarで、RFC 4648で公開されている値です。
URLを包むBase64を、さらに包む16進数
6148523063484d364c793973623264706269356c654746746347786c4c6d356c644339795a584e6c64413d3d2層:Hex → Base64(88 → 44 → 31バイト)。結果はhttps://login.example.net/resetで、デファングして表示され、Indicators in the resultに一覧表示されます。
PowerShellのエンコードされたコマンド
UwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgACcAaAB0AHQAcABzADoALwAvAGUAeABhAG0AcABsAGUALgBvAHIAZwAvAHUAcABkAGEAdABlACcA2層:Base64 → UTF-16LEテキストで、PowerShellの-EncodedCommandに典型的なものと注記されます。結果はStart-Process 'https://example.org/update'で、URLは指標として一覧表示されます。
よくある質問
どのエンコードを認識しますか?
Base64(標準とURLセーフ、パディングは任意)、プレーン、0x、\x、空白区切り、コロン区切りの形式の16進数、URLのパーセントエンコード、HTMLエンティティ、\x、\u、\u{…}、%uのエスケープ、String.fromCharCodeのリスト、quoted-printable、gzip、zlib、raw deflate、そしてPowerShellの-EncodedCommandのようなUTF-16LEのテキストです。atob('…')やbase64_decode('…')のような呼び出しやdata: URIも展開されます。
途中で止まったり、テキストがそのままになったりするのはなぜですか?
層が受け入れられるのは、出力が読めるテキスト、既知のファイル形式、または正しく展開できるストリームの場合だけです。そのため、たまたま有効なBase64になっている普通の単語はそのまま残されます。その結果、短いエンコードや珍しいエンコードは見逃されることがあります。Decode asで手動で方式を適用し、Undoで1つ前に戻ってください。12層で停止します。
デコードした内容が実行されたり、送信されたりしますか?
いいえ。デコードには通常のJavaScriptとブラウザのDecompressionStreamを使います。結果はテキストまたは16進ダンプとして表示され、実行、レンダリング、アップロードされることはありません。
このような文字列はどこから来るのですか?
フィッシングページや添付ファイルはURLやコードをBase64や16進数で隠し、ClickFixのページはエンコードされたPowerShellコマンドをクリップボードにコピーし、メールはquoted-printableで届きます。実行する代わりに、ここに文字列を貼り付けてください。
1層ずつデコードできますか?
はい。After a manual step, keep peeling automaticallyのチェックを外し、ステップごとにDecode asで方式を選んでApply to the current resultを押します。
どのくらいのテキストを貼り付けられますか?
最大5 MBです。200,000文字を超える結果は画面上では短縮されますが、Copyでは全文が得られます。
quoted-printableとパーセントエンコードとは何ですか?
どちらも1バイトを記号と2桁の16進数で表します。quoted-printableはメール本文で使われ、=3Dは=を表します。パーセントエンコードはURLで使われ、%2Fは/を表します。