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='')

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
