Top > セーブファイル編集 > チェックサム

チェックサム

(提供:2スレ"前スレ148")

チェックサム算出ツールはこちら
(SFXB向けコードを利用すると、チェックサムの修正が簡単に行えます。)

チェックサムについて

セーブデータを書き換えた場合、書き換えたことによって変化したビット
に対応する16ビット(2バイト)の定数をチェックサムの部分にxorします。

とりあえず奇数回セーブの場合を説明します。
奇数回セーブの場合チェックサムの部分はアドレス$00C0FE、$00C0FF
となっています。
また、各ビットに対応する定数は以下のようになっています。

アドレス$00C0EB
bit0:1021(初期値)
bit1:2042
bit2:4084
bit3:8108
bit4:1231
bit5:2462
bit6:48C4
bit7:9188

アドレス$00C0EA
bit0:3331
bit1:6662
bit2:CCC4
   :

アドレス$000000
bit0:EFA0
bit1:CF61
bit2:8EE3
bit3:0DE7
bit4:1BCE
bit5:379C
bit6:6F38
bit7:DE70

アドレス$00C0EBのbit0に割り当てられた$1021を初期値として2倍して$10000を超えた
ときのみ$11021をxorするという方法で次のビットに対応する定数を作っていきます。
アドレス$00C0EBのbit7の次はアドレス$00C0EAのbit0へと繋がっていきます。

セーブデータを書き換えて道具1つめが10個のとき99個にする例に説明します。
道具1つめのアドレスは$000626です。
まずセーブデータをバイナリエディタで開いてアドレス$000626を$0A→$63と書き換えます。
この書き換えによって変化したビットはアドレス$000626のbit0、bit3、bit5、bit6の4つになります。
アドレス$000626の各ビットに対応した定数を先程の方法で求めると以下のようになります。
$000626
bit0:AF25
bit1:4E6B
bit2:9CD6
bit3:298D
bit4:531A
bit5:A634
bit6:5C49
bit7:B892

次にbit0:AF25、bit3:298D、bit5:A634、bit6:5C49この4つの定数をアドレス$00C0FEからの
2バイトにxorしてやるとチェックサムを書き換えることが出来ます。

アドレス$00C0FEがB7、アドレス$00C0FFが11だった場合
$00C0FE:B7 xor 25 xor 8D xor 34 xor 49 = 62
$00C0FF:11 xor AF xor 29 xor A6 xor 5C = 6D

この計算結果から
$00C0FEをB7→62
$00C0FFを11→6D
とすればセーブデータが消えることなく書き換えることができます


コメント(ご自由にどうぞ)

  • ff (T-T -- ffff 2009-10-03 (土) 22:44:22

広告に関するプライバシーポリシー

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Sat, 03 Oct 2009 22:44:28 JST (3183d)