在一次比赛中偶遇一道稍微有点坑的题目,手搓解决后,后来发现更好的处理方式,记录一下。
数据为rot13解码后的数据
2346 3c53 5259 4e57 6639 5969 5d2a 402e
7531 2c24 476c 7929 5d39 4a45 7b25 2a67
7932 4e3a 396f 2d33 6839 5149 4841 7625
7444 4f27 000a
尝试直接解码无果,此处的坑点主要是hexdump特性。
结合hexdump的特点,数据需要22对调。之前靠手搓,经过向大佬学习,正则匹配通用性更强。
此处正则知识点:
知识点:
(.)代表取一个字符
(..)代表取两个字符
以此类推
$1代表取第一位的值
以此类推
$2$1代表第2位与第1位互换位置
对接码后的数据进行hex、base92解码后得到flag。也可以通过正则直接对字符串进行对调。
除了正则还可以通过脚本实现
input_str = "#F<SRYNWf9Yi]*@.u1,$Gly)]9JE{%*gy2N:9o-3h9QIHAv%tDO'"
result = ''.join([input_str[i+1] + input_str[i] for i in range(0, len(input_str)-1, 2)])+ (input_str[-1] if len(input_str) % 2 == 1 else '')
得到字符串解码
F#S<YRWN9fiY*].@1u$,lG)y9]EJ%{g*2y:No93-9hIQAH%vDt'O
base92解码得到flag
flag{048ddbdb-8040-442d-8402-66ad981eadc8}