ParamHash
解説すると長くなるのだが、スプラトゥーン2ではXMLのパラメータファイルがBPRM, BYML, BYAMLといったファイルに暗号化されている。
この暗号化自体はThe4Dimensionというツールを使えば復号できるのだが、パラメータ名がCRC32でハッシュ化されているためそのままでは読むことができない。
また、CRC32はハッシュであり暗号化ではないため一意の復号もできない。そこで、スプラトゥーン2で定義されているパラメータ名を片っ端から抽出して、それをCRC32でハッシュ化し、ハッシュリストをつくることにした。
パラメータ名の抽出とハッシュ化
やり方は全くわからなかったので、Shadow氏に協力を依頼した。
すると一時間も経たずに5.4.0向けのパラメータファイルを抽出してくれた、やはり天才である。
あとはそのパラメータファイルをCRC32でハッシュ化し、それをCSVとして出力すれば良い。
import zlib
with open(INPUTFILE, mode="r") as f:
with open("param.csv", mode="w") as w:
for line in f:
param = line.strip()
hash = format(zlib.crc32(param.encode("ascii")) & 0xFFFFFFFF, "x")
param = param.split(".")
w.write(f"{hash},{param[0]}\n")
それ自体は上のようなコードで実装できる。とても簡単である。
これで全てのハッシュを出力できたかと思ったのだが、Shadow氏の手法では一部のパラメータを抽出し損ねているようでサーモンランに関するパラメータが全く見つからなかった。
そこでLeanny氏が公開しており旧バージョンのParamHashでも使っていたCSVファイルを組み合わせることにした。
重複するものを削除して全部で11159通りのパラメータとハッシュのリストが完成した。
使い方
使い方についてはリリースページを見ていただきたいのだが、The4Dimensionと組み合わせることでBPRM, BYML, BYAMLをXMLに復号し、復号したXMLのハッシュをパラメータ名に置換するところまでを自動で行ってくれる。
また、逆変換にも対応しており、置換されたXMLをハッシュ化し、暗号化することにも対応した。
なので、このツールを使えば編集するファイルはパラメータ名に置換されたXMLファイルだけということになる。
いままで「XMLに復号」「XMLのハッシュを置換」「置換したXMLと比較して置換前XMLを編集」「置換前XMLを暗号化」という作業が必要だったのが、「置換済みXMLに復号」「置換済みXMLを編集」「置換済みXMLを暗号化」という風に一つ作業を減らすことができるようになった。
ちまちまパラメータ名を比較しながら作業しなくて良いのでミスも減るし、全てのファイルを一度に変換できるので楽になったはずだ。
おまけ
Pythonって本当に楽、あと焼き肉食べたい。
記事は以上。
自身を天才と信じて疑わないマッドサイエンティスト。二つ上の姉は大英図書館特殊工作部勤務、額の十字架の疵は彼女につけられた。
コメント
レインボーテーブル作ったのはすげえけど何に使うんだコレ
パラメーターいじるとき