*チェックサム [#p7b0b201] (提供:2スレ"前スレ148") チェックサム算出ツールは[[こちら>改造ツール#chksum]] ([[SFXB向けコードを利用すると、チェックサムの修正が簡単に行えます。>セーブファイル編集/SFXB向けコード]]) **チェックサムについて [#b725d052] セーブデータを書き換えた場合、書き換えたことによって変化したビット に対応する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 とすればセーブデータが消えることなく書き換えることができます ---- *コメント(ご自由にどうぞ) [#naa22951] - ff (T-T -- [[ffff]] &new{2009-10-03 (土) 22:44:22}; #comment |