2011-06-10 107 views
0

我得到了一個名爲bomb的程序。當程序運行時,它要求用戶輸入(可以是字符串或int)。如果用戶輸入錯誤的輸入,它會爆炸。幫助分析彙編代碼

爲了「化解」炸彈,我必須分析彙編代碼,以便我可以輸入正確的輸入。

該方案包括6個階段,我已經完成了4個階段,但我不能得到這第五個階段。

正如我所提到的,程序讀取用戶的輸入。我需要在這個階段輸入什麼樣的輸入,這樣我才能避免調用explode_bomb函數,以及如何得到答案?

08048db0 <phase_5>: 
8048db0: 55      push %ebp 
8048db1: 89 e5     mov %esp,%ebp 
8048db3: 57      push %edi 
8048db4: 56      push %esi 
8048db5: 53      push %ebx 
8048db6: 83 ec 1c    sub $0x1c,%esp 
8048db9: 8b 5d 08    mov 0x8(%ebp),%ebx 
8048dbc: 89 1c 24    mov %ebx,(%esp) 
8048dbf: e8 8c 01 00 00   call 8048f50 <string_length> 
8048dc4: 83 f8 06    cmp $0x6,%eax 
8048dc7: 74 05     je  8048dce <phase_5+0x1e> 
8048dc9: e8 c3 02 00 00   call 8049091 <explode_bomb> 
8048dce: ba 00 00 00 00   mov $0x0,%edx 
8048dd3: b8 00 00 00 00   mov $0x0,%eax 
8048dd8: b9 80 a1 04 08   mov $0x804a180,%ecx 
8048ddd: 0f be 34 03    movsbl (%ebx,%eax,1),%esi 
8048de1: 83 e6 0f    and $0xf,%esi 
8048de4: 03 14 b1    add (%ecx,%esi,4),%edx 
8048de7: 83 c0 01    add $0x1,%eax 
8048dea: 83 f8 06    cmp $0x6,%eax 
8048ded: 75 ee     jne 8048ddd <phase_5+0x2d> 
8048def: 83 fa 41    cmp $0x41,%edx 
8048df2: 74 05     je  8048df9 <phase_5+0x49> 
8048df4: e8 98 02 00 00   call 8049091 <explode_bomb> 
8048df9: 83 c4 1c    add $0x1c,%esp 
8048dfc: 5b      pop %ebx 
8048dfd: 5e      pop %esi 
8048dfe: 5f      pop %edi 
8048dff: 5d      pop %ebp 
8048e00: c3      ret 


08048f50 <string_length>: 
8048f50: 55      push %ebp 
8048f51: 89 e5     mov %esp,%ebp 
8048f53: 8b 55 08    mov 0x8(%ebp),%edx 
8048f56: b8 00 00 00 00   mov $0x0,%eax 
8048f5b: 80 3a 00    cmpb $0x0,(%edx) 
8048f5e: 74 09     je  8048f69 <string_length+0x19> 
8048f60: 83 c0 01    add $0x1,%eax 
8048f63: 80 3c 02 00    cmpb $0x0,(%edx,%eax,1) 
8048f67: 75 f7     jne 8048f60 <string_length+0x10> 
8048f69: 5d      pop %ebp 
8048f6a: c3      ret 
+0

如果你告訴我們你自己分析了你自己分析的結果,你會得到更多的幫助 – Earlz 2011-06-10 15:18:43

+1

*「當程序運行時,它要求用戶輸入(可以是字符串或int)如果用戶輸入錯誤的輸入,它會爆炸「*實際上聽起來像是我曾經工作過的每個程序集任務的相當好的總結...... :) – 2011-06-10 15:34:16

+0

0x804a180處的16個字節用作保存賦予每個字母的值的查找表。 – ninjalj 2011-06-10 19:14:48

回答

0

的代碼出現(AT & T語法就像是混淆我的大腦......)對字符串進行一個簡單的AT-A-時間查找散,如果最終散列 0x41,它爆炸。該字符串的長度也必須是6個字符,否則會爆炸。

+0

如果最終的散列是**不是** 0x41 ... – ninjalj 2011-06-10 19:12:48

0

我這樣一個懶惰的傢伙,我會在應用程序中執行字符串嘗試搜索一些明顯有:

來源:man strings

琴絃 - 打印可打印的字符串文件中的字符。