2009-10-04 9 views
5

FreeBSDと* nixシステムの一般的なことについては、DEFCON 17 Capture The Flagのバイナリを見ていきます。今、私はtucodバイナリを逆にしています。いくつかの簡単な静的解析から得られたいくつかの他の可能性の有用な情報が(えっ、かわいい?)tucodはポート0xDEADに結合することであるgdbがブレークポイントを打つことはありません

tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped 

と、あなたはそれを特定のパスワード(「HANGEMHIGHを与える場合:ここではtucod上のいくつかの可能性の有用な情報があります! ")それはあなたとハングマンの試合をするでしょう。

私が遭遇している問題は、私がgdbでブレークポイントに当たらないということです。特に、私が到達しようとしているブレークポイントは、クライアント接続を処理するコードにあります。ブレークポイントがないと、コードは期待どおりに実行されます。そのコードにブレークポイントを設定すると、(期待どおりにgdbに侵入するのではなく)子プロセスが終了します。サーバーが子をフォークする前にブレークポイントを設定すると、それらのヒットすることができますが、 "続行"を押すと子は接続を処理し続けません(つまり、パスワードを要求したり、ハングマンを再生しません)。デーモンフォーク以来

それが新しい接続を受信したとき、私は、このコマンドを使用して子を追跡するためにGDBを教えしよう:

(gdb) set follow-fork-mode child 

しかし、フォーク後の指示を単一のステッピング後に、それはこのように見えます動作していません。

signalへの呼び出しを試してみましたが、カスタムSIGINTハンドラ(または同様のもの)を実装していると思っていましたが、signalの呼び出しでSIGCHLDを処理できることがわかりました。 GDBで

私のブレークポイントは現在、次のようになります。

(gdb) info breakpoints 
Num Type   Disp Enb Address What 
1 breakpoint  keep y 0x080497d0 

そして0x080497d0は、私は、クライアントの処理コードに上壊したくアドレスです。

私は、* nixシステムのソフトウェアを分析するのに新しいのですが、いくつかのポインタを使うことができます。 GDBがブレークポイントに当たらない理由をトラブルシューティングするにはどうすればいいですか?または私はただ見落としているメジャーがありますか?

バイナリの最初の手を見ることに関心のある人のために、ゲームバイナリのすべてで利用できるtorrentがあります。

答えて

2

Lookをhereと答えてください。要するに、GDBは、HP-UXとLinuxでのみ子デバッグモードをサポートしているようです。

+0

ありがとうございます!このために私が採用した回避策はバイナリにパッチを当て、親プロセスに子プロセスの部分を実行させることでした。私にとって、これは、私がソースなしであるので、スリープへの呼び出しを追加しようとするより簡単です。しかし、何が起こっていたのかの説明は、私が本当に探していたものでした。再度、感謝します。 – mrduclaw

+0

@ニコライ壊れたリンク – nouveau

関連する問題