2009-10-04 68 views
5

为了更全面地了解FreeBSD和* nix系统,我开始研究DEFCON 17 Capture The Flag游戏中的二进制文件。现在,我正在扭转tucod二进制。下面是关于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 !“)它会和你一起玩一个hang手game脚的游戏。

我遇到的问题是我没有在gdb中找到我的断点。特别是,我试图达到的断点是在处理客户端连接的代码中。没有断点,代码按预期执行。当我在该代码上设置断点时,该孩子退出(而不是像预期的那样陷入gdb)。如果我在服务器断开孩子之前设置了断点,我可以击中那些罚款,但在点击“继续”之后,孩子不会继续处理我的连接(也就是说,它不会要求我输入密码或玩hang子手)。

因为当它收到一个新的连接守护叉,我试图告诉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 2009-10-07 17:46:28

+0

@Nikolai断开链接 – nouveau 2017-02-18 01:27:10