私は最近、最初と2番目のRoad Rashのパスワードの生成に関する投稿を書きました。 記事へのコメントで、私はゲームRock n 'Roll Racingのパスワードシステムがどのように配置されているかを明確にするように求められました。 これについて、私はあなたと話をしたいと思います。 しかし、私はゲーム「Super Castlevania IV」から始めたいと思います。 さあ、始めましょう。
      スーパーキャッスルヴァニアIV
私はSNESのゲームを「クラック」したことはありません。 まあ、1点まで。 私は兄がこのゲームをプレイしているのを見ました そして彼は、Super Castlevania IVのパスワードを生成できれば非常に良いだろうとさりげなく言いました。 考え直すことなく、仕事を始めました。 眠れぬ夜を3回過ごした後、パスワードを保存する方法と方法を理解しました。
理論
パスワードは16個のセル(位置)で構成され、各セルは2ビットで構成され、合計16 * 2 = 32ビットです。 これらのビットには、次のゲームパラメータが格納されます。
- レベル番号(0-14)
 - 8キャラクタープレイヤー名
 - クエスト(1-4)
 
ここで、未加工のパスワードの構成を見てみましょう。
*ビットの数は括弧内に示されます。
| C4 (1) 、C4 (0) | D (1) 、D (0) | ? (1) (0) | C2 (1) 、C2 (0) | 
| C6 (1) 、C6 (0) | N (15) 、N (14) | U1 (1) 、U1 (0) | C5 (1) 、C5 (0) | 
| U2 (1) 、U2 (0) | C1 (1) 、C1 (0) | ? (1) (0) | L (1) 、L (0) | 
| N (13) 、N (12) | C3 (1) 、C3 (0) | L (3) 、L (2) | U3 (1) 、U3 (0) | 
指定
? -常にゼロに等しい。
U-未使用ビット。
D-(クエスト-1)(1-4)バイナリシステム。 (00-通常の難易度、01-難易度の増加。インターネット上でクエスト3および4のパスワードが見つかりませんでした。何らかの理由でゲームがこのデータを記録します。難易度は上がりませんが、突然、4番目のクエストを完了すると、秘密の結末が開きますか?...ほとんど何も変わらないでしょう。)
Nは、バイナリ表記の名前の値です。 名前の値の合計が初期値から差し引かれます。
*文字の値は角かっこで囲まれています。
* []-スペース。
| A(11) | B(12) | C(13) | D(14) | E(15) | F(16) | G(17) | H(18) | 私(19) | 
| J(20) | K(21) | L(22) | M(23) | N(24) | O(25) | P(26) | Q(27) | R(28) | 
| S(29) | T(30) | U(31) | V(32) | W(33) | X(34) | Y(35) | Z(36) | [](0) | 
| 1(2) | 2(3) | 3(4) | 4(5) | 5(6) | 6(7) | 7(8) | 8(9) | 9(10) | 
L-(レベル番号(0-14)div3)バイナリシステム。
*レベルB-3は3つの部分で構成されています。
| 数 | レベル | 名前の初期値 | 
| 0 | 1-1 | 2040 | 
| 1 | 2-1 | 10240 | 
| 2 | 3-1 | 14340 | 
| 3 | 4-1 | 34826 | 
| 4 | 5-1 | 10256 | 
| 5 | 6-1 | 43026 | 
| 6 | 7-1 | 51226 | 
| 7 | 8-1 | 43042 | 
| 8 | 9-1 | 47142 | 
| 9 | A-1 | 55343 | 
| 10 | B-1 | 14388 | 
| 11 | B-3(1) | 63543 | 
| 12 | B-3(2) | 2104 | 
| 13 | B-3(3) | 18489 | 
| 14 | B-4 | 34874 | 
チェックサム
C1 = N (1) 、N (0) + D (1) 、D (0)
C2 = N (3) 、N (2) + C1 (3) 、C1 (2) + U2 (1) 、U2 (0)
C3 = N (5) 、N (4) + C2 (3) 、C2 (2) + U1 (1) 、U1 (0)
C4 = N (7) 、N (6) + C3 (3) 、C3 (2) + U3 (1) 、U3 (0)
C5 = N (9) 、N (8) + C4 (3) 、C4 (2)
C6 = N (11) 、N (10) + C5 (3) 、C5 (2)
1つのチェックサムからの2つの高位ビットが次のチェックサムに移動するという事実に注意を喚起したいと思います。
コーディング
      0(00)-空。
1(01)-x。
2(10)-聖水。
3(11)-ハート。
  パスワード生成の例 
       これらのパラメーターを保存するパスワードを作成します。 
      
        
        
        
      
    
        
        
        
      
    
      
        
        
        
      
    
        
        
        
      
レベル番号(12div3 = 4)= 0100
        
        
        
      
クエスト(4)= 4-1 = 3 = 11
        
        
        
      
    
      
        
        
        
      
    
        
        
        
      
AWL [] VITA = 11 + 33 + 22 + 0 + 32 + 19 + 30 + 11 = 158
        
        
        
      
2104-158 = 1946 = 11110011010
        
        
        
      
N (15) 、N (14) = 00
        
        
        
      
N (13) 、N (12) = 00
        
        
        
      
N (11) 、N (10) = 01
        
        
        
      
N (9) 、N (8) = 11
        
        
        
      
N (7) 、N (6) = 10
        
        
        
      
N (5) 、N (4) = 01
        
        
        
      
N (3) 、N (2) = 10
        
        
        
      
N (1) 、N (0) = 10
        
        
        
      
    
      
        
        
        
      
    
        
        
        
      
C1 = 10 + 11 = 0101
        
        
        
      
C2 = 10 + 01 + 11 = 0110
        
        
        
      
C3 = 01 + 01 + 11 = 0101
        
        
        
      
C4 = 10 + 01 + 11 = 0110
        
        
        
      
C5 = 11 + 01 = 0100
        
        
        
      
C6 = 01 + 01 = 10
        
        
        
      
    
      
        
        
        
      
    
        
        
        
      
    
      
        
        
        
      
数字をグラフィック画像に変換することは残っています。
        
        
        
      
    
- 名前:「AWL [] VITA」
 - クエスト(4)
 - すべての未使用ビットは1に等しい
 - レベルB-3(2)
 
値を2進数システムに変換します。
レベル番号(12div3 = 4)= 0100
クエスト(4)= 4-1 = 3 = 11
名前の値を計算します:
AWL [] VITA = 11 + 33 + 22 + 0 + 32 + 19 + 30 + 11 = 158
2104-158 = 1946 = 11110011010
N (15) 、N (14) = 00
N (13) 、N (12) = 00
N (11) 、N (10) = 01
N (9) 、N (8) = 11
N (7) 、N (6) = 10
N (5) 、N (4) = 01
N (3) 、N (2) = 10
N (1) 、N (0) = 10
チェックサムを計算します。
C1 = 10 + 11 = 0101
C2 = 10 + 01 + 11 = 0110
C3 = 01 + 01 + 11 = 0101
C4 = 10 + 01 + 11 = 0110
C5 = 11 + 01 = 0100
C6 = 01 + 01 = 10
受信したデータをテーブルに書き込みます。
| 10 | 11 | 00 | 10 | 
| 10 | 00 | 11 | 00 | 
| 11 | 01 | 00 | 00 | 
| 00 | 01 | 01 | 11 | 
数字をグラフィック画像に変換することは残っています。
ロックンロールレース
私はこのゲームを長い間「クラック」し、その後ビット解析の方法を使用しませんでした。 したがって、このゲームへのアプローチは少し異なります。
      理論
パスワードは、これらのゲームパラメータが保存される12の位置で構成されます。
- 難易度(ルーキー、ベテラン、戦士)
 - 部門(A、B)
 - 車(通常5台+バギー3台)
 - マシンカラー(5ノーマル+ 1バギー)
 - 惑星(6通常+ 2バギー)
 - キャラクター(通常6 +シークレット+バギー1)
 - カーアーマー(1-4)
 - 車のエンジン(1-4)
 - 車のサスペンション(1-4)
 - 車のタイヤ(1-4)
 - スパイク/地雷(選択したマシンによって異なります)(0-7)
 - ニトロ/ジャンプ(選択したマシンに依存)(0-7)
 - ミサイル/弾薬(選択したマシンに依存)(0-7)
 - 金額(0-1599000 $)の増分= 1000。
 
ここで、選択したゲームパラメータに応じてポジションの値がどのように変化するかを見てみましょう。
| 難易度 | 1ポジション | 4ポジション | 
| ルーキー | +0 | Xor5 | 
| ベテラン | Xor8 | Xor1 | 
| 戦士 | XOR16 | XOR13 | 
| 部門 | 1ポジション | 7ポジション | 
| A | Xor8 | +0 | 
| B | +0 | +2 | 
| 車 | 2ポジション | 3位 | 9ポジション | 
| グリッチ | +0 | +0 | +0 | 
| グリッチ | +0 | XOR16 | +4 | 
| グリッチ(自己破壊車) | Xor1 | +0 | +8 | 
| エアーブレード | Xor1 | XOR16 | +12 | 
| マローダー | Xor2 | +0 | +16 | 
| ダートデビル | Xor2 | XOR16 | +20 | 
| ハバク | Xor3 | +0 | +24 | 
| バトルトラック | Xor3 | XOR16 | +28 | 
| マシンカラー | 2ポジション | 8ポジション | 
| 赤 | Xor20 | +0 | 
| 緑色 | XOR16 | +1 | 
| 黒 | Xor28 | +2 | 
| 青 | Xor4 | +4 | 
| グリッチ(ピンク-酸性-緑色) | +0 | +5 | 
| 黄色 | Xor12 | +6 | 
| エンジン | 1ポジション | 10ポジション | 11ポジション | 
| 1 | +0 | +0 | +16 | 
| 2 | Xor4 | +0 | +0 | 
| 3 | Xor8 | +1 | +16 | 
| 4 | Xor12 | +1 | +0 | 
| タイヤ | 1ポジション | 4ポジション | 10ポジション | 
| 1 | +0 | +0 | +6 | 
| 2 | XOR16 | +0 | +4 | 
| 3 | +0 | XOR16 | +2 | 
| 4 | XOR16 | XOR16 | +0 | 
| アーマー | 3位 | 9ポジション | 
| 1 | Xor4 | +1 | 
| 2 | +0 | +0 | 
| 3 | Xor12 | +3 | 
| 4 | Xor8 | +2 | 
| ペンダント | 3位 | 10ポジション | 
| 1 | +0 | +8 | 
| 2 | Xor1 | +0 | 
| 3 | Xor2 | +24 | 
| 4 | Xor3 | +16 | 
| ニトロ/ジャンプ | 1ポジション | 2ポジション | 11ポジション | 
| 0 | +0 | +0 | +8 | 
| 1 | +0 | XOR16 | +10 | 
| 2 | Xor1 | +0 | +12 | 
| 3 | Xor1 | XOR16 | +14 | 
| 4 | Xor2 | +0 | +0 | 
| 5 | Xor2 | XOR16 | +2 | 
| 6 | Xor3 | +0 | +4 | 
| 7 | Xor3 | XOR16 | +6 | 
| スパイク/鉱山 | 2ポジション | 11ポジション | 12ポジション | 
| 0 | +0 | +1 | +0 | 
| 1 | Xor2 | +1 | +8 | 
| 2 | Xor4 | +1 | +16 | 
| 3 | XOR6 | +1 | +24 | 
| 4 | Xor8 | +0 | +0 | 
| 5 | XOR10 | +0 | +8 | 
| 6 | Xor12 | +0 | +16 | 
| 7 | XOR14 | +0 | +24 | 
| ミサイル/弾薬 | 2ポジション | 3位 | 12ポジション | 
| 0 | +0 | +0 | +0 | 
| 1 | +0 | Xor8 | +1 | 
| 2 | +0 | XOR16 | +2 | 
| 3 | +0 | Xor24 | +3 | 
| 4 | Xor1 | +0 | +4 | 
| 5 | Xor1 | Xor8 | +5 | 
| 6 | Xor1 | XOR16 | +6 | 
| 7 | Xor1 | Xor24 | +7 | 
| 惑星 | 1ポジション | 7ポジション | 8ポジション | 
| 沼地 | +0 | +1 | +0 | 
| 新しいモハベ | Xor1 | +1 | +8 | 
| Chem VI | Xor2 | +1 | +16 | 
| ドラコニス | Xor3 | +1 | +24 | 
| グリッチ | Xor4 | +0 | +0 | 
| グリッチ | Xor5 | +0 | +8 | 
| ニョ | XOR6 | +0 | +16 | 
| インフェルノ | Xor7 | +0 | +24 | 
| キャラクター | 1ポジション | 3位 | 4ポジション | 7ポジション | 
| タルキム | +0 | Xor1 | XOR16 | +0 | 
| ジェイクバッドランス | XOR16 | Xor1 | XOR16 | +4 | 
| グリッチ | +0 | Xor1 | +0 | +8 | 
| オラフ(秘密のキャラクター) | XOR16 | Xor1 | +0 | +12 | 
| サイバーホーク | +0 | +0 | XOR16 | +16 | 
| ヘビのサンダー | XOR16 | +0 | XOR16 | +20 | 
| カタリーナライオンズ | +0 | +0 | +0 | +24 | 
| イヴァンザイファー | XOR16 | +0 | +0 | +28 | 
ここで、金額からポジションがどのように変化するかを見てみましょう。
X 1z。 X 2z。 X 3秒。 X 4z。 000ドル
金額を1000で除算し、残りをポジションの変化を決定する必要があります。
1ポジション= XOR(x $ div 200)
2ポジション= XOR(x $ div 100が偶数の場合は3s。+ 0、奇数の場合は+16)
3ポジション= XOR(4z。* 2)
4番目の位置= XOR(x $ div 400)
5番目の位置=((x $ div 100)mod4)XOR((x $ div 20)mod5)
(↓)
(結果の数値は変換されます)
に従って
0→13
1→5
2→29
3→21
6番目の位置=((x $ div 10)mod2)XOR 4z。
(↓)
(結果の数値は変換されます)
に従って
0→12
1→28
コーディング
位置の文字は、値「BCDFGHJKLMNPQRSTVWXYZ0123456789!」を取ります。ここで、B = 0、C = 1 ... 9 = 30 、! = 31です。
  パスワード生成の例 
       これらのパラメーターを保存するパスワードを作成します。 
      
        
        
        
      
    
        
        
        
      
お金を計算します:
        
        
        
      
1257000/1000 = 1257
        
        
        
      
1ポジション= 1257 div 200 = 6 = XOR6
        
        
        
      
2ポジション= 5+(1257 div 100)= 5 + 12(数値が偶数であるため+0)= 5 + 0 = XOR5
        
        
        
      
3ポジション= 7 * 2 = 14 = XOR14
        
        
        
      
4ポジション= 1257 div 400 = 3 = XOR3
        
        
        
      
5ポジション=((1257 div 100)mod4 = 0→13。13XOR(1257 div 20)mod5 = 13 XOR 2 = 15
        
        
        
      
6ポジション=((1257 div 10)mod2 = 1→28.28 XOR 7 = 27
        
        
        
      
    
      
        
        
        
      
次に、位置の値をテーブルに書き込みます。
        
        
        
      
* p。-位置。
        
        
        
      
    
      
        
        
        
      
    
      
        
        
        
      
必要な計算を行い、以下を取得します。
        
        
        
      
30,8,3,2 15,27,17,8 21,1,30,15
        
        
        
      
    
      
        
        
        
      
次の行をエンコードします。
        
        
        
      
    
      
        
        
        
      
9LFD T6WL 0C9T
        
        
        
      
    
- 難易度(ベテラン)
 - 部門(A)
 - 車(汚れた悪魔)
 - マシンカラー(赤)
 - 惑星(ニューモハベ)
 - キャラクター(サイバーホーク)
 - アーマー(1)
 - エンジン(3)
 - ペンダント(2)
 - タイヤ(4)
 - スパイク/鉱山(5)
 - ニトロ/ジャンプ(3)
 - ミサイル/弾薬(7)
 - お金($ 1,257,000)
 
お金を計算します:
1257000/1000 = 1257
1ポジション= 1257 div 200 = 6 = XOR6
2ポジション= 5+(1257 div 100)= 5 + 12(数値が偶数であるため+0)= 5 + 0 = XOR5
3ポジション= 7 * 2 = 14 = XOR14
4ポジション= 1257 div 400 = 3 = XOR3
5ポジション=((1257 div 100)mod4 = 0→13。13XOR(1257 div 20)mod5 = 13 XOR 2 = 15
6ポジション=((1257 div 10)mod2 = 1→28.28 XOR 7 = 27
次に、位置の値をテーブルに書き込みます。
* p。-位置。
| 1ページ | 2ページ | 3ページ | 4ページ | 5ページ | 6ページ | 7ページ | 8ページ | 9ページ | 10ページ | 11ページ | 12ページ | 
| XOR6 | Xor5 | XOR14 | Xor3 | 15 | 27 | +1 | +8 | +20 | +1 | +16 | +8 | 
| Xor8 | Xor2 | XOR16 | Xor1 | +0 | +0 | +16 | +0 | +1 | +0 | +14 | +7 | 
| Xor8 | Xor20 | Xor4 | XOR16 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | 
| Xor8 | XOR10 | Xor1 | XOR16 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | 
| XOR16 | XOR16 | Xor24 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | 
| Xor1 | Xor1 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | 
| Xor1 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | +0 | 
必要な計算を行い、以下を取得します。
30,8,3,2 15,27,17,8 21,1,30,15
次の行をエンコードします。
9LFD T6WL 0C9T
おわりに
さて、ロックンロールレーシングと混同しないでください。 読んでくれてありがとう。