2

このアプリケーションは、サイト hackthissite.org での最初のアプリケーション チャレンジです。

アイデアは、シリアルを見つけることです。シリアル番号を入力して [OK] を押すと、チャレンジのパスワードが正しければメッセージ ボックスが表示されるか、シリアル番号が間違っているというメッセージが表示されます。課題を解決するには、0x1670FE のバイナリで平文のパスワードを見つける必要があります。

入力した文字列がバイナリのシリアルと比較されるIDA Proを見つけようとしていました。

比較されている場所を見つけたり、ジャンプを変更して間違ったパスワードを受け入れるようにしたり、任意のパスワードを受け入れるように変更したりしたいと考えています。

私はこれを行うことができないようです。メッセージ ボックスが表示される場所を見つけました (Messagebox を検索してブレークポイントを追加することにより)。ここで、"Sorry" または "Correct" 文字列のアドレスをスタックにプッシュします。

これらの文字列のアドレスとシリアル自体にブレークポイントを追加しようとしましたが、うまくいかないようです。IDA はこれらを文字列として認識していないようで、スティング ウィンドウには表示されません。

私もこの関数をたどろうとしましたが、それ以上戻ることができないように見えるところまで来ました。

ヘルプ、情報、またはヒントをいただければ幸いです。この種の問題を解決する方法を本当に知りたいです。

非常に基本的な質問でしたら申し訳ありません。

ありがとう。

4

2 に答える 2

2

IDA Pro を使用してこれを解決できなかったので、Ollydbg を使用して試してみました。

シリアルを「TEST」のように設定することで、認証を押した後、メモリ内またはシリアル自体でその文字列を見つけることができました。

シリアル メモリ アクセスにブレークポイントを設定することで、逆方向に作業し、2 つの文字列を比較する comparestring 関数を見つけることができました。

この後しばらくして、edx が 2 より大きいかどうかをチェックし、ジャンプを実行します。これを無条件ジャンプに設定すると、しばらくすると、文字列が同じ長さであるかどうかが再度チェックされるようになり、これも常に true に設定しました。

これで、入力内容に関係なく、プログラムがパスワードを提供します。

興味深いことに、5/6 の有効なシリアルがあるようです。メモリ内のシリアルから生成されるか、別の場所から取得される可能性があります。無効なシリアルを入力すると、一致するものが見つかるまで各シリアルと比較され、成功または失敗のメッセージ ボックスが表示されます。

IDA Pro でこれに対する答えを見つけることができなかったのは残念でしたが、ollydbg がこの仕事に適したツールだったと思います。

IDA に戻ってもう一度調べれば、おそらく小切手を見つけることができるでしょう。

于 2012-01-29T16:28:59.757 に答える
1

ヒントがありますが、おそらく気付いていないかもしれません。パスワードはプレーンテキスト形式であると言っています。
それで、バイナリ内の文字列を知る方法についてもっと見つけてみてください。
リバース エンジニアリングは、必ずしも逆アセンブラーまたはデバッガーで開くことを意味するわけではありません。
文字列、hexdump などのコマンドがあります。詳細はこちらをご覧ください。
それが役に立てば幸い。:)

于 2012-02-07T09:10:44.503 に答える