XCTF的re1

知识点1、解锁IDA新功能

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

 

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

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

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

 

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

 

扫描二维码关注公众号,回复: 13292646 查看本文章
    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='')

 

猜你喜欢

转载自blog.csdn.net/hacker_zrq/article/details/121003674