> For AI agents: the complete documentation index is available at /ja/llms.txt, the full documentation bundle is available at /ja/llms-full.txt.

# はじめに


[![Telegram Group](https://img.shields.io/endpoint?color=blue&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fgzctf)](https://telegram.dog/gzctf)[![Discord](https://img.shields.io/discord/1239476909033656320?label=Discord)](https://discord.gg/dV9A6ZjVhC)

[![publish](https://github.com/GZTimeWalker/GZCTF/actions/workflows/ci.yml/badge.svg)](https://github.com/GZTimeWalker/GZCTF/actions/workflows/ci.yml)![version](https://img.shields.io/github/v/release/GZTimeWalker/GZCTF?include_prereleases&label=version)![license](https://img.shields.io/github/license/GZTimeWalker/GZCTF?color=FF5531)[![Crowdin](https://badges.crowdin.net/gzctf/localized.svg)](https://crowdin.com/project/gzctf)

GZ::CTF は ASP.NET Core に基づいたオープンソース CTF プラットフォームで、コンテナバックエンドとして Docker または K8s を使用し、カスタマイズ可能なチャレンジ、動的コンテナ、および動的スコアリングを提供します。

GZ::CTF はデュアルライセンスを採用しています。コアコードは AGPLv3 契約に基づいたオープンソースであり、一部の制限付きコンポーネントは別のライセンスで提供されます。使用と変更はそれぞれのライセンス契約に準拠する必要があります。導入を開始するには、[クイックスタート](/ja/guide/start/quick-start.md)を参照してください。

> このプロジェクトは、CTFd の実装は洗練されておらず、動的なコンテナ構成にはプラグインの使用が必要で、UI の見た目も良くないという欠点があって、それらを改善して、大会の開催をよりうまくできるようにするために開発を始めました。

:::warning

**アップグレードと移行に関する注意事項:**

1. プラットフォームをアップグレードするには、最新のイメージを取得して再起動するだけで、データベースの移行が自動的に行われます。
2. 一般的に、**ダウングレード** 操作はサポートされていません。時間スパンが大きいバージョンのアップグレードは、データの非互換性を引き起こす可能性があるため、**データのバックアップを取ることをお勧めします**。
3. アップグレード後、新しい構成項目やファイル構造の変更がある場合があります。公式ドキュメントやコミュニティに相談することをお勧めします。
4. 別のブランチプロジェクトに移行する場合は、データベース構造が変更されていないかどうかに注意してください。**変更後のデータベースは元のバージョンにロールバックできません**。
5. コミュニティと公式メンテナーは、データの損失、データの非互換性、その他の問題について責任を負いません。ブランチプロジェクトの問題については、対応するプロジェクトメンテナーに連絡してください。

:::

## 機能 🛠️

- 高度にカスタマイズ可能なチャレンジを作れる
  - チャレンジ種類：静的アタッチメント、動的アタッチメント、静的コンテナ、動的コンテナ
    - 静的アタッチメント：アタッチメントは共有され、追加されたフラッグのどれも提出可能となります。
    - 動的アタッチメント：チーム数に応じたフラッグやアタッチメントが少なくとも必要となり、チームに応じてアタッチメントやフラッグが配布されます。
    - 静的コンテナ：コンテナのテンプレートは共有され、フラッグは発行されず、追加されたフラッグのどれも提出可能となります。
    - 動的コンテナ：フラッグは自動的に生成され、コンテナ環境変数を通じて配布され、各チームのフラッグは一意です。

  - 動的スコアリング
    - スコアリングカーヴ：

      ```math
      f(S, r, d, x) = \left \lfloor S \times \left[r + ( 1- r) \times \exp\left( \dfrac{1 - x}{d} \right) \right] \right \rfloor
      ```

      このうち、 $S$ はオリジナルスコア、 $r$ は最低スコア率、 $d$ は難易度係数、 $x$ は提出数です。 最初の 3 つのパラメータは、ほとんどの動的なスコア要件を達成するためにカスタマイズできます。

    - ボーナス：
      プラットフォームは、最初の3チームにそれぞれ現在のスコアの 5%、3%、および 1% をボーナスとして与えます。

  - チャレンジはゲーム中に有効または無効にすることができ、複数回公開もできます。

  - 動的フラッグのチャレンジに対する不正検出機能、オプションのフラッグテンプレートとリートフラッグ機能

- **チーム**のスコアタイムライン、スコアボード。チームはグループ化できます

- **Docker または K8s** に基づいた動的なコンテナの分散、管理、および複数のポート マッピング方法のサポート

- SignalR に基づいた**リアルタイム**ゲーム通知、ゲームイベントとフラッグ送信とログの監視

- SMTP メール検証機能、Cloudflare Turnstile による悪意のある登録防止

- ユーザーのブロックおよび権限管理

- オプションのチームレビュー、招待コード、登録メール制限

- プラットフォーム内での Writeup（解答記事）の収集、レビューとバッチダウンロード

- ランキングのダウンロードおよびエクスポート、すべての提出もダウンロードできます

- 大会中の提出と主要イベントのログ監視

- TCP over WebSocket プロキシによるチャレンジトラフィックの転送、トラフィックキャプチャの設定が可能

- Redis ベースのクラスター キャッシュ、PGSQL をデータベースとして使用

- ローカルディスクおよび**オブジェクトストレージ（MinIO、S3など）**&#x306B;基づくストレージバックエンド

- グローバル設定でプラットフォームタイトルと他の情報を設定可能

- **ダークモード**、多言語、カスタムテーマのサポート

- **ウェブサイトのフッター**、**ファビコン**、SEO向け**HTMLの説明**のカスタマイズ可能

- メトリクスと分散トレーシングのサポート

- その他...

## Stars ✨

[![Stargazers over time](https://starchart.cc/GZTimeWalker/GZCTF.svg?variant=adaptive)](https://starchart.cc/GZTimeWalker/GZCTF)

## Grafana 📊

![grafana.webp](/images/grafana.webp)

## Demo 🗿

![index.webp](/images/index.webp)

![game.list.webp](/images/game.list.webp)

![game.challenges.webp](/images/game.challenges.webp)

![game.scoreboard.webp](/images/game.scoreboard.webp)

![admin.settings.webp](/images/admin.settings.webp)

![admin.challenges.webp](/images/admin.challenges.webp)

![admin.challenge.info.webp](/images/admin.challenge.info.webp)

![admin.challenge.flags.webp](/images/admin.challenge.flags.webp)

![admin.game.info.webp](/images/admin.game.info.webp)

![admin.game.review.webp](/images/admin.game.review.webp)

![admin.game.divisions.webp](/images/admin.game.divisions.webp)

![admin.teams.webp](/images/admin.teams.webp)

![admin.instances.webp](/images/admin.instances.webp)

![monitor.game.events.webp](/images/monitor.game.events.webp)

![monitor.game.submissions.webp](/images/monitor.game.submissions.webp)
