c - 二元炸弹第三阶段问题

标签 c assembly binary-bomb

我正在尝试完成一个二进制炸弹练习,并且我已经完成了前两个阶段,但我仍然不知道如何解决它,因为我找到的所有指南都具有不同的汇编代码,并且没有相同的变量。我并不是要求某人为我解决问题或任何事情,只是如何真正找到答案(即我需要尝试哪些命令或要关注的变量)。

我尝试在使用 x/s ___ 时查找与十六进制字母相对应的变量,但我没有运气让它与小写字母相对应。我自己尝试了 3 个小时来弄清楚这个阶段,但没有成功。这是第 3 阶段的汇编语言:

08048c17 <phase_3>:
 8048c17:   55                      push   %ebp
 8048c18:   89 e5                   mov    %esp,%ebp
 8048c1a:   83 ec 28                sub    $0x28,%esp
 8048c1d:   8d 45 f0                lea    -0x10(%ebp),%eax
 8048c20:   89 44 24 0c             mov    %eax,0xc(%esp)
 8048c24:   8d 45 f4                lea    -0xc(%ebp),%eax
 8048c27:   89 44 24 08             mov    %eax,0x8(%esp)
 8048c2b:   c7 44 24 04 7e 94 04    movl   $0x804947e,0x4(%esp)
 8048c32:   08 
 8048c33:   8b 45 08                mov    0x8(%ebp),%eax
 8048c36:   89 04 24                mov    %eax,(%esp)
 8048c39:   e8 a2 f9 ff ff          call   80485e0 <__isoc99_sscanf@plt>
 8048c3e:   83 f8 01                cmp    $0x1,%eax
 8048c41:   7f 05                   jg     8048c48 <phase_3+0x31>
 8048c43:   e8 09 02 00 00          call   8048e51 <explode_bomb>
 8048c48:   83 7d f4 07             cmpl   $0x7,-0xc(%ebp)
 8048c4c:   8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi
 8048c50:   77 6a                   ja     8048cbc <phase_3+0xa5>
 8048c52:   8b 45 f4                mov    -0xc(%ebp),%eax
 8048c55:   ff 24 85 e0 93 04 08    jmp    *0x80493e0(,%eax,4)
 8048c5c:   b8 00 00 00 00          mov    $0x0,%eax
 8048c61:   eb 52                   jmp    8048cb5 <phase_3+0x9e>
 8048c63:   b8 00 00 00 00          mov    $0x0,%eax
 8048c68:   eb 46                   jmp    8048cb0 <phase_3+0x99>
 8048c6a:   b8 00 00 00 00          mov    $0x0,%eax
 8048c6f:   90                      nop
 8048c70:   eb 39                   jmp    8048cab <phase_3+0x94>
 8048c72:   b8 00 00 00 00          mov    $0x0,%eax
 8048c77:   eb 2d                   jmp    8048ca6 <phase_3+0x8f>
 8048c79:   b8 00 00 00 00          mov    $0x0,%eax
 8048c7e:   66 90                   xchg   %ax,%ax
 8048c80:   eb 1f                   jmp    8048ca1 <phase_3+0x8a>
 8048c82:   b8 00 00 00 00          mov    $0x0,%eax
 8048c87:   eb 13                   jmp    8048c9c <phase_3+0x85>
 8048c89:   b8 6d 03 00 00          mov    $0x36d,%eax
 8048c8e:   66 90                   xchg   %ax,%ax
 8048c90:   eb 05                   jmp    8048c97 <phase_3+0x80>
 8048c92:   b8 00 00 00 00          mov    $0x0,%eax
 8048c97:   2d c5 02 00 00          sub    $0x2c5,%eax
 8048c9c:   05 94 03 00 00          add    $0x394,%eax
 8048ca1:   2d e2 00 00 00          sub    $0xe2,%eax
 8048ca6:   05 e2 00 00 00          add    $0xe2,%eax
 8048cab:   2d e2 00 00 00          sub    $0xe2,%eax
 8048cb0:   05 e2 00 00 00          add    $0xe2,%eax
 8048cb5:   2d e2 00 00 00          sub    $0xe2,%eax
 8048cba:   eb 0a                   jmp    8048cc6 <phase_3+0xaf>
 8048cbc:   e8 90 01 00 00          call   8048e51 <explode_bomb>
 8048cc1:   b8 00 00 00 00          mov    $0x0,%eax
 8048cc6:   83 7d f4 05             cmpl   $0x5,-0xc(%ebp)
 8048cca:   7f 06                   jg     8048cd2 <phase_3+0xbb>
 8048ccc:   3b 45 f0                cmp    -0x10(%ebp),%eax
 8048ccf:   90                      nop
 8048cd0:   74 05                   je     8048cd7 <phase_3+0xc0>
 8048cd2:   e8 7a 01 00 00          call   8048e51 <explode_bomb>
 8048cd7:   c9                      leave  
 8048cd8:   c3                      ret    


这是我为第 3 阶段提供的指南,它似乎非常有值(value),但考虑到不同的变量/值,我无法理解如何将其应用到我的代码中。以下是我认为最相关部分的屏幕截图,以及这些屏幕截图下方指南的完整链接:Introductory guide

Guide part 1

Guide part 2

Here is a full link to the guide

目标是先有一个数字,后跟一个小写字母,然后再跟一个数字(例如 1 v 240 或 4 b 60)。但我找不到任何数字或字母。

最佳答案

原来我的方法是错误的,问题实际上是在寻找一对没有字母的数字。对于那些想知道的人,我通过遵循 De Dycker 建议的 scanf 组装部分找到了解决方案,并最终绘制了第一个数字,然后通过反复试验找到了第二对。

关于c - 二元炸弹第三阶段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57057728/

相关文章:

c - Misra 警告 C 代码 - if 循环中 boolean 值和无符号值的比较

检查文件是否是c文件并编译它

c - 二维数组是否需要事先知道它在 C 中的大小?

c++ - 简单 for 循环的意外无意义优化尝试(在 Visual C++ 2017 中)

c - 二进制炸弹的汇编代码困惑

c - 从 C 程序连接 PostgreSql 需要哪些库?

c - FOPEN_MAX 和 _SC_OPEN_MAX

c++ - linux下计算周期数

c - 了解二进制炸弹第二阶段的汇编代码

assembly - 二元炸弹 - 第 4 阶段