2009-10-04 5 views
5

FreeBSD와 * nix 시스템에 대해 더 많이 배우려면 DEFCON 17 깃발 캡처 게임에서 바이너리를 살펴보기 시작합니다. 지금, 나는 tucod 바이너리를 뒤집을거야.gdb가 중단 점을 누르지 않음

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

몇 가지 간단한 정적 분석에서 얻은 몇 가지 다른 가능성 유용한 정보가 tucod입니다 (어, 귀여운?) 포트 0xDEAD에 결합하여 당신이 그것을 특정 암호를 제공하는 경우 ("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

대답은 here입니다. 즉, GDB는 HP-UX 및 Linux에서만 하위 디버그 모드를 지원합니다.

+0

고마워요! 내가 이것을 위해 사용했던 방법은 바이너리를 패치하고 부모가 자식 부분을 실행하게하는 것이었다. 나를 위해, 이것은 소스가 없으므로 잠을 자려고하는 것보다 간단합니다. 그러나 무슨 일이 일어나고 있었는지에 대한 설명은 내가 정말로 찾고있는 것이었다. 다시 한번 감사드립니다. – mrduclaw

+0

@Nikolai 깨진 링크 – nouveau