Terrariaゲームとその「良い」プロファイル暗号化システム

これらの日のうちの1つは、私が座って次の試験の準備をしていました。 しかし、同級生は私に彼をいっぱいにしたかった。 私がMinecraftスタイルのゲームの「アビッド」だったことを知って、彼は私にTerrariaゲームを投げました。 最初は彼女への興味が屋根をくぐり抜けましたが、少し後に、シングルプレーヤーゲームに関する私の意見の「惨めさ」のため、彼は落ち、マルチプレーヤーでプレイすることにしました。マルチプレイヤーのさまざまなサーバー上でもインベントリします。 これにより、インベントリでより「クールな」ものを収集することができました。 どのように達成されたか-カットの下で。



最初の試み


まず、ユーザーデータファイルがWinHexに送られ、そこから次の結果が得られました。







ここから、このファイルを「復号化」する簡単な方法は表示されません。

したがって、SYSInternalsのProcessMonitorが関係していました。 彼は、ユーザーファイルの暗号化にbcrypt.dllライブラリが使用されることを示しました。 このライブラリとそれが使用するアルゴリズムについて読んだ後、キーなしではファイルを復号化できないことが明らかになりました。 したがって、Terraria.exeファイルを逆アセンブルすることが決定されました。 まあ、少なくともアセンブラーのコードはこれにもっと光を当てると思います。 私はIDA Pro Advanced 6.1を使いたいと思っていましたが、彼らは時間通りに私を止めて、ゲーム自体が.Netで書かれているという事実で鼻を突きました。 それでもCILはアセンブラコードよりも解析簡単です。

したがって、このアクションのガイダンスを探して、私はavaverからこの記事を読みました 。 幸いなことに、Visual Studio 2010はコンピューターにインストールされ、必要なilasm.exeとildasm.exeが含まれていました。

私はこの記事にガイドされており、コマンドライン(MS Visual Studioグループの[スタート]メニューの項目から開く)を使いこなしました。



ildasm.exe Terraria.exe /source /out:Terraria.il







かなり理解しやすいCILコードを受け取った後、Player :: EncryptFileおよびPlayer :: DecryptFileメソッドを見つけました。 それらとそれらの使用のコンテキストの研究は、ユーザーデータのロード/保存の手順がどのように進行するかを示しました。



ブート時のデータの読み取りは、次のアルゴリズムに従って実行されます。

  1. 最初に、player1.plrファイルがplayer1.plr.datに復号化されます
  2. 次に、player1.plr.datからデータが読み取られ、RAMに書き込まれます(ファイルサイズ<1KB)
  3. これらの手順の後、player1.plr.datファイルは削除されます。


データを記録する手順は逆の順序で似ています:

  1. RAMからplayer1.plr.datへのデータの書き込み
  2. player1.plrのPlayer1.plr.dat暗号化
  3. Player1.plr.datの削除




このようなアルゴリズムを見ると、すべての「グッズ」がplayer1.plr.datファイルに含まれていることが明らかになります。 しかし、残念なことに、彼とのすべてのアクションは非常に迅速に発生するため、「Explorer」で彼に気付く時間すらありません。 そして、与えられたファイルを削除する関数がソースで見つかりました。 この機能をコメントアウトし、ファイルを再構築することにより、目標が達成されました。

ところで、ファイルを再構築するには、まだ実行中のコンソールに次のコマンドを入力しました。



ilasm.exe Terraria.il /exe /out:Terraria.exe







さて、ゲームを開始した後、player1.plr.datファイルがようやく手元にあります。

予想どおり、すべての利点があります。







個人使用


さて、私たちはファイルを取得しました、そして今それを理解してみましょう。

私はそこのすべてを理解していませんでしたが、ここに私が理解したことがあります:







これはユーザーファイルであるため、ユーザーに関するデータが含まれています。最初はニックネームの長さ(赤)、次にニックネーム自体(緑)です。 次に、ゲーム終了時のキャラクターの「健康」(ピンク)と、通常は最大の健康の価値(茶色)があります。



その後、キャラクターの「装備」、彼の「アクセサリー」、インベントリーの内容に関する情報があります。これは次のように説明されています。



在庫に複数の(n)空きセルがある場合、n * 5ゼロバイトが挿入されます(これは、ゼロ+アイテム数、0 +インデント3ゼロバイトに等しい名前の長さです)。

ただし、ファイルを「読み取る」だけでなく、独自の目的で使用する必要もあります。 これを行うために、プロシージャコールは単にコメント化され、ソースファイルplayer1.plrを復号化し、player1.plr.datを上書きします。 したがって、読み取りは常にplayer1.plr.datファイルから行われ、削除されません。 したがって、元のplayer1.plrを気にせずに変更を加えることができます。画像が損なわれることはありません。



おわりに


私のスクリーンショットからわかるように、私は自分自身を「クールな小さなもの」にして、マルチプレイヤーでそれらと遊んだ。 しかし、それはすぐに退屈し、ゲームへの関心は完全に枯渇しました。 試験の準備が続きます!



All Articles