数値について |
使われている数値は、通常10進数です。
数字の後ろに「h」が付いている物は16進数です。
数字の後ろに「b」か付いている物は2進数です。
例: 100 = 64h = 01100100b
|
バイトデータ並び表 |
表に使用されているデータは全て16進数です。(hは省略してあります)
左行の項目がアドレスです。
上列の項目がアドレス+何バイト目かを表しています。
データは1つ1バイトを表していますが、
2バイトで1つのデータを表す場合などはまとめてあります。
例:
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
1CF60 |
01 |
02 |
69 |
40 |
4A |
4D |
経験値 |
|
|
|
|
|
|
|
|
アドレス1CF60h番地から 01h 02h 69h 40h 4Ah 4Dh と、
6バイトのデータが連続して格納されていることを示す。
1CF66h番地と1CF67h番地は2バイトで経験値データが格納されていることを示す。
|
ビットデータ並び表 |
1バイトは、8ビット。データの中には、メモリ節約のため1バイトに複数のデータを詰め込む場合がある。
ビットデータは上位桁から7〜0ビットと表記する。
例:
85hのデータは以下のように表現される。
ビット |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
1 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
7ビット、2ビット、0ビットが1である。
|
複数バイトにまたがる数値データ |
複数バイトにまたがる数値データは、特に断り書きがない限り
上位桁が上位アドレスに格納されている。
例:
先ほどの例からすると
1CF66h番地に 00h が、1CF67h番地に 01h が格納されていた場合、
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
1CF60 |
01 |
02 |
69 |
40 |
4A |
4D |
00 |
01 |
|
|
|
|
|
|
|
|
経験値は、0001h = 1ではなく、 0100h = 256 となる。
|
チェックSUM |
セーブデータなどには、そのデータが壊れていないかどうか確認するためにSUMチェックを行う場合がある。
セーブデータを改造する場合に、これは傷害となる。
例:
以下のようなデータが存在し、100h番地から10Eh番地までがセーブデータ、10Fh番地がチェックSUMだとする
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
20 |
00 |
15 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
35 |
100h番地から10Eh番地までのデータを1バイトと単位で加算した値が10Fh番地に格納されている。
0+1+20h+0+15h+0+FFh+0+0+0+0+0+0+0 = 135h
(桁上げは無視されるので 35h)
データが変わっていれば当然加算の結果が異なるため、100h番地から10Eh番地までのデータを1バイトと単位で加算した値と、10Fh番地に格納されている値が異なってくる。
これに引っかかりデータが壊れていると判定された場合は、ゲームによってそのセーブデータが表示されなかったり、「壊れています」と親切にも表示してくれたりします。
チェックSUMの位置が分かっている場合は、データを変更した場合にそのチェックSUMの値を同じように変更してやればよい。
例えば、102hのデータ20hを21hに変更した場合は、20hに1を足したわけであるから、チェックSUMの値にも同じく1を足して、10Fhのデータ35hを36hに変更すればよい。
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
21 |
00 |
15 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
36 |
チェックSUMの位置が判明していない場合は、チェックSUMの値が変化しないようにデータを変更する。
例えば、102hのデータ20hを21hに変更した場合は、20hに1を足したわけであるから、他の変更しても差し支えないデータ(ここでは例えば101h番地)から1を引けばよい。そうすれば、1足して1引いたわけだから合計値(チェックSUMの値)は変わらないため、チェックに引っかからずに済む。
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
00 |
21 |
00 |
15 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
35 |
|
2バイトチェックSUM |
これも基本的にはSUMチェックと同様。
ただし、加算の方法が2バイトづつなだけである。
例:
以下のようなデータが存在し、100h番地から10Dh番地までがセーブデータ、10Eh番地及び10Fh番地がチェックSUMだとする
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
20 |
00 |
15 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
34 |
02 |
2バイト単位なので見やすく書き直せば
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
0100 |
0020 |
0015 |
00FF |
0000 |
0000 |
0000 |
0234 |
100h番地から10Dh番地までのデータを2バイトと単位で加算した値が10Eh番地及び10Fh番地に格納されている。
100h+20h+15h+FFh+0+0+0 = 234h
(桁上げは場合によって無視されないときもある。その場合は1加算されている。)
修正の方法は、SUMチェックと同様である。
方法Aを使用する場合は、なるべく桁上げが起きない程度に行うと間違う確率が低い。
|
BITチェック |
これも基本的にはSUMチェックと同様。
ただし、計算方法が異なる。
このチェック方式は、実際にどのような計算式を使用してどういう値を格納しているのか不明である。
ビットの総数とその位置を変えないようにしてやるとチェックをすり抜けることが可能である。
64h という値と 85h という値があったとする。
64h を増やしたい場合は、以下のようにして85h からBITをもらう。
二進数で表すと
64h
= 0110 0100 b
85h = 1000 0101 b
BITを移動する。
E5h = 1110 0101 b
↑ ↑
05h = 0000 0100 b
※
※この場所はすでに増やしたい方の値にBITがあるので移動できない。
SUMチェックの場合と比較すると、※の部分が違うことになる。修正はこちらの方が幾分か注意を要する。
それは、ただ単に足し算・引き算すればOKというわけには行かないからである。
以下のようなデータが存在するとしよう
108h 109h
が2バイトの数値データであるとしてこの値を増やしたい場合
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
20 |
00 |
15 |
00 |
FF |
00 |
64 |
00 |
32 |
00 |
01 |
00 |
00 |
02 |
数値の下位バイトから上位バイトへビットを移動させればよい。
00h
= 0000 0000 b
64h = 0110 0100 b
04h
= 0000 0100 b
↑
60h = 0110 0000 b
値は 0064h → 0460h になる。 ( 100 → 1120 )
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
20 |
00 |
15 |
00 |
FF |
00 |
60 |
04 |
32 |
00 |
01 |
00 |
00 |
02 |
または、別の場所、例えば 10Ah
からビットをもらう。
64h
= 0110 0100 b
32h
= 0011 0010 b
76h
= 0111 0110 b
↑ ↑
20h = 0010 0000 b
値は 0064h → 0076h になる。 ( 100 → 118 )
|
+0 |
+1 |
+2 |
+3 |
+4 |
+5 |
+6 |
+7 |
+8 |
+9 |
+A |
+B |
+C |
+D |
+E |
+F |
100 |
00 |
01 |
20 |
00 |
15 |
00 |
FF |
00 |
76 |
00 |
20 |
00 |
01 |
00 |
00 |
02 |
|