| --- |
| license: apache-2.0 |
| --- |
| # summerMC/Qwen3.5-hack-down |
|
|
| `summerMC/Qwen3.5-hack-down` は、認可されたローカル CTF / セキュリティ演習環境での解析支援を目的としたモデルです。 |
|
|
| 実運用システム、第三者環境、許可のない対象への攻撃支援を目的とした利用は想定していません。 |
|
|
| ## 概要 |
|
|
| このモデルは、CTF 問題、ローカルラボ、検証用の脆弱性解析、ログ解析、コードレビュー、ペイロードの理解補助などを支援するためのアシスタントモデルです。 |
|
|
| 主な用途は次のとおりです。 |
|
|
| - CTF 問題文の整理 |
| - Web / Crypto / Reversing / Forensics / Pwn / Misc などの方針整理 |
| - ローカル検証環境における安全な解析支援 |
| - コード断片やエラー内容の説明 |
| - フラグ探索手順の構造化 |
| - JSON 形式での簡潔な回答生成 |
|
|
| ## 想定ユースケース |
|
|
| 適切な利用例: |
|
|
| - 自分で用意した Docker / VM / ローカルラボの解析 |
| - CTF プラットフォーム上の許可された問題の解法補助 |
| - 学習目的の脆弱性検証 |
| - 防御・監査目的のコード確認 |
| - 問題文、ログ、ソースコード、バイナリ解析結果の要約 |
|
|
| 不適切な利用例: |
|
|
| - 許可のないシステムへの侵入 |
| - 実在サービスへの攻撃手順の自動化 |
| - 認証回避、情報窃取、マルウェア作成の支援 |
| - 第三者環境でのスキャン、悪用、権限昇格 |
| - 取得していないフラグや証跡の捏造 |
|
|
| ## 推奨システムプロンプト |
|
|
| ```text |
| You are a CTF assistant for authorized local lab challenges only. |
| Return structured, practical, concise JSON. |
| Do not invent flags. |
| ``` |
|
|
| ## 出力方針 |
|
|
| モデルには、以下のような出力形式を推奨します。 |
|
|
| ```json |
| { |
| "summary": "問題の要約", |
| "category": "web / crypto / pwn / reversing / forensics / misc / unknown", |
| "observations": [ |
| "確認できた事実" |
| ], |
| "next_steps": [ |
| "次に試すべき安全な手順" |
| ], |
| "commands": [ |
| { |
| "purpose": "ローカル検証で使う目的", |
| "command": "example command" |
| } |
| ], |
| "flag": null, |
| "confidence": "low / medium / high" |
| } |
| ``` |
|
|
| `flag` は、ユーザーが明示的に提供した場合、またはローカル解析結果から確実に導出できた場合のみ記載してください。推測でフラグを生成しないでください。 |
|
|
| ## Python での使用例 |
|
|
| ```python |
| import torch |
| from transformers import AutoTokenizer, AutoModelForCausalLM |
| |
| model_id = "summerMC/Qwen3.5-hack-down" |
| |
| tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) |
| model = AutoModelForCausalLM.from_pretrained( |
| model_id, |
| torch_dtype=torch.bfloat16, |
| device_map="auto", |
| trust_remote_code=True, |
| ) |
| |
| messages = [ |
| { |
| "role": "system", |
| "content": ( |
| "You are a CTF assistant for authorized local lab challenges only. " |
| "Return structured, practical, concise JSON. Do not invent flags." |
| ), |
| }, |
| { |
| "role": "user", |
| "content": "このCTF問題の方針を整理してください: ...", |
| }, |
| ] |
| |
| prompt = tokenizer.apply_chat_template( |
| messages, |
| tokenize=False, |
| add_generation_prompt=True, |
| ) |
| |
| inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
| |
| with torch.no_grad(): |
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=700, |
| do_sample=True, |
| temperature=0.3, |
| top_p=0.85, |
| repetition_penalty=1.08, |
| pad_token_id=tokenizer.pad_token_id, |
| eos_token_id=tokenizer.eos_token_id, |
| ) |
| |
| generated = outputs[0][inputs["input_ids"].shape[-1]:] |
| print(tokenizer.decode(generated, skip_special_tokens=True)) |
| ``` |
|
|
| ## ストリーミング生成 |
|
|
| ```python |
| from threading import Thread |
| import torch |
| from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer |
| |
| model_id = "summerMC/Qwen3.5-hack-down" |
| |
| tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) |
| model = AutoModelForCausalLM.from_pretrained( |
| model_id, |
| torch_dtype=torch.bfloat16, |
| device_map="auto", |
| trust_remote_code=True, |
| ) |
| |
| def generate_stream(user_prompt, max_new_tokens=700): |
| messages = [ |
| { |
| "role": "system", |
| "content": ( |
| "You are a CTF assistant for authorized local lab challenges only. " |
| "Return structured, practical, concise JSON. Do not invent flags." |
| ), |
| }, |
| { |
| "role": "user", |
| "content": user_prompt, |
| }, |
| ] |
| |
| prompt = tokenizer.apply_chat_template( |
| messages, |
| tokenize=False, |
| add_generation_prompt=True, |
| ) |
| |
| inputs = tokenizer( |
| prompt, |
| return_tensors="pt", |
| truncation=True, |
| max_length=2048, |
| ).to(model.device) |
| |
| streamer = TextIteratorStreamer( |
| tokenizer, |
| skip_prompt=True, |
| skip_special_tokens=True, |
| ) |
| |
| generation_kwargs = dict( |
| **inputs, |
| streamer=streamer, |
| max_new_tokens=max_new_tokens, |
| do_sample=True, |
| temperature=0.3, |
| top_p=0.85, |
| repetition_penalty=1.08, |
| pad_token_id=tokenizer.pad_token_id, |
| eos_token_id=tokenizer.eos_token_id, |
| ) |
| |
| thread = Thread(target=model.generate, kwargs=generation_kwargs) |
| thread.start() |
| |
| for chunk in streamer: |
| yield chunk |
| |
| thread.join() |
| |
| |
| for chunk in generate_stream("このCTF問題を解析してください: ..."): |
| print(chunk, end="", flush=True) |
| ``` |
|
|
| ## 推奨パラメータ |
|
|
| | Parameter | Value | |
| |---|---:| |
| | `max_new_tokens` | `700` | |
| | `temperature` | `0.3` | |
| | `top_p` | `0.85` | |
| | `repetition_penalty` | `1.08` | |
| | `do_sample` | `True` | |
|
|
| CTF の方針整理では、低めの `temperature` を推奨します。出力の多様性よりも、再現性と簡潔さを優先します。 |
|
|
| ## 制限事項 |
|
|
| - このモデルはフラグを自動的に保証するものではありません。 |
| - 実測ベンチマーク、学習データ、学習手法の詳細はこの README では未公開です。 |
| - 出力には誤りが含まれる可能性があります。 |
| - セキュリティ関連の助言は、必ず認可された環境でのみ検証してください。 |
| - 実在サービスや第三者環境への攻撃には使用しないでください。 |
|
|
| ## 評価 |
|
|
| 現時点で公開できる定量評価はありません。 |
|
|
| | Benchmark | Score | |
| |---|---:| |
| | CTF benchmark | 未測定 | |
| | Web security tasks | 未測定 | |
| | Reversing tasks | 未測定 | |
| | Forensics tasks | 未測定 | |
|
|
| ## ライセンス |
|
|
| ライセンス情報は、モデルリポジトリ側の設定を確認してください。 |
|
|
| この README ではライセンスを断定しません。Hugging Face の `license` メタデータまたはリポジトリ内の `LICENSE` ファイルを優先してください。 |
|
|
| ## 免責事項 |
|
|
| このモデルの出力は学習・検証目的の補助情報です。出力内容の正確性、安全性、適法性は利用者が確認してください。 |
|
|
| 本モデルは、認可された CTF、ローカルラボ、防御的検証、教育目的での利用を前提としています。 |