最初の試み
まず、ユーザーデータファイルが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メソッドを見つけました。 それらとそれらの使用のコンテキストの研究は、ユーザーデータのロード/保存の手順がどのように進行するかを示しました。
ブート時のデータの読み取りは、次のアルゴリズムに従って実行されます。
- 最初に、player1.plrファイルがplayer1.plr.datに復号化されます
- 次に、player1.plr.datからデータが読み取られ、RAMに書き込まれます(ファイルサイズ<1KB)
- これらの手順の後、player1.plr.datファイルは削除されます。
データを記録する手順は逆の順序で似ています:
- RAMからplayer1.plr.datへのデータの書き込み
- player1.plrのPlayer1.plr.dat暗号化
- Player1.plr.datの削除
このようなアルゴリズムを見ると、すべての「グッズ」がplayer1.plr.datファイルに含まれていることが明らかになります。 しかし、残念なことに、彼とのすべてのアクションは非常に迅速に発生するため、「Explorer」で彼に気付く時間すらありません。 そして、与えられたファイルを削除する関数がソースで見つかりました。 この機能をコメントアウトし、ファイルを再構築することにより、目標が達成されました。
ところで、ファイルを再構築するには、まだ実行中のコンソールに次のコマンドを入力しました。
ilasm.exe Terraria.il /exe /out:Terraria.exe
さて、ゲームを開始した後、player1.plr.datファイルがようやく手元にあります。
予想どおり、すべての利点があります。
個人使用
さて、私たちはファイルを取得しました、そして今それを理解してみましょう。
私はそこのすべてを理解していませんでしたが、ここに私が理解したことがあります:
これはユーザーファイルであるため、ユーザーに関するデータが含まれています。最初はニックネームの長さ(赤)、次にニックネーム自体(緑)です。 次に、ゲーム終了時のキャラクターの「健康」(ピンク)と、通常は最大の健康の価値(茶色)があります。
その後、キャラクターの「装備」、彼の「アクセサリー」、インベントリーの内容に関する情報があります。これは次のように説明されています。
- まず、アイテム名のバイト単位の長さ(赤)
- 次に、名前自体(緑色)。 ところで、この名前は公式のwikiプロジェクトから簡単にコピーできます
- その後、このアイテムのユニット数(オレンジ)
- 最後に、次のインベントリアイテム(青)に3バイトのインデントをインデントします。
在庫に複数の(n)空きセルがある場合、n * 5ゼロバイトが挿入されます(これは、ゼロ+アイテム数、0 +インデント3ゼロバイトに等しい名前の長さです)。
ただし、ファイルを「読み取る」だけでなく、独自の目的で使用する必要もあります。 これを行うために、プロシージャコールは単にコメント化され、ソースファイルplayer1.plrを復号化し、player1.plr.datを上書きします。 したがって、読み取りは常にplayer1.plr.datファイルから行われ、削除されません。 したがって、元のplayer1.plrを気にせずに変更を加えることができます。画像が損なわれることはありません。
おわりに
私のスクリーンショットからわかるように、私は自分自身を「クールな小さなもの」にして、マルチプレイヤーでそれらと遊んだ。 しかし、それはすぐに退屈し、ゲームへの関心は完全に枯渇しました。 試験の準備が続きます!