2016-12-03 56 views
-1

這裏是我對代碼的作用以及解決方法的理解:首先,我需要找到一個字符串,然後對該字符串進行反向工程,字節查找表,我已經找到。我知道這些「偏移量」的值必須加起來爲60,見行< + 53>。解散二進制炸彈:phase_5

我試圖通過使用x/s 0x4011fe和其他檢查命令(x/6c等)來找到這6個字符的字符串,但我沒有得到任何接近正確的東西。有什麼我可以改變以獲得正確的輸出,以便我可以繼續消除這個階段?

一旦我找到這個字符串,我的想法是查看這個需要的輸出字符串,然後找出需要達到預期輸出的輸入字符串。我想 - 查看每個字符的十六進制值,將它們與我的表(最低順序)進行比較,然後使用ascii表查找相應的字符。我只是想知道這是否是正確的方法,謝謝。

查找表: phase_5的

(gdb) x/16xw 0x402780 
<array.3600>: 0x00000002 0x0000000a 0x00000006 0x00000001 
<array.3600>: 0x0000000c 0x00000010 0x00000009 0x00000003 
<array.3600>: 0x00000004 0x00000007 0x0000000e 0x00000005 
<array.3600>: 0x0000000b 0x00000008 0x0000000f 0x0000000d 

拆卸:

0x00000000004011bf <+0>: push %rbx 
0x00000000004011c0 <+1>: mov %rdi,%rbx 
0x00000000004011c3 <+4>: callq 0x401414 <string_length> 
0x00000000004011c8 <+9>: cmp $0x6,%eax //6 letter string! 
0x00000000004011cb <+12>: je  0x4011d2 <phase_5+19> //if 6, jump over the explode 
0x00000000004011cd <+14>: callq 0x401706 <explode_bomb> 
0x00000000004011d2 <+19>: mov %rbx,%rax 
0x00000000004011d5 <+22>: lea 0x6(%rbx),%rdi 
0x00000000004011d9 <+26>: mov $0x0,%ecx 
0x00000000004011de <+31>: movzbl (%rax),%edx 
0x00000000004011e1 <+34>: and $0xf,%edx //」and」 each letter 
0x00000000004011e4 <+37>: add 0x402780(,%rdx,4),%ecx 
0x00000000004011eb <+44>: add $0x1,%rax 
0x00000000004011ef <+48>: cmp %rdi,%rax //compare, and then loop again. 
0x00000000004011f2 <+51>: jne 0x4011de <phase_5+31> //loop! 
0x00000000004011f4 <+53>: cmp $0x3c,%ecx //final compare, and then done! (0x3c = 60) 
0x00000000004011f7 <+56>: je  0x4011fe <phase_5+63> //jump over explode, and finish! 
0x00000000004011f9 <+58>: callq 0x401706 <explode_bomb> 
0x00000000004011fe <+63>: pop %rbx 
0x00000000004011ff <+64>: retq 
End of assembler dump. 
+2

我從來沒有喜歡過人投票而沒有提供至少一些反饋意見。我沒有投票,但是由於其他人沒有對你做出解釋:你發佈了一個家庭作業問題,基本上說「我不知道該怎麼做,答案是什麼?」如果你發佈你的目標是什麼,並要求向正確的方向推進,你將會有更好的運氣......儘管我不認爲stackoverflow.com是那個地方。 –

+0

此外:當我看到有人發佈作業問題並得到積極迴應時,通常作者已經概述了他們嘗試過的一些事情,因此人們並不覺得他們在做作家的作業。 –

+0

對不起,@BrianVandenberg,我真的很感謝您的評論!我編輯了我的問題,希望現在好一點。我主要關注如何找到要檢查的字符串,因爲我已經有幾天了。我試圖解釋我的思維過程,希望得到確認,我正確思考,我會盡量讓這個更清楚。再次感謝! – Mary

回答

1

左思右想,我已經成功地找到了答案。原來沒有字符串可以比較,只有值爲0x3c。在閱讀彙編代碼時,過度思考對我來說似乎是一個普遍的問題。

本質上,我需要從數組中選擇6個總和爲0x3c的數字。然後選擇6個具有適當索引的可打印字符或數字作爲低4位。所以,最簡單的選擇是0xa,其索引爲1,(0xa = 10,因此獲得6個值是微不足道的)。

感謝大家的意見。