[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.}

 

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