Чтобы узнать немного больше о системах FreeBSD и * nix в целом, я начинаю смотреть на двоичные файлы из игры DEFCON 17 Capture The Flag. Прямо сейчас я переворачиваю двоичный код tucod. Вот, возможно, полезная информация о tucod:
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!»), Он будет играть в игру зависшего человека. с тобой.
Проблема, с которой я сталкиваюсь, заключается в том, что я не достигаю своих точек останова в 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 не достигнет моих контрольных точек? Или есть что-то важное, что я просто пропускаю?
Для всех, кто заинтересован в том, чтобы увидеть бинарный файл из первых рук, доступен торрент со всеми игровыми двоичными файлами.