2

だから私はいくつかのコード(バイナリ爆弾ラボ)を逆アセンブルしていて、何が起こっているのかを理解するのに助けが必要です。

IDAのスクリーンショットは次のとおりです。

ここに画像の説明を入力してください

(以下にいくつかのジャンプテーブルと別の比較がありますが、私はそのことについてもう少し快適に感じます(私は思う))

今、私が読​​んだように、私はこのフェーズで何が起こっているのかを知っていると思います:

http://teamterradactyl.blogspot.com/2007/10/binary-bomb.html(フェーズ3までスクロールダウン)

しかし、私は別の形式のアセンブリに慣れています。

私が理解していない最大のことは、このすべてのvar_28 = dwordptr-28hのものが一番上にあることです。

sscanfが呼び出されると、各トークンをどこに置くかをどのようにして知ることができますか?そして、トークンは3つしかありません(上記のリンクは、%d、%d ...が表示されていますが、おそらく2つですが、3つだと思います)。基本的に、sscanfが呼び出された後、これらのvar_x(およびarg_0)のそれぞれが何を指すかを誰かに教えてもらえますか?

それらはスタックポインタへの相対的なアドレス指定です...?しかし、これらのアドレスはどのようにしてsscanfからのトークンで満たされるのでしょうか。

注:これは宿題ですが、廃止されたか何かのため、宿題タグを追加しないように指示されています。宿題は、各フェーズを通過するためにコマンドラインを介して入力する秘密のフレーズを理解することです。

注2:IDAの使い方がよくわかりません。友人から、IDAで爆弾ファイルを開くように言われました。IDAで実験して理解する簡単な方法があるかもしれませんが、その方法はわかりません。

4

1 に答える 1

3

ローカル変数は、フレームポインタのすぐ下に格納されます。引数はフレームポインタの上にあります。x86は、フレームポインタとしてBP / EBP/RBPを使用します。

lea eax, [ebp+var_10]ナイーブな分解は、として分解するだけlea eax, [ebp-10h]です。この命令は、フレームポインタが指す場所より10h(16バイト)下のアドレスを持つローカル変数を参照しています。LEAは、実効アドレスのロードを意味します。で変数のアドレスをロードしている[ebp - 10h]ためeaxeaxその変数へのポインターが含まれています。

IDAは明らかにローカル変数に意味のある名前を付けようとしていますが、利用可能なデバッグ情報がないため、ダミー名を使用することになります。ともかく:

var_10= dword ptr -10h

var_10のエイリアスを作成したことをIDAが伝える方法にすぎません-10

于 2012-09-17T21:07:22.267 に答える