需要帮助了解Binary Bomb Phase_5

时间:2015-06-27 05:17:00

标签: assembly x86 gdb

所以我一直在研究这个二元炸弹实验室,而phase_5是我唯一不理解的部分。我已经解决了,但有几行我希望有人可以帮助我。

   0x08048db1 <+0>: push   %ebp
   0x08048db2 <+1>: mov    %esp,%ebp
   0x08048db4 <+3>: push   %ebx
=> 0x08048db5 <+4>: sub    $0x14,%esp
   0x08048db8 <+7>: mov    0x8(%ebp),%ebx
   0x08048dbb <+10>:    mov    %ebx,(%esp)
   0x08048dbe <+13>:    call   0x8049009 <string_length>
   0x08048dc3 <+18>:    cmp    $0x6,%eax
   0x08048dc6 <+21>:    je     0x8048dcd <phase_5+28>
   0x08048dc8 <+23>:    call   0x8049231 <explode_bomb>
   0x08048dcd <+28>:    mov    $0x0,%edx
   0x08048dd2 <+33>:    mov    $0x0,%eax
   0x08048dd7 <+38>:    mov    (%ebx,%eax,1),%cl
   0x08048dda <+41>:    and    $0xf,%ecx
   0x08048ddd <+44>:    add    0x804a460(,%ecx,4),%edx
   0x08048de4 <+51>:    inc    %eax
   0x08048de5 <+52>:    cmp    $0x6,%eax
   0x08048de8 <+55>:    jne    0x8048dd7 <phase_5+38>
   0x08048dea <+57>:    cmp    $0x36,%edx
   0x08048ded <+60>:    je     0x8048df4 <phase_5+67>
   0x08048def <+62>:    call   0x8049231 <explode_bomb>
   0x08048df4 <+67>:    add    $0x14,%esp
   0x08048df7 <+70>:    pop    %ebx
   0x08048df8 <+71>:    pop    %ebp
   0x08048df9 <+72>:    ret    

在这里,我将解释我是如何想出一个解决方案的。我意识到我写了很多,如果你想跳过它,我很难理解行&lt; + 44&gt;。

很容易看到输入是6个字符,所以我随机猜测:&#34;等等#34;

转到第38行,我看到%eax +%ebx正被移入%cl寄存器,据我所知,如果是%ecx,它是前8个字节。我注意到我的字符串存储在%ebx中,因此当调用此行时,看到%eax从0增加到5我假设它将ascii字符的十进制值存储在我的字符串的%eax元素中%CL。

转到下一行是正确的。并且使用0xf(0x1111)的ecx将掩码打开并将%ecx降低到前4个字节,即0到15之间的数字。

第44行是我感到困惑的地方。

据我了解添加,该行应该设置 %edx + =%ecx * 4 + value_at(0x804a460)。当我检查0x804a460地址时,它包含值2.对于我的循环的第一次迭代,掩盖字符&#34; h&#34;给我留下十进制数字8.因此我假设edx将设置为34,但在该行之后它被设置为4.

因此,此行根据我的角色的屏蔽值增加%edx 6次。看到第57行0x36和%edx上的cmp,我知道最后我需要以54结尾。

被掩盖为9的i使我的edx增加了7.t,h和r分别使我的edx增加了12,16和6。

所以给定54/6 = 9,并且考虑到我不知道这个添加行在做什么,我决定再运行另一个字符串,看看我是否能找到一个掩盖的字符,使我的%edx增加了9。

我查看了一个ascii表并决定输入:kwsqfm,当屏蔽时等于(11)(7)(3)(1)(6)(13)十进制。然后,我只是完成了循环的每一步,并检查了每个十进制值增加了多少%edx。

令我惊喜的是,f最终将%edx提高了+9。所以我只是简单地加入&#34; ffffff&#34;作为我的密码并化解了阶段。

我对我如何找到这个答案并不完全满意,因为这是一个强大的力量&#34;我使用的方法。即使实际上只有15个屏蔽值需要检查,我宁愿理解这里到底发生了什么。

线&lt; + 44&gt;毫无疑问是什么给我带来了麻烦。如果有人能帮我理解添加声明,我将非常感激。

0 个答案:

没有答案