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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值