2009-10-04 15 views
5

Aby dowiedzieć się nieco więcej o systemach FreeBSD i * nix ogólnie, zaczynam patrzeć na pliki binarne z gry DEFCON 17 Capture The Flag. Teraz odwracam plik binarny tucod. Oto niektóre potencjalnie użyteczne informacje na tucod:gdb nie trafiając w pułapki

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

Niektóre inne ewentualnie użyteczne informacje uzyskane od jakiegoś krótkiej analizy statycznej że tucod wiąże na porcie 0xDEAD (słodkie, prawda?), A jeśli dać mu specyficzny hasło ("HANGEMHIGH ! ") będzie grać z tobą w hang-man.

Problem, który napotykam, polega na tym, że nie trafię do moich punktów przerwania w gdb. W szczególności punkt przerwania, który próbuję osiągnąć, znajduje się w kodzie obsługującym połączenie klienta. Bez punktów przerwania kod jest wykonywany zgodnie z oczekiwaniami. Kiedy ustawiam punkt przerwania na tym kodzie, dziecko wychodzi (zamiast włamać się do gdb, zgodnie z oczekiwaniami). Jeśli ustawię punkty przerwania, zanim serwer rozwali dziecko, mogę uderzyć w te grzywny, ale po naciśnięciu "kontynuuj" dziecko nie będzie kontynuować przetwarzania połączenia (to znaczy, nie będzie mnie pytać o hasło lub zagrać w hang-mana).

Od wideł demonów po odebraniu nowego połączenia, staram się powiedzieć gdb śledzić dziecko z tym poleceniem:

(gdb) set follow-fork-mode child 

Ale po single-stepping instrukcje po widelec, wydaje się, że to nie działa.

Próbowałem szukając połączeń do signal, myśląc, że wdrożone klasę obsługi SIGINT (lub podobne), ale tylko wezwanie do signal że widzę uchwyty SIGCHLD.

Mój punkt przerwania w gdb aktualnie wygląda tak:

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

I 0x080497d0 jest adres Chcę przełamać na w kodzie przetwarzania klient.

Jestem trochę nowy w analizowaniu oprogramowania w systemach * nix i mogę używać niektórych wskaźników. Co jeszcze powinienem zrobić, aby rozwiązać problem, dlaczego GDB nie trafi w moje punkty przerwania? A może jest coś ważnego, z którego właśnie wychodzę?

Dostępne jest torrent ze wszystkimi plikami binarnymi do gry dla osób zainteresowanych wyświetleniem binarnych informacji z pierwszej ręki.

Odpowiedz

2

Sprawdzić odpowiedź na here. W skrócie wygląda na to, że GDB obsługuje tryb debugowania dziecka tylko w systemach HP-UX i Linux.

+0

Dzięki! Obejście, które stosowałem, polegało na tym, że po prostu łatam plik binarny i sprawię, że rodzic wykona część dla dziecka. Dla mnie jest to prostsze niż próba dodania wezwania do uśpienia, ponieważ nie mam źródła. Ale wyjaśnienie tego, co się dzieje, było tym, czego naprawdę szukałem. Dzięki jeszcze raz. – mrduclaw

+0

@Nikolai przerwane łącze – nouveau