7

我正在尝试将 CMU 的二进制炸弹作为一个独立项目来学习一些 x86 汇编和逆向工程。(它不是与课程相关的自动评分版本。)

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

来自 CMU 的实验室描述:

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

这是一个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 中运行它并用错误的答案让自己大吃一惊!一点帮助会很棒。

4

3 回答 3

1

由于Fabio A. Correa在炸弹上运行file并发现它是一个 32 位 LSB 可执行文件,这似乎是由于缺少一些应该在启动时加载的 LSB 脚本造成的。

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

更新:

进一步ldd(在准备好 LSB 之后)表明它实际上是由一些 inexist 引起的libc.so.6 => /lib32/libc.so.6,这是 i386 架构的 libc。您可以尝试libc6-i386直接安装该软件包。

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

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

于 2015-06-11T10:07:38.397 回答
1

正如其他答案所暗示的那样,这似乎是 CPU 架构兼容性问题。通过安装位于 AskUbuntu.com如何在 64 位系统上运行 32 位程序的软件包,我能够在 64 位 Ubuntu 15.04 上解决此问题 [重复]

具体来说,以下命令有所帮助。

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
于 2015-06-30T03:41:26.193 回答
0

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。

于 2014-10-19T23:40:45.530 回答