[IPSwitch] 4.5.1を解析する

ver4.5.1がリリースされた

IPSwitchですが、ver4.4.0の段階で更新が止まっています。

他力本願でも仕方がないので自分でコードを見つけていきましょう。

https://tkgstrator.work/?p=12367

基本的なやり方は4.5.0向けの移植と全く同じです。

基本情報

では、早速nsobidを調べましょう。

他に便利な方法があるのかもしれませんが、自分はバイナリエディタで確認する方法しか知りません。

nsobid

nsobidとはNSO Build IDのこと。

要するにゲームのバージョンとかを識別する情報と思っていただければ良い。

一般的に、バージョンが上がるたびにこの数字は変わります。

xedit

バイナリエディタに今のところ特にこだわりがないのでxeditを使わせていただいています。

0x40から始まる値を調べればいいのでnsobidは “773AFBD353AFA3804F93CEF9245EF866” になります。

オフセット値

Splatoon 2の場合はこの値はバージョンに依らず0x100で固定です。

多分、どのゲームでも固定ですが他のゲームは解析したことがないのでわかりません。

コーディング

まず、先程の情報をpatches.pchtxtに記述します。

@frag offset_shift の値は0x100で固定なので何も弄りません。

@nsobid-773AFBD353AFA3804F93CEF9245EF866

@flag offset_shift 0x100

/ ********************************************************************
/
/ (c) 2018 OatmealDome and contributors
/ Licensed under GPLv3, please visit the following URL for more info:
/ https://www.gnu.org/licenses/gpl-3.0.en.html
/
# Splatoon 2 4.5.1 Patches
/
/ Dedicated to Simonx22
/
/ ********************************************************************

では、ワンオペを可能にするコードを書いていきましょう。

今回は4.5.0向けに移植したコードを4.5.1に移植します。

マイナーアップデートなのであまりアドレスは変わっていないはずですが、どうでしょうか。

ワンオペ

// 4.5.0
// One Player Private Battles [OatmealDome]
@enabled
003561B8 1F2003D51F2003D50900
003561C3 14
0035D2A0 1F2003D51F2003D50900
0035D2AB 14
01465FD8 21008052
014833AC 21008052
01482A08 1F2003D5

一人でプラベをしたり、ワンオペでサーモンランをしたりするのに必要なコードです。

“PrivateMatchPassSingle” でテキスト検索をして、その前後のアドレスを調べればすぐに見つかります。

“Msg_InvalidTeamSelect” というのはチーム分けが正しいかどうかを判定する関数ですので、それもパスするようにしましょう。

// 4.5.1
// One Player Private Battles [OatmealDome]
@enabled
003561B8 1F2003D51F2003D50900
003561C3 14
0035D2A0 1F2003D51F2003D50900
0035D2AB 14
01466064 21008052
01483438 21008052
01482A94 1F2003D5

殆ど変わっていないので簡単に実装することが出来ました。

プラベでワンオペ
サーモンランでワンオペ

スペシャル回数変更

オンラインでも使用できてしまうのでコードは公開しません。

たまに「オンラインで使わないので教えてください」っていう人が現れるんですが、そんなことを言われても信用もまったくないのでやっぱりコードは渡せません。

特に、特別体験版がアンチチートをしていなかったので荒れ放題な状態ですしね。

金イクラドロップ数変更

これもやはりオンラインで使えてしまうのでコードは公開しません。

金イクラドロップ数を変更

10個以上に設定すると、ドロップ時の金イクラの落ち方が定義されていないのでバグります。

違法ブキ開放

イカッチャで全てのブキを使用可能にするコードです。

container12345氏が見つけたコードで、掲載許可がいただけたのでコードの解説します。

まず、それぞれのブキにはイカッチャのサーモンランで使用可能かどうかのフラグが存在します。

そのパラメータはMush/WeaponInfo_Main.release.bymlにも記述されているのでこちらを変更することでも実はクマブキ開放は可能です。

で、肝心のパラメータはブキごとに設定された”CoopAddition”というものです。

これが0であればサーモンランで選択可能になるので、WeaponInfo_Main.release.byml読み込み時にパラメータの値を常に0にするようなコードを書けば良いことになります。

ただし、このコードを使うとありとあらゆるブキが使用可能になるので実際にはインクがでないために使い物にならないブキも選択可能になります。

また、非改造機と通信時に使用すると必ずクラッシュします。

?ブキは選択可能ブキからランダムに一つ選ばれるので、このコードをオンにしているとクマブキも選択されることがあります。

逆に言えば、このコード適用中は不用意に?ブキを選択すると非改造機がいた場合、ホストがクラッシュします。

全ブキ開放した状態

敵インク無効化

敵インクによるダメージが0になるだけなので、普通に足元はとられますし、水没したり落下したりするとデス扱いになります。

また、サーモンランですとシャケに殴られるとノックバックします。

公開していいかどうか微妙なんですが、GitHubで公開しているっていうことは公開してもいいんでしょう、多分。

敵インク無効化コードは4.5.0と4.5.1で共通でした。

// Godmode [SplatNut]
@disabled
010167C4 160080D2

まとめ

4.5.0から4.5.1の移植は4.5.1がリリースされた日の夕方くらいには出来ていたのですが、特に面白みもないので記事にせずに放置していました。

逆アセンブラはNSAが公開したGHIDRAがすごく便利だと思います、これがあればIDAもう要らないですね。

Hackが好きな人は「コード教えてほしい」というのは気持ちとしてすごくわかるし自分もそういう経験してきました。

ただ、そこから「自分でコード見つけよう」となるとさらなるステップアップができるので是非ともチャレンジしていただきたい所存です。

記事は以上。