
Hashcatルールアナライザーおよびインタープリター - hashcatルール構文を解読するためのロゼッタストーン
| | | | __ _ | | ___ __ | || _ \ ___ ___ | || | __ _
| || |/ / __| '_ \ / __/ _ | __| |) / _ / __|/ _ \ __| / ` |
| _ | (| _ \ | | | (| (| | || _ < () __ \ / || || (| |
|| ||_,|/| ||____,|_|| __/|/___|_|__,|
パスワードクラッキングルールのロゼッタストーンを解読する
# HashcatRosetta
hashcatのデバッグモード4およびモード5の出力ファイルを分析し、最も効率的なルールを特定し、パスワードクラッキング攻撃中に使用されるベースワードの頻度パターンを追跡するために設計されたPythonプロジェクトです。
## 機能
- **hashcatデバッグファイルの解析** (`--debug-mode 4` および `--debug-mode 5`)、ベースワードとルールの自動抽出付き
- **候補をソースワードリストに帰属** (モード5)、ワードリストごとの統計用
- **複数の指標によるルール効率の追跡**:
- 適用頻度 (最もよく適用されるルール)
- ベースワードの広がり (最も多くのユニークなベースワードに適用されるルール)
- 候補生成 (最も多くのユニークな候補を生成するルール)
- **ベースワードパターンの監視**、詳細な出現ログと統計付き
- **詳細レポートの生成**、ルールとベースワードの分析付き
- **分析結果のエクスポート**、さらなる処理のためのJSONまたはCSV形式
- **コマンドラインインターフェース**、簡単な分析とレポート用
## インストール
### uvを使用する場合 (推奨)
[uv](https://github.com/astral-sh/uv)を使用している場合、インストールせずに実行できます:
```bash
# リポジトリをクローン
git clone https://github.com/bandrel/HashcatRosetta.git
cd HashcatRosetta
# モジュールとして実行 (推奨)
uv run python -m hashcat_rosetta --help
# またはインストールされたコマンドを使用
uv run hashcat-rosetta --help
uv tool install git+https://github.com/bandrel/HashcatRosetta.git
開発ツールは dev 依存関係グループにあります。
# uvを使用 (デフォルトでdevグループをインストール)
uv sync
# pipを使用 (25.1+)
pip install -e . --group dev
hashcatデバッグファイルを分析 (デフォルトでサマリーを表示):
hashcat-rosetta debug_output.txt
頻度順にトップルールを表示:
hashcat-rosetta debug_output.txt --rules --top 10 --metric frequency
他の指標でトップルールを表示:
hashcat-rosetta debug_output.txt --rules --metric basewords
hashcat-rosetta debug_output.txt --rules --metric candidates
複数回出現するベースワードを表示:
hashcat-rosetta debug_output.txt --basewords --top 10
トップワードリストを表示 (デバッグモード5のみ):
hashcat-rosetta debug_output.txt --wordlists --top 10
ワードリストごとの詳細統計を表示 (ユニークなベースワード、候補、ルール):
hashcat-rosetta debug_output.txt --wordlists --top 10 --detail
--wordlists の出力は --rules を反映します: Top N Wordlists ヘッダーに続き、
番号付きの Wordlist: <name> (<count>) 行が表示されます。モード5のファイルを
出力フラグなしで分析した場合、デフォルトのサマリーにも Wordlist Statistics セクションが含まれます。
自動検出ではなく特定のデバッグモードを強制:
hashcat-rosetta debug_output.txt --debug-mode 5 --wordlists
詳細なベースワード分析を表示:
hashcat-rosetta debug_output.txt --basewords --top 10 --detail --min-occurrences 2
完全な分析レポートをエクスポート:
hashcat-rosetta debug_output.txt --export report.json --format json
hashcat-rosetta debug_output.txt --export report.csv --format csv
hashcatルールが何をするかをステップバイステップで説明:
hashcat-rosetta --explain "c$1" --baseword admin
hashcat-rosetta --explain "u$!" --baseword myword
ローカルLLMを使用して英語の説明からhashcatマスクを生成:
hashcat-rosetta --mask "The word 'Summer' followed by six digits."
出力:
Mask Suggestions for: 'The word 'Summer' followed by six digits.'
======================================================================
1. Summer?d?d?d?d?d?d
literal "Summer", then 6 × digit → 1,000,000 candidates
Why: matches the literal word followed by a 6-digit number
生成されたマスクをファイルに保存:
hashcat-rosetta --mask "The word 'Summer' followed by six digits." -o masks.hcmask
他の説明からマスクを生成:
hashcat-rosetta --mask "a capitalized season, two digits, and a special char"
hashcat-rosetta --mask "year 2020-2025 followed by exclamation or question mark"
マスク生成機能は、OpenAI互換のチャットエンドポイントを実行するローカルOllamaサーバーを使用します。デフォルトでは http://localhost:11434 に接続し、モデル gemma3:27b を使用します (以下を参照)。これらは環境変数またはCLIフラグで設定できます:
# 環境変数を使用
OLLAMA_HOST=http://192.168.1.100:11434 OLLAMA_MODEL=llama2:70b \
hashcat-rosetta --mask "your description here"
# CLIフラグを使用 (環境変数を上書き)
hashcat-rosetta --mask "your description" --ollama-host http://custom.host:11434 --model llama2
セキュリティに関する注意: マスクの説明は、設定したOllamaエンドポイント (デフォルトでは localhost、または --ollama-host/OLLAMA_HOST が指す場所) にのみ送信され、クラウドプロバイダーには決して送信されません。OpenAI SDKはそのエンドポイントに対するHTTPクライアントとして純粋に使用されます。データやAPIキーが api.openai.com に送信されることはありません。
gemma3:27b なのか?デフォルトは scripts/benchmark_mask_models.py によって選択されます。これは14個の固定された --mask スタイルのプロンプト (カスタム文字セットの後方参照やカテゴリ想起プロンプト — 聖書の書名、聖書の節参照、ヨーロッパの首都 — を含む) を、ローカルにインストールされたすべての候補モデルに対して実行し、各応答を3つの方法で評価します:
mp64 (maskprocessor) に対して独立に検証されます。これは generate_masks() 自体が本番環境で各提案に対して実行するのと同じチェックであるため、ここでのベンチマークのハード失敗は、実際の --mask の使用でも拒否されたことを意味します。gemma3:12b、自己採点バイアスを避けるために候補ではないものを特別に選択) が、各応答を元の要求をどれだけ満たしているかについて1〜5で採点します。要求は思考を有効にして送信されます。遅いモデルはどちらにしても往復時間がかかるためです。推奨されるデフォルトは、ハード失敗がゼロで、平均ジャッジスコアが4以上の最小のモデル です。以前のラウンドから引き継がれた3つの最終候補を、14プロンプトの完全なセットに対して再実行した結果:
| model | size | hard fails | mean score | time |
|---|---|---|---|---|
gemma3:27b | 16.2 GB | 0 | 4.1 | 180s |
dengcao/Qwen3-30B-A3B-Instruct-2507:latest | 17.4 GB | 1 | 4.5 | 176s |
laguna-xs-2.1:latest | 18.9 GB | 2 | 4.7 | 730s |
gemma3:27b は3つの中で唯一ハード失敗がゼロであるため、最高の生スコアではないにもかかわらず選ばれました — dengcao と laguna-xs-2.1:latest はより高いスコアでしたが、それぞれ少なくとも1つのプロンプトで完全に失敗しました (また laguna-xs-2.1:latest ははるかに遅く、730秒対約180秒で、それ自体の非常に大きなネイティブコンテキストウィンドウによるものです)。
以前のスイープラウンドのいくつかのQwen3ファミリーモデル (qwen3:8b/30b/32b、qwen3.5:9b/27b) は、明確な失敗モードを示しました: 隠れた「思考」トークンと巨大なネイティブコンテキストウィンドウが、--mask 規模のハードウェアで数分から30分のハングを引き起こしました。以前のデフォルトである qwen3.6:35b-a3b も同じ理由で置き換えられました (CHANGELOG.md を参照)。
uv run python scripts/benchmark_mask_models.py で自分でスイープを再実行できます — 不足している候補を取得し、更新された推奨事項を出力します。
from hashcat_rosetta import DebugAnalyzer
analyzer = DebugAnalyzer()
# デバッグファイルを分析
result = analyzer.analyze_debug_file('debug_output.txt')
print(f"Total entries: {result['total_entries']}")
print(f"Unique rules: {result['unique_rules']}")
print(f"Unique basewords: {result['unique_basewords']}")
# 頻度順にトップルールを取得
top_rules = analyzer.get_top_rules_by_frequency(10)
for rule, count in top_rules:
print(f"Rule: {rule}, Applications: {count}")
# トップベースワードを取得
top_basewords = analyzer.get_top_basewords_by_frequency(10)
for baseword, count in top_basewords:
print(f"Baseword: {baseword}, Occurrences: {count}")
# 複数回出現するベースワードを取得
frequent_basewords = analyzer.get_basewords_with_min_occurrences(2)
print(f"Basewords appearing 2+ times: {len(frequent_basewords)}")
# 特定のベースワードに関する詳細情報を取得
detail = analyzer.get_baseword_detail('password')
print(f"Rules applied to 'password': {detail['unique_rules']}")
print(f"Occurrences: {len(detail['occurrences'])}")
# 完全な分析をエクスポート
export = analyzer.export_to_dict()
アナライザーは両方のhashcatデバッグ出力形式を自動検出してサポートします:
baseword:rule:candidate
COMPUTER:} } } } t:retupmoc
EXAMPLE:sa@ se3 so0:3x@mpl3
admin:$1 $5 c ^@:@Admin15
各行には3つの コロン区切り フィールドが含まれます:
hashcatは常にこの形式を出力してきました (src/debugfile.c は orig、:、rule、:、mod を書き込みます)。
baseword rule candidate
password c P@ssword
password u PASSWORD
admin l admin
letmein [ etmein
各行には3つの スペース区切り フィールドが含まれ、意味は上記と同じです。これは古いレガシー形式で、このパーサーも受け入れます。
注意: アナライザーはファイルがどの形式を使用しているかを自動検出します。手動設定は不要です!
hashcat --debug-mode 5 は、コロン区切りの各行に末尾の wordlist フィールドを追加します:
baseword:rule:candidate:wordlist
password:c:P@ssword:/opt/wordlists/rockyou.txt
admin:l:admin:/opt/wordlists/rockyou.txt
letmein:[:etmein:<stdin>