[hackme] helloworld

下載地址:https://hackme.inndy.tw/static/helloworld

 

解題過程

方法一:

1、拖進IDA,F5看代碼。

2、從代碼很容易就可以看到,有個if進行判斷,如果n是314159265,就可以輸出flag。

 

方法二:

1、從彙編裏面,分析flag初始時的值是什麼。

 

2、從代碼裏面可以看到,flag的每一位與n進行異或運算,就可以獲得最終flag。也就是說,只要知道一開始flag存放的是什麼數據,就可以用腳本自己計算出flag。

 

3、畫出flag在內存存放的形式。

 

4、注意是小端模式,高地址對應高位,低地址對應低位。

 

5、此處要注意小端的順序,flag[0]是0xF1,以此類推。每次都容易忘記小端是怎麼放的,順序是怎麼樣的,這次畫個圖加深一下印象。

 

 

6、利用python算出flag。

flag = [0xf1, 0xe8, 0x81, 0xc8, 
        0xd2, 0x81, 0xcf, 0xce, 
        0xd5, 0x81, 0xc0, 0x81, 
        0xd3, 0xc0, 0xd5, 0xc8, 
        0xce, 0xcf, 0xc0, 0xcd, 
        0x81, 0xcf, 0xd4, 0xcc, 
        0xc3, 0xc4, 0xd3, 0x8f]

FLAG = ''
for i in flag:
    FLAG += chr((i^314159265) & 0xff)

FLAG = "FLAG{" + FLAG + "}"
print FLAG

# FLAG{PI is not a rational number.}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章