Как выполнить бинарную бомбу CMU в Ubuntu Linux?

Я пытаюсь сделать бинарную бомбу CMU как самостоятельный проект, чтобы изучить сборку x86 и реверс-инжиниринг. (Это не автоматическая версия, привязанная к классу.)

Я скачал bomb.tar с http://csapp.cs.cmu.edu/public/labs.html.

Из описания лаборатории CMU:

"Бинарная бомба" - это программа, предоставляемая студентам в виде файла объектного кода. При запуске он предлагает пользователю ввести 6 различных строк. Если что-то из этого неверно, бомба "взрывается", печатая сообщение об ошибке и регистрируя событие на сервере оценок. Студенты должны "обезвредить" свою уникальную бомбу, разобрав и перепроектировав программу, чтобы определить, какими должны быть 6 струн. Лаборатория учит студентов понимать язык ассемблера, а также заставляет их учиться использовать отладчик. Это также очень весело. Легендарная лаборатория среди студентов КМУ.

Вот бинарная бомба Linux/IA32, которую вы можете попробовать сами. Функция, которая уведомляет сервер оценки, была отключена, поэтому не стесняйтесь взрывать эту бомбу безнаказанно.

После сохранения в соответствующую папку я запустил эту команду в Терминале:

tar xvf bomb.tar
  1. Он извлек файл с именем bomb (без расширения файла), но я думал, что это также даст мне bomb.c, что также будет полезно для справки.

  2. Я не могу заставить "бомбу" бежать. Вот что я попробовал:

    bomb
    bomb: command not found
    
    ./bomb
    bash: ./bomb: No such file or directory
    
  3. Хотя я понимаю, что для его решения нужно пройти через GDB, но я не могу даже запустить его в BASH и взорвать себя неправильными ответами! Небольшая помощь была бы фантастической.

3 ответа

Как и предполагали другие ответы, это кажется проблемой совместимости архитектуры процессора. Мне удалось решить эту проблему в 64-битной Ubuntu 15.04, установив пакеты, расположенные на AskUbuntu.com Как запускать 32-битные программы в 64-битной системе [дубликат]

В частности, помогла следующая команда.

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

Так как Фабио А. Корреа бежал file на бомбе и обнаружил, что это был 32-битный исполняемый файл LSB, кажется, что это вызвано отсутствующими скриптами LSB, которые должны быть загружены при запуске.

Просто работает sudo apt-get install lsb-core это исправлю. После этого ldd bomb тоже будет работать.

Обновить:

В дальнейшем ldd (после того, как все готово к LSB) показывает, что это на самом деле вызвано libc.so.6 => /lib32/libc.so.6, который является libc архитектуры i386. Вы можете попробовать установить libc6-i386 пакет прямо вместо.

После этого вы можете запустить disassemble func_name в вашем GDB напрямую. Со всеми сохраненными символами вы можете видеть названия функций напрямую. strings может помочь вам тоже

Кстати, этот вопрос должен быть поставлен в Unix&Linux, я думаю.

file bomb сообщает:

ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped

Вы должны быть в состоянии запустить его на bash, набрав:

tar xvf bomb.tar
chmod +x bomb
./bomb

Работало у меня на 64-битной Kubuntu 14.04.

Другие вопросы по тегам