试图拆除二元炸弹第 5 阶段 (phase_5)

trying to defuse Binary Bomb phase 5 (phase_5)

这似乎是一个非常受欢迎的问题,但我已经看了几个小时了,但我似乎无法解码它。我知道我需要查找 table 并以某种方式创建一个等效于 0x34 的六位数字符串,而且我输入字符串中的每个字符都与 0xf 进行 AND 运算,结果用于获取具有相应索引的字符从阵列。似乎找不到 6 个 suitable 字符来化解炸弹。

Dump of assembler code for function phase_5:
=> 0x08048dd5 <+0>: push   %ebx
   0x08048dd6 <+1>: sub    [=11=]x14,%esp
   0x08048dd9 <+4>: mov    0x1c(%esp),%ebx
   0x08048ddd <+8>: push   %ebx
   0x08048dde <+9>: call   0x8049043 <string_length>
   0x08048de3 <+14>:    add    [=11=]x10,%esp
   0x08048de6 <+17>:    cmp    [=11=]x6,%eax
   0x08048de9 <+20>:    je     0x8048df0 <phase_5+27>
   0x08048deb <+22>:    call   0x8049159 <explode_bomb>
   0x08048df0 <+27>:    mov    %ebx,%eax
   0x08048df2 <+29>:    add    [=11=]x6,%ebx
   0x08048df5 <+32>:    mov    [=11=]x0,%ecx
   0x08048dfa <+37>:    movzbl (%eax),%edx
   0x08048dfd <+40>:    and    [=11=]xf,%edx
   0x08048e00 <+43>:    add    0x804a100(,%edx,4),%ecx
   0x08048e07 <+50>:    add    [=11=]x1,%eax
   0x08048e0a <+53>:    cmp    %ebx,%eax
   0x08048e0c <+55>:    jne    0x8048dfa <phase_5+37>
   0x08048e0e <+57>:    cmp    [=11=]x34,%ecx
   0x08048e11 <+60>:    je     0x8048e18 <phase_5+67>
   0x08048e13 <+62>:    call   0x8049159 <explode_bomb>
   0x08048e18 <+67>:    add    [=11=]x8,%esp
   0x08048e1b <+70>:    pop    %ebx
   0x08048e1c <+71>:    ret    
End of assembler dump.
(gdb) 
(gdb) x/16dw 0x804a100
0x804a100 <array.3248>: 2   10  6   1
0x804a110 <array.3248+16>:  12  16  9   3
0x804a120 <array.3248+32>:  4   7   14  5
0x804a130 <array.3248+48>:  11  8   15  13

所以我需要创建一个六字符的字符串,相当于 0x34,即 52。 我使用 abcdef、ghijkl、mnopqr 作为测试字符串,同时使用 (gdb) info r 来观察程序循环时每个不同字符在寄存器 ecx 中的变化,例如。 a ->10, b ->6... 为了节省时间,我在 0x08048e07 处创建了一个断点。 然后我用 6 个字符加起来是 52。 例如。的解决方案是: 嗯嗯, 嗯嗯嗯

a=10 10
b=16 6
c=17 1 
d=29 12
e=45 16
f=54 9

g=3  3
h=7  4
i=14 7
j=28 21
k=33 5
l=44 11

m=8   8
n=23  15
o=36  13
p=38  3
q=48  10
r=54  6