2016-06-16 10 views
0

IDAとチートエンジンがあります。私がやろうとしているのは、実際にはウィンドウの幅と高さだけでアプリケーションの解像度を変更することです。ちょうど幅と高さを変更してもアプリケーションは正しく動作しませんが、ディスアセンブラを理解するのは私の最初のステップです。 長い検索ではなく、CreateWindowEx関数が見つかりました。私は、アプリケーションがウィンドウを作成し、ディスアセンブラでウィンドウの幅と高さを変更する

push 1E0h 
push 280h 
….   ;some code 
mov esi, ds:GetSystemMetrics 
push 0  ;nIndex 
call esi  ;GetSystemMetric 
push 1  ;nIndex 
move edi,eax 
call esi  ;GetSystemMetrics 
...   ;somecode 
call ds:CreateWindowExA 

push 1E0h = 480 = 640 push 280hたようまあ、見えます。うーん、幅と高さを見つけたように見えるので、一定の住所があり、それを変えようとする。 (実際に検索することで、私はこの定数で2つの場所を見つけることができます。しかし、それらのすべてはウィンドウを作成するためには使用されず、ウィンドウの幅と幅を変更しようとしているので、アプリケーションを実行し、エンジンを騙す。

進値:280(1E0) スキャンタイプ:正確な値 タイプ:

最初のスキャンを4バイト:私たちのアドレスにさえ近いそれらのアドレス以外のリストで33

表情を発見しましたIDAにいたそして私が正しく理解するならば、チートエンジンは、Idaがコードを分析してアドレスを見つける間に、アプリケーションを実行するために使用されるメモリからアドレスを取得するためです。私が正しく言ったのか間違ったのか分かりません。あなたの側からの説明は良いでしょう。しかし問題はそれにありません。

アドレスを手動で追加できます。私たちはそれを得ました。この住所の価値は163944です。何ですか? 16進数:00028068を見てみよう。私は280を見ているが、68はどこから来たのだろうか?高さ:122984-> 0001E068を見てみましょう。

だから今私はそれがなぜそうなのか疑問を持っていますか?最終的にこの68がどこから来たのですか? 1E0は1E068の等価ではありません。私が間違っている?私が逃した何か提案。

[OK]をもう一度、変更してみましょう。私は16進数で50068と3C068の2種類を結びました。そして、68がなければ、実際には(私の意見では:))と思われます。彼らの誰も働いていない、まあ私はそれはおそらくアプリケーションの使用後定数ポインタ(私は思うが、おそらく私は間違っている)だと思う。だから私もポインタを変更する必要があります。 このアドレスにアクセスするものを見つけましょう。さて、私は問題を抱えていますが、このアドレスに何がアクセスしているかを知るための単純な方法で、アプリケーションの状態を変更する必要があります。値= 5、値の値を3に変更するボタンをクリックし、そのアドレスへのアクセス。しかし、私の場合、ウィンドウはすでに作成されており、このリストを取得する方法はわかりません。だから、今のところ私はこの点で固執しています。私は何かを忘れているかもしれません。しかし、どの方向への移動や、何が間違っていたかについての示唆は役に立ちます。

答えて

0

ここにいくつかの指摘があります。

  1. IDAのアドレスは、実行可能ファイルのIDAの読み取りに基づいています。プログラムがOSによってロードされると、別のメモリ位置に常駐します(ほとんどの場合)。だから、IDAのあなたの住所は、メモリの住所とは違うでしょう。ベースアドレスからのオフセットは、常に同じにする必要があります。
  2. あなたの16進数の値はちょうど2バイトを占めるかもしれません。あなたのアーキテクチャはリトルエンディアンだと思います。したがって、68はあなたの実際の値に関連するものではなく、異なる変数です。
関連する問題