Как выполнить бинарную бомбу CMU в Ubuntu Linux?
Я пытаюсь сделать бинарную бомбу CMU как самостоятельный проект, чтобы изучить сборку x86 и реверс-инжиниринг. (Это не автоматическая версия, привязанная к классу.)
Я скачал bomb.tar с http://csapp.cs.cmu.edu/public/labs.html.
Из описания лаборатории CMU:
"Бинарная бомба" - это программа, предоставляемая студентам в виде файла объектного кода. При запуске он предлагает пользователю ввести 6 различных строк. Если что-то из этого неверно, бомба "взрывается", печатая сообщение об ошибке и регистрируя событие на сервере оценок. Студенты должны "обезвредить" свою уникальную бомбу, разобрав и перепроектировав программу, чтобы определить, какими должны быть 6 струн. Лаборатория учит студентов понимать язык ассемблера, а также заставляет их учиться использовать отладчик. Это также очень весело. Легендарная лаборатория среди студентов КМУ.
Вот бинарная бомба Linux/IA32, которую вы можете попробовать сами. Функция, которая уведомляет сервер оценки, была отключена, поэтому не стесняйтесь взрывать эту бомбу безнаказанно.
После сохранения в соответствующую папку я запустил эту команду в Терминале:
tar xvf bomb.tar
Он извлек файл с именем
bomb
(без расширения файла), но я думал, что это также даст мнеbomb.c
, что также будет полезно для справки.Я не могу заставить "бомбу" бежать. Вот что я попробовал:
bomb bomb: command not found ./bomb bash: ./bomb: No such file or directory
Хотя я понимаю, что для его решения нужно пройти через 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.