
以下に感謝: DavidAngelos:
▶️ 各ステップにプログレスバーを追加して実行状況を追跡できるようにしました。
▶️ オプションを追加:
-i / --inorder): キーワードを元の順序でのみ結合します (例: foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。-c / --combinations): 各サブセットのすべての順序を生成します (例: foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …, bazbarfoo)。--sep <string>): 単語を結合する際に、トークン間にこの文字列を挿入します (デフォルトは区切りなし)。--max-combine <N>): 結合する生のキーワードの最大数を制限します (デフォルト: 2)。--minlen/--maxlen <N>): 希望の長さの単語のみで最終的な単語リストをフィルタリングします。Psudohash は、ブルートフォース攻撃やハッシュの解析を行うためのパスワードリスト生成ツールです。文字を記号や数字に置き換える(リート)、文字の大文字小文字のバリエーションを使う、主要なパスフレーズの前後に一般的なパディングを追加するなど、人間がよく使うパスワード作成パターンを模倣します。キーワードベースで高度にカスタマイズ可能です。🎥 -> 動画プレゼンテーション
システム管理者やその他の従業員は、パスワードを設定する際に会社名の変形版(例: Am@z0n_2022)を使用することがよくあります。これは、ネットワーク機器(Wi-Fi アクセスポイント、スイッチ、ルーターなど)、アプリケーション、さらにはドメインアカウントでよく見られます。最も基本的なオプションで、psudohash は、一般的な文字置換パターン(カスタマイズ可能)、大文字小文字のバリエーション、パディングに使われる一般的な文字列などに基づいて、1つまたは複数のキーワードのすべての変異形を含む単語リストを生成できます。次の例をご覧ください:

スクリプトは以下の文字置換スキーマを実装しています。psudohash.py 内の transformations リストを編集し、以下に示すデータ構造に従うことで、文字置換マッピングを追加・変更できます(デフォルト):
transformations = [
{'a' : ['@', '4']},
{'b' : '8'},
{'e' : '3'},
{'g' : ['9', '6']},
{'i' : ['1', '!']},
{'o' : '0'},
{'s' : ['$', '5']},
{'t' : '7'}
]
パスワードを設定する際、主要なパスフレーズの前後に文字列を追加して「強力」にするのは標準的なことだと思います。例えば、「dragon」というパスワードを設定し、末尾に「!!!」や「!@#」のような値を追加すると、「dragon!!!」「dragon!@#」などになります。Psudohash はそのような値を common_padding_values.txt から読み取り、生成された各キーワードのバリエーションの前に追加(-cpb)または後に追加(-cpa)することで、提供されたキーワードを変異させます。必要に応じて変更できます。
変異したキーワードに年の値を追加する場合、psudohash は様々な区切り文字を使用します。デフォルトでは以下の区切り文字を使用します。これらは year_seperators リストを編集することで変更できます:
year_seperators = ['', '_', '-', '@']
例えば、キーワードが "amazon" でオプション -y 2023 が使用された場合、出力には "amazon2023", "amazon_2023", "amazon-2023", "amazon@2023", "amazon23", "amazon_23", "amazon-23", "amazon@23" が含まれます。
まず Python 3.x と tqdm をインストールしてください:
pip3 install tqdm
次にリポジトリをクローンし、スクリプトを実行可能にします:
git clone https://github.com/t3l3machus/psudohash.git
cd ./psudohash
chmod +x psudohash.py
./psudohash.py [-h] -w WORDS [-i] [-c] [--sep SEP] [--max-combine N] [-an LEVEL] [-nl LIMIT] [-y YEARS] [-ap VALUES] [-cpb] [-cpa] [-cpo] [-o FILENAME] [-q]
ヘルプダイアログ [ -h, --help ] には使用方法の詳細と例が含まれています。
-w, --words <kw1,kw2,…>
コンマ区切りの生のキーワード(必須)。
-i, --inorder
指定された順序でキーワードを結合(最大 --max-combine 個)します(例: foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。
-c, --combinations
各サブセットのすべての順列を生成します(最大 --max-combine)(例: foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …)。
--max-combine <N> (default: 2)
1つのベース文字列に結合する生のキーワードの最大数(デフォルト: 2)。
--sep <string>
単語を結合する際(-i または )、トークン間にこの文字列を挿入します。デフォルトは空文字列。
単語の結合なし(シングルトンのみ)
./psudohash.py -w foo,bar,baz -cpa
# → foo, bar, baz
順序結合(-i、デフォルトで最大2単語)
./psudohash.py -w foo,bar,baz -i
# → foo, bar, baz, foobar, foobaz, barbaz
全順序組み合わせ(-c、デフォルトで最大2単語)
./psudohash.py -w foo,bar,baz -c
# → foo, bar, baz, foobar, foobaz, barfoo, barbaz, bazfoo, bazbar
結合単語間の区切り文字を変更
./psudohash.py -w foo,bar,baz -i --sep "_"
# → foo, bar, baz, foo_bar, foo_baz, bar_baz
長さフィルタリング(--minlen/--maxlen)
./psudohash.py -w apple,banana -i --minlen 10
# Warning: exact size cannot be determined because of length filters.
# Example final outputs might include “applebanana” (11 chars), “bananaapple” (11 chars).
デフォルトの2単語の代わりに最大3単語を結合
--years オプションと --append-numbering オプションを、--numbering-limit を任意の年の入力の下2桁以上に設定して組み合わせると、ツールが実装する変異パターンのために重複した単語が生成される可能性が高くなります。--minlen または --maxlen を使用する場合、スクリプトは正確な単語数を事前に計算できません。「正確なサイズは決定できません」という警告が表示され、このフィルタなしのサイズが計算され、最終的なサイズは小さくなります。人に関して言えば、私たちは皆(多かれ少なかれ)自分にとって意味のある単語(名前や妻/子供/ペット/バンド名など)を変形させ、最後に生まれた年を付けたり、「!@#」のような超安全なパディングを使ったりしてパスワードを設定したことがあると思います。さて、どうでしょう?

よく使われるパスワード作成パターンに関する情報を収集し、ツールの機能を強化する予定です。
-c--minlen <N>
N文字より短い最終パスワードを破棄します。
--maxlen <N>
N文字より長い最終パスワードを破棄します。
-an, --append-numbering <LEVEL>
各単語の変異形に番号付きサフィックス(<LEVEL>桁にゼロ埋め)を追加します。
-nl, --numbering-limit <LIMIT>
番号を追加する際の最大カウント数(デフォルト: 50)。
-y, --years <years>
各変異形に1つ以上の年を追加します(例: 1990-2000、または 2022,2023)。
-ap, --append-padding <vals>
カスタムパディング値を追加します(コンマ区切り)。-cpb または -cpa と併用する必要があります。
-cpb, --common-paddings-before
各変異形の前に common_padding_values.txt の値を前置します。
-cpa, --common-paddings-after
各変異形の後に common_padding_values.txt の値を後置します。
-cpo, --custom-paddings-only
ユーザー提供のパディングのみを使用します(デフォルトはなし)。-ap と併用する必要があります。
-o, --output <file>
結果を <file> に書き出します(デフォルト: output.txt)。
-q, --quiet
起動時のASCIIアートバナーを抑制します。