ボーンによるRoad Rash 3パスワード構造の最も単純な暗号化または解析

こんにちは、Habrausers様。

はい、タイトルはあなたをだましませんでした:今日私たちは古き良きコンソールゲームロードラッシュ3について覚えています。



画像






誇らしげなカルトゲームをせずに、何キロも誇らしげな孤独や騒々しい友人の中で何時間も過ごし、仮想のキロメートルを巻き上げたことを喜んで思い出すと思います。 また、ある晩、私は自分の若さを思い出し、私の好きなレースでいくつかのレベルを経験することにしました。 そして今、エミュレーターとゲームパッドを装備して、彼はキャリアのはしごを登り始めました。 すべてが順調に進んでいたが、ある瞬間、ゲームで何かが飛び上がり、彼女は私を新しいレベルに連れて行くことを拒否したが、このためのすべての条件は満たされた。 私は長い間動揺しませんでした ゲームには蓄積された実績を保存するための一種のパスワードシステムがあることを知っていました。 不幸なレベルに手動で移行し、明確な良心を持って競争を続けるために、入力するだけで既存のパスワードを「微調整」する必要がありました。



しかし、それは単純すぎて、率直に言って、面白くありませんでした。 私はすぐに考えました:「それはどのように機能しますか?」 そして、後で特定のニーズや気分に基づいて自分で作成できるようにするために、パスワード生成アルゴリズム自体を知っているというアイデアを得ました。



理論のビット



それでは、Road Rash 3とは何ですか? これは、さまざまな国の素晴らしい8ビット音楽への道を走るクールなスポーツバイクのレースです。 レースに参加する場所が高ければ高いほど、より多くのお金を得ることができ、そのお金を新しい鉄馬の購入や近代化に費やすことができます。 特に興味深いのは、レース中に高速でライバルと直接戦い、新しい武器を奪い、その助けを借りて不運な競争相手をさらに打ち負かす機会です。 説明の説明ですが、数字に移りましょう。



一番下の行には、次のゲームパラメーターがあります。

残念ながら、開発者は武器を保存する機能を提供していなかったため、再起動するたびにリセットされます。



次に、パスワード自体を見てみましょう。



画像



キャラクターは8ポジションのみ。 各文字は、0〜9およびAVの値を取ることができます。 合計で、各位置に32の可能な文字を取得します。



最も興味深い



それでは始めましょう。

これらのすべての依存関係とアルゴリズムをどのように推測したかについての長い話で退屈することはありません。実験に多くの時間を費やしましたが、私は要点を説明します。

おそらく、多くの人が「こんなに小さなパスワードに非常に多くのパラメーターをどのように適合させることができますか?」と思っているでしょう。 cなロジックと洗練されたアルゴリズムがすべてです。 次に、これがどのように発生するかを確認します。



お金、お金とお金


画像



パスワードの最初の4桁がお金の責任です。

C440 xxxx

しかし、すべてがそれほど単純で明白なわけではありません。 ここにはトリックがあります。

1および2ポジションは2550ドルまでの金額を、3および4ポジションは-2550ドルを超える金額を担当します。



たとえば、金額が5500ドルの場合、これは(2 * 2560 $ + 380 $)です。

したがって、2 * 2560 $ = 5120 $ 3および4ポジションが責任を負い、残りは$ 380-1および2ポジションの形で責任を負います。



小さく始めましょう:1ポジションと2ポジション、$ 2550未満の金額


ここで深く掘り下げ、例を検討し続けます。 この380ドルは1ポジションと2ポジションにどのように保管されますか? それは次のように起こります。



画像

表1.パスワードの1桁と2桁-小額



1ポジションは、$ 10単位で$ 0から$ 150までの金額を担当します。

同様に2ポジション。 今だけ、各ステップで10ドルは加算されませんが、160ドルで1ファクター増加します。 つまり 私たちは160ドルを取る必要があります:0、1、2など。



「指の上」を次のように想像してください。 $ 10があり、その中に別の10個を追加し、さらに10個を追加して、150に達するまで続けます。この間、シンボルは1ポジションだけに巻かれています。 150に達したら、さらに10を追加し、160が既に存在する2番目の位置にジャンプします。次に、それぞれ10を追加して、150に達するまで最初の位置のシンボルを再度回転します。 + 160 = 320。



表を見ると、偶数文字のみが使用されていることがわかります(0、2、4 ...)。 何のために? これについては後で詳しく説明します。



したがって、2550ドル以内の金額をカバーできます。

上記の例の残りを見てみましょう:380 $ = 2 * 160 $ + 60 $。



60ドルが最初のポジションです(160ドル未満)。 「 C 」記号はこの量に対応しています。

2 * 160 $-2番目の位置。 この合計は、記号「 4 」に対応します。



つまり、380ドルの金額は「 C4 」と書くことができます。



次に、2550ドルを超える3および4のポジションと金額を検討します。


ここでは、一般的に、すべてが似ています。



画像

表2.パスワードの3および4ポジション-大金



3ポジションの各偶数文字は、最大$ 38,400 = $ 15 * 2560まで+ 2560などを与えます。

4桁の各偶数文字には、40960 $ = 16 * 2560 $の係数があります。 40,960ドルを必要とする回数:0、1、2など (これは、4番目の位置のわずかに簡略化されたアルゴリズムであり、後で戻ります)。

したがって、2560ドルから655350ドルまでの金額をカバーします。



この例では、5120ドルが残っています。 ご覧のとおり、これは$ 40,960未満であるため、4番目のポジションはゼロのままです($ 40,960のゼロ倍を取る必要があります)。 さて、$ 5120 = 2 * 2560 $に対応する3ポジションシンボルは " 4 "です(表2を参照)。



その結果、最初の4つのポジションについて「 C440 」の組み合わせが得られ、5500ドルの金額が示されました。



レベル


画像



レベルでは、すべてが非常にシンプルで透明です。 パスワードの5番目の位置と5文字のみがそれを担当します。

xxxx 1 xxx

1-最初のレベル。

2-第2レベル。

3-第3レベル。

4-4番目のレベル。

5-5番目のレベル。



改善(アップグレード)


あなたが思い出すように、改善点は4つだけです。



画像



アルゴリズムでは、それらは論理的に2つのグループに分けられます。

  1. パフォーマンスとサスペンション(パフォーマンスとサスペンション);
  2. 保護とタイヤ(保護とタイヤ)。
ここから面白いトリックが始まります。 アップグレードのパスワードには独自の位置はありませんが、他のパラメーターと一緒に共有します。最初のグループは「money」でホストされ、2番目は「level」でホストされました。



最初の最初のペアについて


パスワードの1と2の位置に戻りましょう。 覚えておいて、私はお金のためのシンボルが1つ、つまり でも? これは秘密の一つです。

パフォーマンスを確立したい場合は、1ポジションのシンボルを1つずつ増やし、サスペンションを設置したい場合は、2ポジションのシンボルを1つずつ増やす必要があります。

C4 xx xxxx

したがって、奇数文字の省略により形成される「ウィンドウ」を使用します。これにより、同じ量ではなく改善することができます。



例についてさらに詳しく考えてみましょう。

最初の2文字-「 C4 」は、380ドルの金額とアップグレードの不足に対応します。

新しいエンジンが必要ですか? 問題ありません! 1ポジションのシンボルを1つ増やし、「 D4 」を取得します。 ただし、金額は変更されていません! それは、あなたがもう1つ増加した場合にのみ変更されます。 「 E4 」(表1を参照)。

サスペンションの場合も同様に、2ポジションのシンボルを1つ増やし、「 D5 」を取得します。 同時に、金額は同じままでした:380ドル。



アップグレードの2番目のペアについて


前述したように、それらは5つのポジション(レベル)に登録されています。 ただし、今回はアルゴリズムが少し異なります。

タイヤ(タイヤ)が存在するという事実は、5つの位置のシンボルを8増加させます。保護(保護)の存在は、同じシンボルを16増加させます。



レベル1の状況を考慮してください。

たとえば、レベル3の場合、シリーズは3 / B / J / Rのようになります。



したがって、パスワードの1、2、および5の位置が改善の原因であることがわかります。

C4 xx 1 xxx



トレイル


5トラックのレベルでのみ、任意のシーケンスでそれらを通過できます。



画像



このパラメーターでは、パスワードの7番目の位置に文字があります。

xxxx xx E x

特定のルートを通過するという事実は何らかのフラグでマークされ、0または1の値を持っている(通過/未通過)と仮定するのは論理的です。

5つのトラックすべてのうち、通過した軌跡と通過しなかった軌跡のすべての可能な組み合わせを反映する通常の2進数を簡単に作成できます。



画像

表3. 7パスワード位置-トラバースされたトラック



ここでは、各放電が5つのトラックの1つを担当します。 たとえば、01010は、トラック1、3、および5は渡されず、2および4は渡されることを示しています。

この2進数を英数字の文字列に射影すると、パスワードの7番目の位置に対応する文字が取得されます。 私たちの場合、これは記号「 A 」です。



オートバイといくつかのお金


それでは、最も難しい部分であるオートバイに取り掛かりましょう。

この場合、3つの位置(3、4、および6)は、かなり洗練されたアルゴリズムに従ってすぐに結び付けられます。

xx 40 x 1 xx

できるだけ簡単に説明しようと思います。



オートバイ自体の選択はそれほど難しくありません。 パスワードには全部で16個あり、パスワードには6個のポジションがあります。

xxxx x B xxx

ここでは、以前と同じように、シンボルは1つを飛び越え、ペアでグループ化されます。



画像

表4. 6ポジションパスワード-オートバイ



たとえば、0と1-最初のオートバイ、2と3-2番目、4と5-3番目など。 最後まで。 全体の難しさは、2つのキャラクターのどちらを特定のペアから選択するかを決定することにあります。



アクションのシーケンスを理解するために、3と4の位置に戻りましょう。

3位置は偶数文字(0、2、4、6など)でのみ表現できます。 ここで奇数は、原則として、どのような状況でもありえません。 しかし、4つのポジションのシンボルと6番目の(モーターサイクル)はペアでグループ化されます:0と1-$ 0、2と3-$ 40960、4と5-2 * 40960 $など(以前は、4つのポジションを説明するとき簡単にするためにそこで行った簡略化について話しましたが、今では全体像を見ることができます)。



画像

表5. 3および4のパスワード位置-大金(フルバージョン)



したがって、2つのタスクに直面しています。

  1. 4つの位置に2つの可能な文字のいずれかを選択します。
  2. 6つの位置に2つの可能な文字のいずれかを選択します。
オートバイを扱う最初のこと


開発者は自分の魂を有名にし、オートバイを選択するために最大4つのマスクを作成しました。 以下の画像に表示されます。



画像

表6.パスワードの6番目の位置のマスク(オートバイ)



紫色の文字は、対応するグループ(オートバイ)に選択する必要がある文字です。 たとえば、3つのマスクを押して10台のオートバイを選択する場合、パスワードの6番目の位置に「J」記号を入力する必要があります。



次に、マスク自体を選択する方法について説明します。

この同じマスクは、セルの数が増えるとセルが1つ増えることに気付くかもしれません。 つまり マスク番号2は、マスク番号1に他なりません。 マスクは、パスワードの3桁と4桁に依存します。 かなり合理的に尋ねることができます:「2つの文字のどちらを代替するかをまだ決めていない場合、4つの位置にどのように依存しますか?」、それは非常に簡単です:シンボル自体ではなく、シンボルのグループなどに依存します。 e。 0と1-最初のグループ、2と3-2番目のグループなど(表5を参照)。 3番目の位置のシンボルは同じグループを持ちますが、1つのシンボルのみで構成されます。 奇数文字はまったくありません:0-最初のグループ、2-2番目のグループなど。 このグループの番号は、表5の最初の列にあります。



算術自体:式を評価する必要があります

{3} + {4}-2

ここで、{3}および{4}は、それぞれ位置3および4の文字グループの番号です(表5を参照)。

4の倍数であることが判明した場合、4nによる除算の余り(nは正の整数)が1の場合は最初のマスクを選択し、2の場合は2番目、3番目の場合は3番目、4番目のマスクを選択します。



例に戻ると、位置3および4に「 40 」がありました。

4-3番目のグループ、0-最初のグループ(表5を参照)。

{3} + {4}-2 = 3 + 1-2 = 2です。

4nによる除算の残りは2です。これは、オートバイのマスクを3を選択することを意味します。

したがって、5番目のオートバイでは、パスワードの6番目の位置に記号「 9 」があります。



ファイナルジャーク


最後のステップ、つまり、4番目の位置に2つの文字のいずれかを選択します。 ここで問題が発生しました...私の脳は、それを簡単かつ明確に説明しようとすることですでに沸騰していました。 それは説明しません...



一般的に見てください。



画像

表7. 4つのパスワード位置の文字選択



4つのマスクのいずれか、たとえば最初のマスク、つまり紫の部分を見てみましょう。 シンボルは、そのまま2つにグループ化されています。バイオレット、下のバイオレット、右にシフト、再び2つのバイオレット、左にシフト、再び2つのバイオレットなどです。 したがって、このグループの各最初の文字が1に対応し、2秒ごとに対応することを想像してみましょう。 最初のマスクを上から下に見て:1、2、1、1、2、1、2 ... 2番目から2、1、2、1、2などになります。 本質が明確であることを願っています。 これらのユニットとデュースは何のためですか? しかし、何に。 この例では、0と1から4番目の位置にある文字を選択します(「 40 」文字3と4があることを思い出します。4は常に自分自身ですが、0はまだ最終的なものではありません。表5))。 また、3番目のマスクがあることもわかっています(上記の式を計算しました)。 したがって、3つのマスクを見て、グループ(0と1)を見つけます。これは上からの最初のマスクです。 計算したばかりの彼女は1に対応しているため、このグループの最初のキャラクター、つまり 「 0 」。



清潔さの別の例を考えてみましょう:2番目のマスクを使用して、CとDから4番目の位置のシンボルを選択します。2つのマスクを見てみましょう。CとDは紫色の垂直ブロックの2番目であるため、2番目のシンボルを選択します。 「 D 」。



最後に



前菜の場合、8番目の位置を離れました。

xxxx xxx M

ここではすべてが明らかです-これはチェックサムです。 最初の7つの位置をそれぞれ変更すると、何らかの形で影響します。 残念ながら、計算のためのアルゴリズムを提供することはできません。 そして彼は仕事のメカニズムを明らかにするのにあまりにも多くの時間を費やし、さらに多くの理論があったでしょう。 はい、そして私は記事がすでに下品な次元に広がっているのではないかと心配しています。 したがって、パスワードの最初の7つの位置に何らかの形で依存するチェックサムがあるという事実だけを考えてください。



結論の代わりに



あなたが実際にこの場所を読んで何か他のものを理解したなら、あなたは本当のヒーローです;)

紙ですべてを説明するのは非常に難しく、一貫性のないナンセンスであることが判明しましたが、実際、少し考えて理解しようとすると、理論は非常に簡単です。 可能な限りすべてを非常に簡単かつ明確に表示できるように最善を尽くしました。 少なくともそれが少し起こったことを願っています。 不明な点がある場合は、コメント欄で質問してください-回答します。



この記事は何のためにあり、誰がそれを必要としていますか?


ここで紹介するアルゴリズムは、実際の暗号化の基本を理解するのに役立ち、実際に人々の関心を満たします。 また、セガでのお気に入りの16ビットレースの時代にノスタルジックな人々にこの記事を読むのが面白いことを願っています。



そして最後に、小さなボーナス。 誰かが突然プレイしたい場合に備えて、ブラインドパスワードジェネレーター。



画像

ダウンロードする

ダウンロード2

ダウンロード3



すでにお読みになっているように、8文字はそうではありませんが、そうではありませんが、最大32個のオプションを手作業ですばやく選別することは難しくありません。



PSコンピューターでセガをプレイするには、エミュレーター(私はWGensを使用しています)とゲームラム自体が必要です。 すべてが問題なくインターネット上にあります。

PPS 2018 FIFAワールドカップを開催する権利を獲得したすべてのロシア人と隣人におめでとうございます!



ご清聴ありがとうございました。Habrのオープンスペースでお会いしましょう



All Articles