XCTF的re1

知识点1、解锁IDA新功能

右键十六进制,直接就可查看连续内存地址存储的内容。就比如下面这一连串十六进制数字,看着好像flag,谁知道并不是。

 

二、结合程序运行结果逆向。

不要以为人家给的那个文件 除了反编译之外啥用没有,就拿这个程序来讲,我们运行一下程序,再结合发编译源码,就知道那三块内存区域存储的东西对我们找flag来说没什么用。

然后这有个if判断语句,if后面的那个printf打印的是废话,那else后面应该就是flag内容,这是我猜测的。(但是并不是,他只是成功了之后提示flag get的字符串) 。

 

但是这有两块存储区域存储的东西很可疑,很值得怀疑,所以我们打开看看,发现是一堆十六进制串。 

 

 

    pw_str = '3074656D30633165577B465443545544'
    print(bytes.fromhex(pw_str))
    pw_str='7D465443545544'
    print(bytes.fromhex(pw_str))

 出现下面这俩串字符,看着像反过来的。

 

三、知识点:小端序

上面那个字符串看着像反向的,因为我们知道他这个是小端序的存储方式,所以我们得从后面往前读。 我们将所有字符串分成两个一组,然后从后往前读取每一组。(切记不是一个字符一个字符读)

写出exp 

def Demo_05():
    pw_str = '3074656D30633165577B465443545544'
    for i in range(len(pw_str) - 2, -1, -2):
        print(chr(int(pw_str[i] + pw_str[i + 1], 16)), end='')
    pw_str = '7D465443545544'
    for i in range(len(pw_str) - 2, -1, -2):
        print(chr(int(pw_str[i] + pw_str[i + 1], 16)), end='')

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值