首页 > 解决方案 > 二进制相位 5 和四位索引

问题描述

我正在尝试解决二进制炸弹练习的第 5 阶段,该练习要求用户输入一个由 6 个字符组成的字符串才能继续。虽然我发现 6 个字符需要加起来的总和是0x3957,但是我无法理解这个过程。我为第 5 阶段找到的所有指南都建议从数组中选择 6 个总和为 0x1c/28 的数字,然后选择 6 个具有适当索引的字符作为“低 4 位”,但坦率地说,我不知道如何对应字母/字符到索引的低 4 位。

现在我从数组中有 6 个数字,总和为 28,分别是 1、3、4、5、6 和 9。但我不知道如何将这些对应于低 4 位。

这是第 5 阶段的代码,以防万一。

   0x08048b58 <+0>: push   %ebp
   0x08048b59 <+1>: mov    %esp,%ebp
   0x08048b5b <+3>: push   %edi
   0x08048b5c <+4>: push   %esi
   0x08048b5d <+5>: push   %ebx
=> 0x08048b5e <+6>: sub    $0x1c,%esp
   0x08048b61 <+9>: mov    0x8(%ebp),%ebx
   0x08048b64 <+12>:    mov    %ebx,(%esp)
   0x08048b67 <+15>:    call   0x8048d10 <string_length>
   0x08048b6c <+20>:    cmp    $0x6,%eax
   0x08048b6f <+23>:    je     0x8048b76 <phase_5+30>
   0x08048b71 <+25>:    call   0x8048e51 <explode_bomb>
   0x08048b76 <+30>:    mov    $0x0,%edx
   0x08048b7b <+35>:    mov    $0x0,%eax
   0x08048b80 <+40>:    mov    $0x8049400,%ecx
   0x08048b85 <+45>:    movsbl (%ebx,%eax,1),%esi
   0x08048b89 <+49>:    and    $0xf,%esi
   0x08048b8c <+52>:    add    (%ecx,%esi,4),%edx
   0x08048b8f <+55>:    add    $0x1,%eax
   0x08048b92 <+58>:    cmp    $0x6,%eax
   0x08048b95 <+61>:    jne    0x8048b85 <phase_5+45>
   0x08048b97 <+63>:    cmp    $0x39,%edx
---Type <return> to continue, or q <return> to quit---
   0x08048b9a <+66>:    je     0x8048ba1 <phase_5+73>
   0x08048b9c <+68>:    call   0x8048e51 <explode_bomb>
   0x08048ba1 <+73>:    add    $0x1c,%esp
   0x08048ba4 <+76>:    pop    %ebx
   0x08048ba5 <+77>:    pop    %esi
   0x08048ba6 <+78>:    pop    %edi
   0x08048ba7 <+79>:    pop    %ebp
   0x08048ba8 <+80>:    ret   ```

标签: cassemblyx86reverse-engineering

解决方案


推荐阅读