はじめに
前回、チートの種類について書きました
今回はまず一番簡単なセーブデータ改造について書きます
セーブデータとはゲームの進行状態を保存したもので、一度ソフトを終了してもまた続きから遊べるのは、この保存されたデータを読み込んでいる為です
今回はこの読み込まれたデータの場所(アドレス)をサーチで特定し、値を書き換えます(その後セーブをすることで実際のファイルに反映される)
何がセーブデータとして保存されているかはゲームごとに異なるので、保存されていると思うデータの中から改造したい対象を決め、以下のやり方を参考にしてください
Unknown search
これは改造したい対象データの値が予測できない場合に、直前と現在の値で比較するサーチ
私はMH4Gで装備box1番目の装備を入れ替えることで、直前の値と変化があった場所(アドレス)を探そうと思います
CTRPFを開いて、Searchを選択

MemRegion: All memory
Value Type: 4Bytes
Search Type: Unknown search
に変更して左下のSearchを押します

Unkown searchが始まり、終わると次のサーチ待ちになります
これは今、全てのメモリを対象に、4byte区切りで、現在のメモリデータを保存しました

次に一旦CTRPFを閉じ、改造したい対象のデータを変動させます
私のビフォーアフターはこんな感じ


装備を1つ隣へ移動させました
次に、scan TypeをNot Equal To(等しくない)に変更しSearch、結果を直前の値から変化があった場所に絞ります

大量にヒットしてしまったので、もっと絞れるまでこれを繰り返します

時折装備を移動させずに、Equal To(等しい)でサーチすると効果的
私の場合今回は装備box1の場所(アドレス)を特定するサーチなので、box1が空の状態でbox2からbox3へ装備を移動したところでbox1の値は何も変化しない点は注意
14回くらい繰り返すと、アドレスが4つの固まりに絞れました


この4つの固まりのどれかが装備box1番目のセーブデータになります
結構セーブデータ以外にもデータをメモリに読み込んでたりするので、1つずつ値を書き換えてみて、変化があるかどうか確かめるしかないです
書き換えたいアドレスにカーソルを合わせてXボタン→Jump in ediitor

でカーソル合わせたアドレスを、Hex Editorで開けます

このアドレス「83319B6」の、値「13」をテキトーに「08」に書き換えてみます

Aボタンで確定してCTRPFメニューを閉じると、

変化がありました
書き換えた場所には、武器カテゴリを識別するデータが格納されていたようです
こんな感じで、アドレス○○の値は○○で○○になる、と1つずつ解析するのがセーブデータです
Specified value(値指定のサーチ)
改造したい対象データの値が予測できる場合は、比較する値を直接指定することで、もっと簡単にできます
例えば所持アイテムの個数とかは大体そのまま16進数で個数が値となっているので、所持数を比較対象に指定してサーチしてみます

アイテムポーチ3ページ目の上から4つ目の個数のアドレス(もえないゴミの所持数10)を特定します
Searchを開いて、前回の結果が残っている場合は一度Resetしてから、
MemRegion: All memory
Value Type: 1Byte
Search Type: Specified value
Scan Type: Equal To
value: 10 または 0xA
でSearch


これで値が「10(0xA)」と等しいアドレスを検索することになります
ValueにあるHexが緑の状態だと16進数を表しています
Value Typeを1Byteに設定する事で、1Byte単位で検索しています(4Byte設定の場合は設定した値と4Byte単位で等しいアドレスを検索するので、今回の値だと直前3Byte分のデータが00の場合にしかヒットしない)

これも値を変動させて繰り返します
普通に所持数を6つに減らしたならvalueも6にして再度Search

絞れたらHex Editorで編集


FFとすると

10進数で255個になりました
1Byteだと256通りの値しか表せないのでこれが最大かと思いきや実は個数のデータには2Byte分のデータが割り当てられています
なので隣もFFにすると


-1になりました😂
割り当てByte数の話(以下おまけ)
1Byteだと256通りの値しか表せませんが、2Byte…3Byte…と割り当てられるByte数が増えれば表せる値も2乗…3乗…と増えていきます
例えば所持金とかは桁が大きいのでその分割り当てられているByte数も多い
負の数
中には負の数を扱っているデータもあります(例えばハンターランクポイント)
その場合、正の数は01→02と値が上がっていくが、
負の数はFFが-1で、FEが-2といった感じで、後ろから数えて値が上がっていく場合が多い
エンディアン
Hexエディタでは「リトルエンディアン」
Searchやチートコードでは「ビッグエンディアン」
という形式で値が並んでいる
リトルエンディアンは最後のバイトからデータを並べるやり方
ビッグエンディアンは最初のバイトからそのままデータを並べるやり方
例えば 78 56 34 12 という4byteのデータがHexエディタにあるとする
ただHexエディタの並び順はリトルエンディアンという特殊なやつ
サーチでこの値をequal toでヒットさせたいなら、本来の並び順であるビッグエンディアンに直さなくてはならない
これは最後のバイトから並んでしまっているので、通常の並びに直すと、12 34 56 78 となる
まとめとおまけ
直前の値と現在の値を比較するのがUnknown Search
指定した値と比較するのがSpecified value
他にも、サーチするメモリ幅を指定するMemRegion
値が比較対象より大きい場合にヒットするScan Type: Bigger Than
など色々あるので触ってみてください!
コメント
online pharmacy uk Get pill details. Latest drug developments. online pharmacies to buy tramadol
発掘装備や護石の鑑定画面の特定って出来ますか?
とある元オンラインゲームのオフライン版のデータ書き換えでオンラインアイテム入手しようとしたらアイテム何もないから変更して値の確認できなくて泣いた
ドラクエっすね