SFC「バトルドッジボール」のパスワード解析をやっていく その3 通せるパスワード作る方法多分分かった

前回までの調査でわかっていること

1桁目:チームID
2桁目:ステージ進行度
3桁目:1人目キャラID
4桁目:1人目MP
5桁目:1人目体力
6桁目:1人目ショット
7桁目:1人目フットワーク
8桁目:1人目防御力
9桁目:1人目ジャンプ力
10桁目:不明
11桁目:不明
12桁目:不明
13桁目:2人目キャラID
14桁目:2人目MP
15桁目:2人目体力
16桁目:2人目ショット
17桁目:2人目フットワーク
18桁目:2人目防御力
19桁目:2人目ジャンプ力
20桁目:不明
21桁目:不明
22桁目:不明
23桁目:3人目キャラID
24桁目:3人目MP
25桁目:3人目体力
26桁目:3人目ショット
27桁目:3人目フットワーク
28桁目:3人目防御力
29桁目:3人目ジャンプ力
30桁目:不明
31桁目:不明
32桁目:不明
33桁目:4人目キャラID
34桁目:チェックサム
35桁目:4人目体力(未使用値)
36桁目:4人目ショット
37桁目:4人目フットワーク
38桁目:4人目防御力(未使用値)
39桁目:4人目ジャンプ力
40桁目:不明
41桁目:不明
42桁目:不明
また、あと8文字余裕があり、各能力値を表す文字は増えることはあたりが付いている。

チェックサムが1文字ならそこだけ総当たりでやっていけば通るんじゃない?

そういう発想で通したパスワードがこれ

ギいど♦♦ ♦♦♦♦そ グイじ♦♦ ♦♦♦♦ア
こかだ♦♦ ♦♦♦♦シ シがズアJ ♦♦P♦ト
ウさ

f:id:annnnnnna:20190818150440p:plain
この結果から、チェックサムはこのJの前の1文字だけの可能性がきわめて高くなっている。

なぜか16進数表記になっている各能力値は+1すると10進数表記になってそれぞれ110~130くらいの値になるのでレベル3ということになる。
さらに、グレート雷門のフットワーク以外はどんどんマイナスできて0より減らすとLv20:999の状態になる。
通常は加算していって999にしてもLv9止まりで、どうにかして9999まで経験値を振らないとLv20にはできないようだ。
参考:ステータス・経験値 | バトルドッジボール 闘球大激突! 攻略・解析

前々回、「999なら1.5文字分で収まる」と書いたが、9999の場合は0010 0111 0000 1111 で2文字分要る。不明な文字が1キャラにつき3文字分あったので増加2文字分と合わせると、各キャラの能力値に使える文字は10文字あることになる。


ちなみに、♦️にした部分を、初期状態-1にしたパスワードはチェックサムの変更で通せたが、「不明」部分も全部-1したパスワードはチェックサムの総当たりで通せなかった。
さすがにデータとしての正当性チェックくらいはするだろうから、「不明」のままいじるのは無理があった。

手でやるのめんどくさくなってきたから変換ツール作った

レイアウトガタガタだけど知るか

※使う人いないとは思うけど、パリティにあたる文字を「あ」にして変換ボタン押すと「文字」のとこに正しいパリティが出るようにしました

変換テーブル
オフセット

パスワード

数値(10)
数値(2)

数値

文字

チェックサム

ずっとチェックサムって言ってたけどパリティって言った方がいいのかな。
他のデータを+32したときに+32されたり-32されたりするってことは、おそらくはパリティなんだろう。
その検証を手計算でやってられないのでツールを作った。
で、今まで拾ったパスワードを↑のツールで変換して、2進になった結果を↓に入れて各桁のXorを取ると




たぶんどのパスワードでやっても00000000になる。パリティっぽいですね。

でも一つ疑問があって、1桁は200までしか値を取れないので、パリティが1110 0000みたいになる場合ってつじつま合わせられないと思うんだけどどうするんだろうか?これが引っかかってたので、「200で割った余りなら絶対200に収まるし」と思っていた。

※追記
ほぼ初期状態ではなく進行度のあるパスワードでやると全文字のXorの結果が00000000にならなくなった