妖怪道中記 隠しパスワード解析「最初の一週間」の裏側

発売から35年、妖怪道中記・隠しパスワード完全解明までの一部始終
~531垓分の1を探し求めた男たち~

 本動画の5:10で「その一週間後、はむさんの手によりパスワード解析ツールの第一弾が完成する」と語られた「一週間」で行った作業を列挙してみました。

 なお、詳細解析情報や解析ツールのソースコードについてはZIPアーカイブにまとめていますので、そちらをご覧ください。
Download : yokai-pack-20211219.zip

工程1:ROMを眺める


 妖怪道中記のROMイメージを見ると、パスワード入力が正解した時に表示されるメッセージと謎の数字の羅列(後にチェックデジットと判明)が順番に格納していることがわかります。
 ところがパスワード本体が平文で全くヒットせず「まさか1987年にハッシュ関数を…?」と若干不安な気持ちに。
 実際にはその想像をはるか超える地獄が待っていようとは……。

工程2:メモリエリアを眺めてアドレス選定


 自作ツールemuhasteをPCEエミュレータootake専用にカスタムし、カーソルを動かしてサーチ、文字を打ったり消したりしてサーチ、入力文字数をサーチ……など、ひたすら地道な作業。

 この時点で「入力した文字の合計数がアドレス$31F6に格納されていること」「アドレス$31DC以降に入力したパスワード列情報があり、文字コードがゲーム独自である」などといった重要な要素が判明します。

工程3:[PCE 6280逆アセンブラ]を用いた解析


 アドレス$31F6に極めて重要なパラメータが格納されていたので、オールドゲームROM研究所のBAB氏作「PCE 6280逆アセンブラ」を用いて、$31F6に触れているルーチンを列挙したところ、下記コードを発見。

D6F7 : AD F6 31 LDA $31F6

 上記アドレス$D6F7からパスワード入力ルーチンが始まっており、Iボタンを押した瞬間にパスワード文字数をチェックしたり、カーソル位置を元に文字コードを生成するといった主要の処理を行っていました。
 なお、この段階ではサブルーチンコールJSR(20 xx xx)などをNOP(EA)で破壊し、実際にゲームを実行して挙動を確認するといった、かなり豪快な方法で各処理内容を調査しています。

工程4:デバッガによるリアルタイム動作解析


 マルチエミュレータMESSがPCエンジンエミュレーションに加え、超強力なデバッガが実装されていたので、下記コマンドからデバッグモードで起動。

>mess.exe pce youkaid -debug

 さらに同デバッガのブレークポイント機能( bpset $D6F7 )でアドレス$D6F7以降の処理を追跡したところ、アドレス$D853以降に露骨なゼロクリア処理を発見。

D853 : 82 CLX ; Xをゼロクリア
D854 : 8E F4 31 STX $31F4 ; 31F4=0
D857 : 8E F5 31 STX $31F5 ; 31F5=0
D85A : 8E F7 31 STX $31F7 ; 31F7=0
D85D : 8E F8 31 STX $31F8 ; 31F8=0
D860 : 8E F9 31 STX $31F9 ; 31F9=0
D863 : 8E FB 31 STX $31FB ; 31FB=0
D866 : A9 01 LDA #$01 ; A=01
D868 : 8D FA 31 STA $31FA ; 31FA=01

 これをデバッガの[Step Info]でひとつずつ追跡したところ、パスワード文字数を格納する$31F6を除く$31F4~$31FBに何らかの演算結果を入れていることが判明。

 また、適当な正解パスワードのラスト1文字を入力した瞬間に処理の終端を確認すると「ROMのメッセージ間に挟まれていた謎の値と、$31F4~$31FBの値が完全一致していた」ことから、PCエンジン版妖怪道中記のスタッフインフォメーションボードのパスワード処理ルーチンは、下記のプロセスであることが確定しました。

1.ユーザがパスワードを入力すると$31DC以降に順番に文字コード値を挿入。
2.それと同時に$31F6に入力文字数をセット。
3.サブルーチン$D853をコールし、$31F4~$31FBの値=チェックデジットを生成。
4.最終チェック処理$D730をコールし、全ての隠しパスワードの設定値と前述のサブルーチンで生成した値を比較。
5.一致するパスワードがあれば正解処理(無敵フラグや画面表示)を行う。

 あとは、チェックルーチン$D853が何をやっているのかを解読し、それを自作プログラムで再現できれば、PCエンジン実機やエミュレータが無くても隠しパスワード解析にチャレンジしたり、実際にパスワードハッキングができる…というわけです。

工程5:パスワード解析ツールを自作

 ここまで解析が進めば、後はプログラミングの時間です。
 ただし一発で完成品が出来るわけもなく、テストモジュールをコツコツ作ります。

 PCエンジンのCPU(HuC6280)用のコードをVisual C++に移植する作業です。
 HuCそのものは6502カスタム版なのでNESの開発ドキュメントあたりも参考になりますが、Googleで”Turbo Graphics 16 opcode”あたりのキーワードで検索して、CPU仕様書を探して勉強するのが無難かなぁと。
(ウチもHuCのCPU仕様書を読んだのはこの作業が初めてだったので、頑張れば何とかなるなる)
 というか、実際の置き換えもかなり力技でした。

HuC(6502) Visual C++
PHA
LDY #$08
ASL A

PHA

stackA[stackApos++]=A;
Y=8;
A = A << 1;
if(A>0xFF){ C=1; A=A&0xFF; }else{C=0;}
stackA[stackApos++]=A;

 スタック操作(PHA)は配列stackA[]と変数stackAposを用いてLIFOの流れを模倣。
 ASL Aを実行すると8ビットのAレジスタを左1ビットシフトし、溢れたビットがキャリーフラグ(C)にセットされるので、これをムリヤリ条件分岐で再現~…というメチャクチャすぎる力技を採用。
 その副産物で「環境依存せず、あらゆる言語に移植できた」ので、ケガの功名というか、まあ良かった(のかなぁ???)

・・

 以下、私が作成した初期の解析ツール群です。

yokai01(没)
 パスワードを入力するとアドレス$31DC~と同じレイアウトの配列を生成するテストプログラム。

yokai02
 yokai01のルーチンの後、妖怪道中記と全く同じ演算を行い$31F4~$31FBの値を生成し、画面に表示するパスワードシミュレータ。
 当初「$31F4と$31F5が一致すればほぼ本物じゃね?」などと安易に考えていたので、ツール名が[$31F4 $31F5 simulator]になっています。

yokai03
 yokai02のルーチンに対し、総当たりで全パターンのパスワードを試行するツール。

yokai04(没)
 yokai02のルーチンに対し、単語を順番に辞書アタックを仕掛けるツール。
 ※よくよく考えると同じ単語が連続するパスワードを解析できないので没。

yokai05
 yokai02のルーチンに対し、完全ランダムの組み合わせで辞書アタックを仕掛けるツール(無駄は多いけど無難)。


 そして、これらの解析結果は私よりもずっと高スキルのエンジニア達に共有され、発売から35年目ついに攻略~……という流れでした。

 当然、こんなプロセスを動画にまとめてもクソ退屈な映像になってしまうわけで。
 難解なシーンをすべてカットして、まるで英雄譚のように綺麗にまとめたシイナさん、超グッジョブでした(‘ω`)

セガサターン「街(体験版)」隠しメッセージ捜索

 妖怪道中記の隠しパスワード選手権関連でサーチしてたらこんなツイートを発見。


そして


まあ買うよね。

 詳細は上記ツイートのツリーを見ていただければと思いますが、とりあえずテキストコンバータ(フォントテーブル未完成)をアップしました。
Download : matconv221030.zip

 文字化けや抜けもかなり多数ありますが、はてさて本当に本作に隠しメッセージがあるのやら……

ついに「PCエンジン妖怪道中記パスワード完全解明」の動画が公開されました

関連記事
【速報】PCエンジン妖怪道中記 真パスワードが発見されました

YouTube : 発売から35年、妖怪道中記・隠しパスワード完全解明までの一部始終~
531垓分の1を探し求めた男たち~

~動画のコメント欄にあった疑問など~

Q.「なむこむな!756-2311」以外の解があるのでは?
A.候補数1.6億の中にナムコの電話番号が偶然含まれる確率0.0000165244%なので、
 これが真のパスワードである確率は99.999983%…まあ否定は無理でしょう。
 おそらく「なむこむな!」は黒電話のダイヤルの指の動きだと思われます。
 (参考)Wikipedia : 黒電話

Q.8桁パスワード「818-6104」も別解があるのでは?
A.これは宇田川氏が本物だと判定しているので、確率うんぬんでなく本物です。

Q.もし知ってたら、この祭りに参加したかった!!
A.え? まだ隠しダンジョンの攻略が終わってませんけど???

ファンタジーゾーン2の解析を支援してみる


 最近、ほぼ4STさんトコのネタばかりではありますが「ファンタジーゾーン2の最終ボスラッシュで$9720890手に入る」という話をちょっと深掘り。

--FANTASY ZONE 2 MONITOR
while (true) do
	local zz = memory.readbyte(0x0132);
	local yy = memory.readbyte(0x0133);
	local xx = memory.readbyte(0x0134);
	gui.text( 0,32,""..(xx-xx%16)/16);
	gui.text( 7,32,""..xx%16);
	gui.text(14,32,""..(yy-yy%16)/16);
	gui.text(21,32,""..yy%16);
	gui.text(28,32,""..(zz-zz%16)/16);
	gui.text(35,32,""..zz%16);
	gui.text(42,32,"0");
	FCEU.frameadvance();
end;

 とりあえず↑をコピペしてテキストエディタに貼り付けて「FZ2MON.LUA」とでも名前を付けて保存。
 ファミコンエミュレータFCEUX2.23でファンタジーゾーン2をロードして、File→Lua→New Lua Script Windowをオープン。
 Browse…で保存したFZ2MON.LUAをロードして[Run]ボタンを押すと…  
 こんな感じでボスラッシュ中に取得した金額をチェックすることができます。
 ちなみにメモリ上のデータレイアウトはこんな感じ↓

マネーの表示レイアウト $xxyyzz0
-addr-
0x0132 zz
0x0133 yy
0x0134 xx
$9720840加算= 84 20 97 の16進数をそのまま10進数として処理している。

 つまり「画面表示は10進数っぽく並べただけの16進数」ですね。
(上述のLuaスクリプトが16の除算や余数の計算をしているのはそのせい)

 どうしてボスが爆破した瞬間に 84 20 97 を加算しているのか詳細までは解析できていませんが、9720840ドルが加算される瞬間にブレークした結果は下記のとおりです。

コール元
 06:AC55:20 F4 BC  JSR $BCF4
 06:AC58:20 2C B6  JSR $B62C << ここをEAEAEA(nop)でお金増えなくなる
 06:AC5B:4C ED AB  JMP $ABED

コール先
 06:B62C:AD CC 00 LDA $00CC = #$00
 06:B62F:F0 01 BEQ $B632 << 加算ルーチンにジャンプ
 06:B631:60 RTS
 -----------------------------------------

加算ルーチン
 06:B632:AD 32 01  LDA $0132 = #$00
 06:B635:8D 88 01  STA $0188 = #$84 << 注目箇所
 06:B638:AD 33 01  LDA $0133 = #$00
 06:B63B:8D 89 01  STA $0189 = #$20 << 注目箇所
 06:B63E:AD 34 01  LDA $0134 = #$00
 06:B641:8D 8A 01  STA $018A = #$97 << 注目箇所
 06:B644:84 60     STY $0060 = #$90
 06:B646:86 61     STX $0061 = #$00
 06:B648:A0 00     LDY #$00
 06:B64A:B1 60     LDA ($60),Y @ $0090 = #$9A
 06:B64C:8D 8B 01  STA $018B = #$84
 06:B64F:C8        INY
 06:B650:B1 60     LDA ($60),Y @ $0090 = #$9A
 06:B652:8D 8C 01  STA $018C = #$BA
 06:B655:C8        INY
 06:B656:B1 60     LDA ($60),Y @ $0090 = #$9A
 06:B658:8D 8D 01  STA $018D = #$96
 06:B65B:20 71 B6  JSR $B671
 06:B65E:AD 88 01  LDA $0188 = #$84
>06:B661:8D 32 01  STA $0132 = #$00
 06:B664:AD 89 01  LDA $0189 = #$20
 06:B667:8D 33 01  STA $0133 = #$00
 06:B66A:AD 8A 01  LDA $018A = #$97
 06:B66D:8D 34 01  STA $0134 = #$00
 06:B670:60        RTS -----------------------------------------

 アドレス0188、0189、018Aの三連に[972084]の値が生成されているので、ここを追跡していくと真実が見えるかもですね。

スカイデストロイヤーで学ぶ「奇跡を強制召還する手法」

 さて、2022年5月28日に公開された4STさんの新作「発売から37年目の真実…闇夜に現れるという不気味な幽霊船は実在するのか|スカイデストロイヤー」を見て、幽霊船ゾンビの出現&破壊に挑んだ強者もいるかと思います。

 ウチもこんな感じで動画の翌日には幽霊船ゾンビを出現させて倒すツイートをしていたわけですが、実はコレ、莫大な時間と3D酔いと戦いの果てに勝利を掴み取ったシイナさんと違って、私のヤツはプログラムハックで強制召還したインチキ画像です。

・ ※動画の超ネタバレが含まれるので先に前述の4ST動画を見てね!


<前準備>

 ゲームソフト:ファミコン版スカイデストロイヤー
 ROMダンパー:https://www.amazon.co.jp/dp/B087GGBVMV/
 エミュレータFCE-UX:https://fceux.com/web/home.html
 emuhaste:https://i486.mods.jp/ichild/download/emulator-cheet-program-emuhaste
 ※ゲームソフト以外は好みでいいです。

<幽霊船ゾンビの出現条件をおさらい>

1.夜になってから、母艦ノースザネリ(以下、母艦)出現の瞬間に倒す。
 =出現前から魚雷を発射しなければ間に合わない。

2.母艦は8つのグラフィックで構成されている。
 内部的に状態変化カウンタが存在しているのは確実。

<母艦の各フレーム値を特定>

1.FCE-UXでゲームを進行する。

2.母艦が出現する直前あたりでステートセーブ。

3.現れた直前にポーズしてemuhasteでサーチ開始。

4.母艦が形態変化する都度にポーズして「変動」などで絞り込み。
=これでアドレス$006Bの値が母艦の形状と連動していることが確定。

 動作を調べたところ「母艦が出現した瞬間に$006Bに08がセットされ、時間経過ごとに07,06,05..とカウントダウンとともに表示座標が左にずれてゆく。値が08のタイミングで母艦を倒せば、幽霊船ゾンビが出現する」というプロセスでした。

 当然、アドレス$006Bに08を常時セットし続けることで、どのタイミングで倒しても確実に幽霊船ゾンビが出現することになります。

 ちなみに幽霊船ゾンビのX座標は$00ACに格納されており、母艦を08のタイミングで倒した瞬間に$00AC=FFがセットされて画面に出現。これが1フレームごとに-1ずつ減算され、00になると同時に画面から消滅します。
 なので、アドレス$00ACに00以外の値を書き込み続けることで常に幽霊船ゾンビを画面に固定することもできます……が、それはあまり面白くないですよねぇ。

<母艦のカウントダウン処理をハックする>

 母艦($006B)が08からカウントダウンする…ということは、そのルーチンがプログラムに存在するはず。
 そんなわけで、当該処理をFCE-UXのデバッガで実際に見てみましょう。

1.母艦が出現した瞬間にポーズ。

2.FCE-UXでDebug→Debuggerを起動し、Breakpointの[Add]でAddress 006B-006BをWriteにセット。

3.ポーズを解除して少し待つと、下記の箇所で自動停止する。
>00:ED88:C6 6B DEC $006B = #$06

4.デバッガの[Run]をクリックするとゲームが再開&再び自動停止し、デバッガの表示が下記のように変化する。
>00:ED88:C6 6B DEC $006B = #$05

 DECはデクリメント(1減らす命令)で、母艦が形態変化するタイミングで毎回$006Bが1ずつカウントダウン書き込みが行われ、デバッガのブレークポイント機能が「$006BへのWriteを検出し、プログラムを停止」させています。
 なので、アドレス$ED88にある2バイトコード”C6 6B”が「母艦を形態変化させるルーチン」というコトですね。

<ROMを書き換えてみる>

 ファミコン版スカイデストロイヤーが発売したのは1985年でROM容量もたったの24キロバイトしかないので、バイナリエディタで C6 6B とサーチするだけであっさり見つかります。
 ファミコンのCPU(6502)では「何もしない命令nop = EA」なので C6 6B を EA EA と書き換えることで母艦が「出現しても08のまま動かない固定建造物」になります。

<さらに幽霊船ゾンビを追跡!!>

 前述のとおり幽霊船ゾンビのX座標はアドレス$00ACに格納されているのですから、固定化された母艦を倒したタイミングで幽霊船ゾンビを出現させ、ブレークポイント00AC-00ACにWriteで仕掛けると――

>00:FA00:C6 AC DEC $00AC = #$4B

 まあ当然出てくるわけです。
 これを EA EAに書き換えると幽霊船ゾンビも固定建造物と化します。

 ちなみにDEC $00AC はもう一つ存在しており、こちらは「母艦を倒す前に00AC-00ACにWriteブレークポイントを仕掛ける」ことでヒットします。

>00:D6EE:C6 AC DEC $00AC = #$00

 実はプログラム的には面白い仕組みになっていて、コードが実行された瞬間、符号無し整数00をマイナス1し、00→FF(幽霊船ゾンビの初期カウンタ)がセットされます。

 当然、ここを EA EAに書き換えてしまうと幽霊船ゾンビに内部カウンタFFがセットされることは一生なくなるので「幽霊船ゾンビが絶対に出現しない改造バージョン」という悲しいシロモノになってしまいます。

 さらに、このヒット位置から少し上に遡ると以下のコードが見つかります。

00:D6E6:A5 30 LDA $0030 = #$02
00:D6E8:29 03 AND #$03
00:D6EA:C9 02 CMP #$02
00:D6EC:D0 0C BNE $D6FA
00:D6EE:C6 AC DEC $00AC

 これを人に分かる言語に解釈すると次の通り。

00:D6E6:A5 30  アドレス$0030をレジスタAにロード
00:D6E8:29 03 レジスタAと2進数11との論理積を取る。
00:D6EA:C9 02 その値が02
00:D6EC:D0 0C でなければ下の処理を飛び越えて次へ。
00:D6EE:C6 AC 幽霊船ゾンビ出現!

 このうち、$0030に格納されているパラメータ=時間帯であり、02=夜です。
 ここまで言えば勘の良い人なら気づきそうですが、最後にこんな画像で本記事を締めるとしましょう。

// 夜かどうかを判定するルーチンをnopで破壊
C9 02 D0 0C → EA EA EA EA (夜判定無効化)

\明るい幽霊船ゾンビ!/

【速報】PCエンジン妖怪道中記 真パスワードが発見されました

過去記事 : 求む!PCエンジン「妖怪道中記」のパスワード3種

 2021年12月17日に戦いが始まってから約3ヶ月――

 ついにこの時が来ました。


※シイナさんが興奮のあまりうっかり誤記してますが、正しくは「なむこむな!756-2311」でした。

・・

 さて、いつかはもっとしっかりした記事にまとめたいところだけど、今はひとまず「皆さん、お疲れ様でした」。

新ツールyokaiNGwordGUI公開 (2022/2/18更新)

これまでの経緯:妖怪道中記パスワード絞り込み技法


Download : yokaiNGwordGUI.zip

・なにこれ?
 PCエンジン「妖怪道中記」の最後の難関となった14桁パスワードの候補から、目視で「こんなの絶対パスワードに使われるわけないやん」と思うキーワードを範囲選択して、NGワード登録することで候補から除去。
 それを新たなパスワードファイルとして書き出せるツール、です。

・操作フロー
1.discordココの記事にアップされているパスワードファイルをダウンロード。

2.yokaiNGwordGUIの[Load]ボタンでそれを読み込み。

3.左のPW枠からKSQだのGCSだの「パスワードとしてありえない文字列」をマウスで範囲選択。

4.[ >> ]ボタンもしくはエンターキーで右のNG WORDにコピーされる&繰り返し。

5.満足したところで[DELETE PW]ボタンもしくはF1キーでNGワードの含まれるパスワードを除去(消えた行は表示が**************になる)。

6.[SAVE NEW-PW]で除去済みの真パスワード候補を、[SAVE HAZURE]で除去されたハズレ候補を別ファイルに書き出す。

・機能追加しました(2022/1/26)

 削除したいワードの頭に[位置,]を付与することで、条件を満たすパスワードのみを除去できるようになりました。
(画像の例ではカーソル+04の位置にL6Aがある文字列だけ狙い撃ち)

・拡張文字を実装しました(2022/1/29~)

 直接文字を指定するだけでなく、下記の文字によるフィルタを実装しました。

n .. 数字すべて(0-9の範囲)
a .. アルファベットすべて(A-Zの範囲)
c .. アルファベットのうち”A,I,U,E,O,Y,H以外”の文字(子音除去)
g .. アルファベットのG~Zの範囲(16進数回避)
h .. 16進数(0~9、A~F)のみ

s .. 記号(! . -)のみ ※22/2/18実装
r .. 前回と同じ文字(リピート) ※22/2/18実装
v .. 母音(A,I,U,E,O)のみ
ナ .. nの代わり
ム .. mの代わり
コ .. c
の代わり
? .. ワイルドカード=すべての英数(30-5Aの範囲)

 上の画像の例では「0文字目から、数字+数字+アルファベット+数字のパターンを発見したら除去」という動作になり、00A0…は除去されているものの、009Z~や00.Aは残存しています。
 このように人間が「どういう条件で除去しているのか?」を論理的に考えながら絞り込むことで、候補数をどんどん減らせる(はず)ので、頑張りましょう!

【妖怪道中記】新しいフィルタ適用済みパスワード公開

前回の記事:妖怪道中記パスワード絞り込み技法

 前回もお伝えしたとおり、現在は4731万5374個の重複から1個の正解を探す作業をしていますが、先ほどのツールパックに追加した新ツール「yokaisynerr」により、4731万件→75.7万件への大幅フィルタリングに成功。

 さらに、末尾3文字を元にパスワードとして使われないであろう文字列を除去した795.6万件に対してyokaisynerrを適用して生成された21.9万件を加えたパスワードリストをアーカイブとしてアップしました。

Download : passwords-218168and776478.zip

 これを探れば、4731万件を手探りで探すよりは、かなり現実的な時間で真パスワードを見つけられる可能性はありますので、解析の参考にどうぞ。

妖怪道中記パスワード絞り込み技法

 2021年末に4STシイナさんが公開したこの動画は大きな反響を呼びましたが、2022年1月9日現在「8文字と11文字のパスワードは瞬殺されたものの、14文字の最難関パスワードは候補として4731万5374個の重複が発見された」というトンデモナイ状況になっています。
 つまり、4731万個以上あるパスワードの中から真のパスワード1個を探し出す(!)という、発掘作業へとフェイズが移行したわけですね。

関連記事:【随時更新】妖怪道中記パスワード解析 on Discord

 上記コンテンツでは協力者が集まるDiscordサーバおよび自作のパスワード解析プログラムの紹介をしていますが、今回の記事では「膨大なパスワードからハズレを除去する手法」を解説します。

 ただし4731万件の純粋な完全パスワードファイルは非常に巨大かつ解析が困難であるため、私が「高確率でハズレと思われるものを除去したフィルタ済みパスワードリスト」をアップしました。

・フィルタ済みパスワード795.6万件(真パスワードを含む可能性が極めて高い)
Download : passwords-last7956212.zip

・フィルタ済みパスワード325.7万件(真パスワードも除去している可能性が若干ある)
Download : passwords-last3256849beta.zip

~絞り込み技法~

 まず下記yokai-tool-packをダウンロードし、適当なフォルダに展開してください。
Download : yokai-tool-pack.zip

 ツールパックには妖怪道中記のパスワードを解析するための様々なツールを内包していますが、絞り込みには
「05-yokaitable(強力フィルタ)」
「06-yokaipassrip(テーブルのみ出力)」
「07-yokaidiff(不一致除去)」
の3種のツールを用います。

05-yokaitable(強力フィルタ)

 ためしにフィルタ済みパスワード passwords-last7956212.txt を同フォルダへコピーしてから table0.bat にドラッグ&ドロップで投げ込んでみてください。
 しばらくして passwords-last7956212.txt.output0.txt という502KBのファイルが生成されますが、これは「1行の全てがローマ字読みできるアルファベット・数字・記号だけで100%変換できた行だけを抜粋し、右に強引にふりがなを挿入したテキストデータ」です。

 なお、先にネタバレしますがここで生成された11,848行の目視チェックはとっくに済んでいるので、この中に真のパスワードは無いです。

 詳しいカスタマイズ方法は省略しますが table0-ALL-CHAR.txt へ対象となる文字を増やしたり table0.bat の%1のあとに書かれている0を増加させることで、フィルタを緩めて強引に広範囲の候補を拾うことができます。

yokaitable.exe table0-ALL-CHAR.txt %1 0 > %1.output0.txt

yokaitable.exe table0-ALL-CHAR.txt %1 1 > %1.output0.txt

※この修正では「パスワード14文字のうち13文字の変換に成功し1文字だけ失敗した場合のみ列挙」という意味になる。2にすれば「2文字失敗した場合」になるが、増やせば増やすほど該当件数が爆発的に増加する。

 また、table1はローマ字変換と数字のみ、table2はローマ字変換と記号のみ、table3はローマ字変換のみ、table4は数字のみ、table5は強引な英語読みを含む変換プロファイルですので、うまくカスタマイズしてください。

06-yokaipassrip(テーブルのみ出力)

 先ほど生成した502KBのテキストデータは「目視に特化している」ので、各種ツールで使えません。
 なのでこのフォルダに passwords-last7956212.txt.output0.txt をコピーして、同フォルダの start.bat にファイルを投げ込むと502→186KBまで縮んだ password-no-comment.txt が生成されます。
 これは名前のとおり右のコメント部を除去した純粋なパスワードリストで、各種フィルタツールから利用することができます。


 地獄の目視チェック作業が終わり「うわーん、全部ハズレだったー!!」という時は、そのファイルがハズレであると分かるようにファイル名やフォルダ名をしっかり付けておきましょう。
 次のツールで使います。

07-yokaidiff(不一致除去)

 まずyokaidiff.exeに「加工前のオリジナルのパスワードファイル passwords-last7956212.txtをドラッグ&ドロップで投げ込んでください。
 そしてツールが起動して「7956211 件のパスワードテーブルをロードしました」と表示されたら、コマンドプロンプト画面に先ほど目視してハズレだった186KBのテキストファイルをドロップしてエンターキーを押下。

 めちゃくちゃ待たされますが「マスタとなるテーブルから11848件のパスワードを除去しました」と表示されるので、ここで何も入力せずにエンター。
 「保存ファイル名を拡張子付きで入力してください」と求められるので適当に「output.txt」とでも入力してエンター。

 これで生成された output.txt に書かれたパスワードの個数は 794万4363 ……つまり、11,848個のハズレパスワードを除去したリストファイルです。
 なので……

05-yokaitable(強力フィルタ)をカスタマイズして候補を絞る。

06-yokaipassrip(テーブルのみ出力)でパスワード情報のみを抽出。

目視してダメなら07-yokaidiff(不一致除去)でマスタファイルからハズレを除去。

05に戻ってやりなおし。

 そんな作業の繰り返しによる絞り込みを行っているわけです。
※合理的な絞り込み手法が発見されたら、ここから一気に減る可能性もあります。


 というか、一人で796回もこんな作業をやってられないので、皆で力を合わせるのが大切であり、そのためのDiscord参加なのです(‘-`)

~追記~ (2022.1.10)

 さらに下記のツールを追加したので「該当件数が多すぎてやってられない」という場合にご活用ください。

09-yokairincut(条件フィルタ)
 数字とアルファベットが隣接するものを除去、ハイフンを含むものを除去など5種のフィルタをかけて自分の読みたいパスワードだけを出力するツール。

10-yokaitopkana(先頭カナ出力)
 パスワードの頭文字がローマ字カナ変換できるものだけを出力するツール。

11-yokainumend(終端数字列挙)
 パスワードの終端が数字で終わるものだけを出力するツール。