如何在Ubuntu Linux中执行CMU二进制炸弹?

问题描述:

我正在尝试将CMU的二进制炸弹作为一个独立的项目来学习一些x86汇编和逆向工程。 (这不是一个自动分级的版本绑定到一个类。)如何在Ubuntu Linux中执行CMU二进制炸弹?

我从http://csapp.cs.cmu.edu/public/labs.html下载了bomb.tar。

从CMU的实验室描述:

“二进制炸弹”是提供给学生作为对象代码 文件的程序。运行时,它会提示用户输入6个不同的字符串。如果 其中任何一个都不正确,则炸弹“爆炸”,打印错误 消息并将事件记录在分级服务器上。学生必须 通过拆分和反转 “程序化”他们自己独特的炸弹来确定6个字符串应该是什么。 实验室教导学生了解汇编语言,并强制他们学习如何使用调试器。这也很有趣。 CMU本科生中有传奇的 实验室。

这是Linux/IA32 binary bomb,你可以自己尝试。 功能,通知分级服务器已被禁用,所以感觉 免费爆炸这个炸弹逍遥法外。

将其保存到相应的文件夹后,我跑在终端命令:

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它和我吹了错误的答案呢!一点帮助将是太棒了。

+0

我们不知道该档案中有什么,即使能够下载它 - 我不会推荐它,因为上帝知道它在里面。最佳行动方案将是联系该档案的作者。 – 2014-10-18 05:17:35

+1

在Ubuntu 14.04.1 LTS,64位AMD上工作良好。 ./bomb跑过炸弹。炸弹说:“欢迎来到我的恶魔般的小炸弹。你有6个阶段可以让你自杀。祝你有美好的一天!'。按'CTRL + C'键禁用炸弹'所以你认为你可以用ctrl-c停止炸弹,是吗?嗯... OK。 :-)' – Paul 2014-10-18 06:21:01

+4

你没有得到'bomb.c'的原因是它包含了赋值的答案,或者使赋值更容易。 – Paul 2014-10-18 06:26:04

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 

您应该能够通过输入庆典上运行:

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

它的工作在我的64位的Kubuntu 14.04。

+0

嗯.. 。甚至在运行chmod命令后,我得到“bash:./bomb:没有这样的文件或目录”也许我需要更新我的Ubuntu .... – Seaver 2014-10-20 02:09:03

+0

这很奇怪。那个可执行文件是从2002年开始的,你有哪些Ubuntu? 'gdb。/ bomb'是否适合你? – 2014-10-20 02:18:25

+0

现在我正在运行Ubuntu 12.04.4 LTS。当我告诉它“gdb ./bomb”时,它会给我一个(gdb)提示。当我告诉它“运行”时,它说启动程序:/ home/seaver/bomb3/bomb/bin/bash:/ home/seaver/bomb3/bomb:没有这样的文件或目录在启动程序中退出代码127. – Seaver 2014-10-21 05:48:50

由于法比奥A.科雷亚的炸弹跑了file,发现这是一个32位的LSB可执行文件,它似乎是由它在启动时加载一些丢失LSB脚本引起的。

只需运行sudo apt-get install lsb-core即可解决此问题。这样做后,ldd bomb也将工作。

更新:

而且ldd表明,它实际上是由一些inexist libc.so.6 => /lib32/libc.so.6,这是i386架构的libc中引起的(获得LSB东西准备好后)。您可以直接尝试直接安装libc6-i386包。

之后,您可以直接在gdb中运行disassemble func_name。保留所有符号后,您可以直接看到函数的名称。 strings也可能对您有所帮助。

顺便说一句,这个问题应该放在Unix & Linux中,我猜。

+0

感谢您的跟进,@ 2gluxon和@ Arthur2e5!自从VM在几个月前死亡以来,我无法测试这些答案,但是我将保留32与64位兼容性以备将来参考:) – Seaver 2015-07-16 14:12:21

+1

当您在ELF文件上使用'file'命令时, “32位”或“64位”是字节顺序:“LSB”(最低有效字节在前)或“MSB”(最高有效字节在先)。所有的i386可执行文件都是小端的,所以它们都被识别为LSB。这与你正在考虑的其他LSB完全无关。 – 2016-04-05 13:43:52

正如其他答案所建议的,这似乎是CPU架构兼容性问题。我能够通过安装位于AskUbuntu.com的软件包在Ubuntu 15.04 64位上解决此问题。How to run 32-bit programs on a 64-bit system [duplicate]

具体而言,以下命令有所帮助。

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0