关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:考点速览
本题考察的是 MISC 中的编码相关的内容,主要是一个变体的十六进制转 ASCII 码。当碰到无法直接打印出有效字符的十六进制数字时,我们可以考虑为其减去或者增加一个特殊值,再尝试打印:
-
Python 查看十六进制对应的十进制值:
int("d4", 16)
-
Python 获取字符的 ASCII 码值:
ord("A")
-
Python 将 ASCII 码值转化为对应字符:
chr(65)
0x02:Write UP
题目描述中就是一串神器的字符,然后几乎没啥提示。仔细观察描述内容,有经验的宝子们应该已经发现了这个就是十六进制的内容。
我们取头两位 d4
尝试将其转换为对应的 ASCII 字符看看:
十六进制 "d4" 对应的 ASCII 字符已经超过了 127,所以无法打印出我们人类能看懂的内容。目前其转换出来的内容是一个扩展 ASCII 码表中的字符。
此时,我们需要用到一点点的经验,比如给他减去一个数字 128 后再打印内容:
如上,成功打印出一个有效的内容,基于上面的原理,我们可以每两位将其转换为数字,然后减去一个 128 后打印对应的 ASCII 字符。一个个打印太慢了,我们写一个脚本:
- encode_text = "d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd"
-
- for i in range(1, int(len(encode_text) / 2) + 1):
- hex_code = encode_text[i*2 - 2: i*2]
- print(chr(int(hex_code, 16) - 128), end="")
运行脚本后即可拿到 Flag:
评论记录:
回复评论: