サイバー・スイスアーミーナイフ - 暗号化、エンコーディング、圧縮、データ解析のためのウェブアプリ
# CyberChef
[](https://github.com/gchq/CyberChef/actions?query=workflow%3A%22Master+Build%2C+Test+%26+Deploy%22)
[](https://www.npmjs.com/package/cyberchef)
[](https://github.com/gchq/CyberChef/blob/master/LICENSE)
[](https://gitter.im/gchq/CyberChef?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
#### *サイバー版スイスアーミーナイフ*
CyberChefは、ウェブブラウザ内であらゆる種類の「サイバー」オペレーションを実行するための、シンプルで直感的なウェブアプリです。これらのオペレーションには、XORやBase64などの単純なエンコーディング、AES、DES、Blowfishなどのより複雑な暗号化、バイナリやhexdumpの作成、データの圧縮と解凍、ハッシュとチェックサムの計算、IPv6およびX.509の解析、文字エンコーディングの変更などが含まれ、その他にも多数あります。
このツールは、技術者・非技術者を問わずアナリストが複雑なツールやアルゴリズムを扱うことなく、複雑な方法でデータを操作できるように設計されています。数年にわたり、アナリストが自身の10%のイノベーションタイムを使って考案、設計、構築し、段階的に改良してきました。
## Contents
- [Official website](#official-website)
- [Running Locally](#running-locally)
- [With Docker](#with-docker)
- [From source](#from-source)
- [How it works](#how-it-works)
- [Features](#features)
- [Deep linking](#deep-linking)
- [Browser support](#browser-support)
- [Node.js support](#nodejs-support)
- [Security](#security)
- [Contributing](#contributing)
- [Licencing](#licencing)
## Official website
[CyberChefの公式ウェブサイトはこちら][1] - お楽しみください!
## Running Locally
CyberChefはDocker(ツールチェーン不要)で実行するか、Node.jsでソースからビルドすることができます。
### With Docker
**前提条件**
- [Docker](https://www.docker.com/products/docker-desktop/)
- Docker Desktopがマシン上で開いて実行されている必要があります
#### オプション1: Dockerイメージを自分でビルドする
1. Dockerイメージをビルドします
```bash
docker build --tag cyberchef --ulimit nofile=10000 .
```
2. Dockerコンテナを実行します
```bash
docker run -it -p 8080:8080 cyberchef
```
3. ブラウザで `http://localhost:8080` にアクセスします
#### オプション2: 事前にビルドされたDockerイメージを使用する
ビルドプロセスを省略したい場合は、事前にビルドされたイメージを使用できます
```bash
docker run -it -p 8080:8080 ghcr.io/gchq/cyberchef:latest
```
前と同様に、ブラウザで `http://localhost:8080` にアクセスしてください。
このイメージは、当社の[GitHub Workflows](https://github.com/gchq/cyberchef/blob/master/.github/workflows/releases.yml)を通じてビルド・公開されています。
### From source
CyberChefを開発したい場合やDockerなしで実行したい場合は、Node.jsで直接ビルドできます。
**前提条件**
- [Node.js](https://nodejs.org/) `v24`([Node.jsのサポート](#nodejs-support)を参照)
> [!NOTE]
> [nvm](https://github.com/nvm-sh/nvm)を使用してNode.jsのバージョンを管理し、[このプロジェクト](https://github.com/gchq/cyberchef/blob/master/.nvmrc)の現在の開発バージョンを使うことで、マシン上の他のプロジェクトとの競合を回避できます。
**セットアップ**
```bash
git clone https://github.com/gchq/CyberChef.git
cd CyberChef
npm install
```
**一般的なタスク**
| コマンド | 説明 |
| --- | --- |
| `npm start` | `http://localhost:8080` でライブリロード対応の開発サーバーを実行します。 |
| `npm run build` | `build/prod` ディレクトリに本番ビルドを生成します。 |
| `npm test` | Node.jsおよびオペレーションのテストスイートを実行します。 |
| `npm run testui` | ブラウザ(UI)テストを実行します。 |
| `npm run lint` | コードをリンティングルールに照らしてチェックします。 |
| `npm run newop` | インタラクティブなクイックスタートスクリプトで新しいオペレーションの雛形を作成します。 |
大きなレシピをビルドする際にメモリ不足エラーが発生した場合は、`npm run setheapsize` でNodeのヒープサイズを増やしてください。
## How it works
CyberChefには主に4つのエリアがあります:
1. 右上にある**入力**ボックス。操作したいテキストやファイルを貼り付け、入力、またはドラッグできます。
2. 右下にある**出力**ボックス。処理結果が表示されます。
3. 左端にある**オペレーション**リスト。CyberChefが対応するすべてのオペレーションをカテゴリ別リストまたは検索で見つけられます。
4. 中央にある**レシピ**エリア。使用したいオペレーションをドラッグし、引数やオプションを指定できます。
オペレーションは、シンプルにも複雑にも、好きなだけ自由に組み合わせて使用できます。いくつかの例は以下のとおりです:
- [Base64エンコードされた文字列をデコードする][2]
- [日付と時刻を別のタイムゾーンに変換する][3]
- [Teredo IPv6アドレスを解析する][4]
- [hexdumpからデータを変換し、その後解凍する][5]
- [シェルコードを復号して逆アセンブルする][6]
- [複数のタイムスタンプを完全な日付として表示する][7]
- [異なるタイプのデータに対して異なるオペレーションを実行する][8]
- [入力の一部をオペレーションの引数として使用する][9]
- [暗号ストリームの先頭からIVを抽出してAES復号を実行する][10]
- [同じAES復号を実行するより簡単な方法][13]
- [ネストされた複数層のエンコーディングを自動的に検出する][12]
## Features
- ドラッグ&ドロップ
- オペレーションはレシピリストにドラッグイン/ドラッグアウトしたり、並べ替えたりできます。
- 最大2GBのファイルを入力ボックスにドラッグして、ブラウザに直接読み込むことができます。
- オートベイク
- 入力またはレシピを変更するたびに、CyberChefが自動的に「ベイク」して、すぐに出力を生成します。
- パフォーマンスに影響がある場合(入力が非常に大きい場合など)は、これをオフにして手動で操作できます。
- 自動エンコーディング検出
- CyberChefは[さまざまな手法](https://github.com/gchq/CyberChef/wiki/Automatic-detection-of-encoded-data-using-CyberChef-Magic)を使用して、データがどのエンコーディングであるかを自動的に検出しようとします。データを理解できる適切なオペレーションが見つかった場合、出力フィールドに「magic」アイコンが表示され、クリックするとデータをデコードできます。
- ブレークポイント
- レシピ内の任意のオペレーションにブレークポイントを設定して、実行前に一時停止できます。
- レシピをオペレーションごとにステップ実行して、各段階のデータの状態を確認することもできます。
- レシピの保存と読み込み
- また使いたいと思う素晴らしいレシピを作成したら、「Save recipe」をクリックしてローカルストレージに追加するだけです。次回CyberChefにアクセスしたときに保存されています。
- レシピと入力を含むURLをコピーして、他の人と簡単に共有することもできます。
- 検索
- 使用したいオペレーションの名前や関連する単語を知っている場合は、検索フィールドに入力し始めると、一致するオペレーションがすぐに表示されます。
- ハイライト表示
- 入力または出力でテキストをハイライトすると、オフセットと長さの値が表示され、可能であれば対応するデータがそれぞれ出力または入力でハイライトされます(例:[入力で「question」という単語をハイライトすると、出力のどこに表示されるかを確認できます][11])。
- ファイルへの保存とファイルからの読み込み
- いつでも出力をファイルに保存したり、ファイルを入力フィールドにドラッグ&ドロップして読み込んだりできます。ブラウザにもよりますが最大約2GBのファイルがサポートされています。ただし、この量のデータに対して一部のオペレーションは非常に長い時間がかかる場合があります。
- CyberChefは完全にクライアントサイドで動作
- レシピ設定や入力(テキスト・ファイルのいずれも)がCyberChefのウェブサーバーに送信されることは一切ありません。すべての処理はお使いのブラウザ内、つまり自分のコンピューター上で実行されます。
- この機能により、CyberChefはダウンロードしてローカルで実行できます。アプリの左上隅にあるリンクを使用してCyberChefの完全なコピーをダウンロードし、仮想マシンに入れたり、他の人と共有したり、閉じたネットワークでホストしたりできます。
## Deep linking
CyberChefのURLハッシュを操作することで、ページが開くときの初期設定を変更できます。
形式は `https://gchq.github.io/CyberChef/#recipe=Operation()&input=...` です。
サポートされている引数は、`recipe`、`input`(Base64でエンコード)、`theme` です。
## Browser support
CyberChefは以下をサポートするように構築されています。
- Google Chrome 50+
- Mozilla Firefox 38+
## Node.js support
CyberChefはNode.js `v24`を完全にサポートするように構築されており、アクティブなLTSリリースとなる前にNode.js `v26`でもテストされています。詳細については、["Node API" wikiページ](https://github.com/gchq/CyberChef/wiki/Node-API)を参照してください。
## Security
[CyberChefセキュリティポリシー](https://github.com/gchq/cyberchef/blob/master/SECURITY.md)を参照してください。
## Contributing
CyberChefへの新しいオペレーションのコントリビュートはとても簡単です!クイックスタートスクリプトが手順を案内してくれます。基本的なJavaScriptが書けるなら、CyberChefオペレーションを書くことができます。
インストールのチュートリアル、新しいオペレーションやテーマの追加方法、リポジトリ構造の説明、利用可能なデータ型、コーディング規約はすべて、["Contributing" wikiページ](https://github.com/gchq/CyberChef/wiki/Contributing)に記載されています。
- 変更を自分のフォークにプッシュします。
- プルリクエストを提出します。初めての場合は、プルリクエスト上のCLAアシスタントを通じて[GCHQコントリビューターライセンス契約](https://cla-assistant.io/gchq/CyberChef)への署名を求められます。また、コントリビューションへの感謝の印としてGCHQが連絡することや、GCHQでの就職機会について連絡してもよいかも尋ねられます。
## Licencing
CyberChefは[Apache 2.0ライセンス](https://www.apache.org/licenses/LICENSE-2.0)の下で公開されており、[Crown Copyright](https://www.nationalarchives.gov.uk/information-management/re-using-public-sector-information/uk-government-licensing-framework/crown-copyright/)の対象です。
[1]: https://gchq.github.io/CyberChef
[2]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[3]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[4]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[5]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[6]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[7]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[8]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[9]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[10]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[11]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[12]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1
[13]: https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)&input=VTI4Z2JHOXVaeUJoYm1RZ2RHaGhibXR6SUdadmNpQmhiR3dnZEdobElHWnBjMmd1