リバースエンジニアリングHogs of Warパート1

やる気



地方自治体によって甘やかされている休暇に関連して、あなたは何か面白いことに時間を取らなければなりません。 たとえば、古いおもちゃを扱うには、その横棒は現代のOSで通常プレイすることを許可しません。または、楽しみのためにいくつかのバイトを変更してさまざまな追加機能を取得します。 対象は、Hogs of Warと呼ばれる2000年からのゲームです。 誰も知らない場合、これはターンベースの戦略であり、豚のチームが与えられ、それを使用して世界を征服する必要があります。 ゲーム中に、結果に応じて、たとえば子豚のランクを上げるなど、各子豚を変更できます。 2009年に、AtariはHOW2開発という形でゲームの継続を発表しましたが、最近の報告によると、プロジェクトは資金不足のためキャンセルされました。 良いものはありません。



このパートの目的は、何らかの理由でappcrashが発生した場合にデスクトップ全体がロックされるバグを修正し、デバッグを簡素化するためにアプリケーションを画面モードで動作するように準備することです。



私は皆に警告したい:あなたはあなた自身の危険と危険で次のすべてをする。 著者は、記述された行為の再現の結果として生じたいかなる種類の損失に対しても責任を負いません。 説明されているすべてのアクションは、著者の猫によって実行されました。



ツール



デバッグには、IDA、MSDN、ida_patcher、DxWndが使用されました。 さらに詳しく。



準備する



そのため、 このようなデバッグの経験はないため、最初はすべてを直感的なレベルで行う必要があります。 まず、デバッガでバイナリファイルを開きます。これはwarhogs.exeです。 考えられるバグの原因:アプリケーションが異なる方法で正常に起動できないか、正しく機能しません。 デバッガーでは、Windowsウィンドウに何らかの形で関連しているインポートされた関数を調べ、そこではもちろん、CreateWindowExとEnableWindowを確認します。 最初の呼び出しが透過的である場合、それは数回発生しますが、2番目の呼び出しは恐らく恐ろしいです。 EnableWindow関数のコールポイントに移動し(合計2つあります)、次のコードを参照してください。







次のチームに関心があります。



.text:0044D0A0およびedx、0FFh

.text:0044D0A6 push edx; bEnable

.text:0044D0A7 push ecx; hWnd

.text:0044D0A8 call ds:EnableWindow



一部のウィンドウでは、この関数はEnableWindow(TRUE、...);の形式で呼び出され、一部のEnableWindow(FALSE、...);の形式では呼び出されます。 依存関係をジャンプアップし(完全に確実なロジックの関数に名前を付ける方がよい)、EnumWindowsが呼び出されたときにEnumFunc関数がコールバック関数として使用され、その後にコード0x61でSystemParametersInfo関数が呼び出されることがわかります。 短いグーグルは、このようにして著者がAlt-Tabの組み合わせをオフにしようとしたことを見つけることを可能にします。 これには関心がないので、オフセット.text + 0x0044D0A0でバイトを処理し、命令とedx、0FFhedx、0FFhに修正します。これにより、常にゼロではない最初のパラメーターでEnableWindow関数を呼び出すことができます。 EnableWindow関数への2番目の参照は、アプリケーションが閉じられたときに発生します。これは、作成者がビジネスを行った後に休戦を回復することを示します。 ここには何もありません。



もちろん、すぐにパッチを適用して結果を確認したいのですが、そこにはありませんでした! まず、次のような差分ファイルを生成する必要があります。



この差分ファイルはIDA Proによって作成されました

warhogs.exe

0004C4A1:E2 CA



次に、実行可能ファイルにパッチを適用するサードパーティのユーティリティが必要です。 これは、コンパイルされたソースida_patcher.cを使用して行われます。 結果のコンソールアプリケーションのパラメーターは次のとおりです。-i<binary_file_to_patch>、-p <.diff file>。 注意、警告は表示されないため、事前にバックアップを実行することをお勧めします。



アプリケーションを起動し、Alt-Tabを試して切り替えますが、warhogs.exeはすぐにappcrashになります。 原則として、なぜ彼らがコードに非常に多くの松葉杖を重ねたのかは驚くことではありません。 しかし、素晴らしいボーナスがあります。appcrash後、デスクトップがロックされないので、安全に作業を続けることができます!



次に、アプリケーションを画面モードで実行する必要があります。 情報を少し調べた後、次の手順を実行する2つの方法が見つかりました:1-アプリケーションコードを変更する(Direct3D 7で動作するようにコードを変更する)、および2-DxWndと呼ばれるサードパーティアプリケーションを使用して、warhogs.exeを画面モードで強制的に起動できるようにする



第二の方法を選択します より簡単です。 DxWndは、Direct3Dへの呼び出しをインターセプトします。

私たちは試してみました-それは判明しました! ウィンドウ間の切り替えは簡単で、warhogsは画面モードで安定して動作します。IDAはwarhogs.exeを静かに段階的にデバッグします。 すべてをエンジンの内部に深くする準備ができています。これについては次のパートで説明します。 すべての良い関係者!




All Articles