DDCTF-Misc1 Writeup

DDCTF-Misc1 —— (╯°□°)╯︵ ┻━┻

题目:

(╯°□°)╯︵ ┻━┻

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd

这张桌子我是没掀得翻,感谢群里大佬们的不吝赐教,使我茅塞顿开,同时也感受到了难得的技术分析的氛围。

错误的探索我就不在详细叙述了,直接说正确的思路吧。

一串十六进制字符串,直接丢去转义成ASCII字符,会得到一堆奇怪的符号:

Ôèáô ÷áó æáóô¡ Ôèå æìáç éóº ÄÄÃÔÆû¹²²áâ¹¹·´á´·ãä³²²ã洳⵰¶±°æáåáµý

看不懂是吧,看得懂就有鬼了。

再回去观察一下这段十六进制字符,每两位一组,

['d4', 'e8', 'e1', 'f4', 'a0', 'f7', 'e1', 'f3', 'a0', 'e6', 'e1', 'f3', 'f4', 'a1', 'a0', 'd4', 'e8', 'e5', 'a0', 'e6', 'ec', 'e1', 'e7', 'a0', 'e9', 'f3', 'ba', 'a0', 'c4', 'c4', 'c3', 'd4', 'c6', 'fb', 'b9', 'b2', 'b2', 'e1', 'e2', 'b9', 'b9', 'b7', 'b4', 'e1', 'b4', 'b7', 'e3', 'e4', 'b3', 'b2', 'b2', 'e3', 'e6', 'b4', 'b3', 'e2', 'b5', 'b0', 'b6', 'b1', 'b0', 'e6', 'e1', 'e5', 'e1', 'b5', 'fd']

发现都很大 ,都是以字母开头的十六进制。有多大呢,把它转换成十进制,更加直观地体会一下:

[212, 232, 225, 244, 160, 247, 225, 243, 160, 230, 225, 243, 244, 161, 160, 212, 232, 229, 160, 230, 236, 225, 231, 160, 233, 243, 186, 160, 196, 196, 195, 212, 198, 251, 185, 178, 178, 225, 226, 185, 185, 183, 180, 225, 180, 183, 227, 228, 179, 178, 178, 227, 230, 180, 179, 226, 181, 176, 182, 177, 176, 230, 225, 229, 225, 181, 253]

那为什么说它大呢,因为ASCII可见字符的十进制取值范围为32—126 ,所以上面的字符串转换成ASCII字符以后,出现的都是些非可见字符,也就是刚刚所提到的奇奇怪怪的字符。

那么要得到可见字符,就要把它们的值限制在[32,126] 之内,所以我们对其取128的余数 (为什么是128而不是127呢,这是习惯性选择2的8次方的结果吧),结果:

[84, 104, 97, 116, 32, 119, 97, 115, 32, 102, 97, 115, 116, 33, 32, 84, 104, 101, 32, 102, 108, 97, 103, 32, 105, 115, 58, 32, 68, 68, 67, 84, 70, 123, 57, 50, 50, 97, 98, 57, 57, 55, 52, 97, 52, 55, 99, 100, 51, 50, 50, 99, 102, 52, 51, 98, 53, 48, 54, 49, 48, 102, 97, 101, 97, 53, 125]

好,终于可以尝试转换为ASCII字符了:

['T', 'h', 'a', 't', ' ', 'w', 'a', 's', ' ', 'f', 'a', 's', 't', '!', ' ', 'T', 'h', 'e', ' ', 'f', 'l', 'a', 'g', ' ', 'i', 's', ':', ' ', 'D', 'D', 'C', 'T', 'F', '{', '9', '2', '2', 'a', 'b', '9', '9', '7', '4', 'a', '4', '7', 'c', 'd', '3', '2', '2', 'c', 'f', '4', '3', 'b', '5', '0', '6', '1', '0', 'f', 'a', 'e', 'a', '5', '}']

GetFlag

以下是用python写的工具:

key = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c' \
      '6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'

list1 = []
for x in range(0,len(key),2):
    k = key[x:x+2]
    list1.append(k)
print(list1)

list2 = []
for x in range(0,len(list1)):
    list2.append(int(list1[x],16))
print(list2)

list3 = map(lambda x:x%128,list2)
list33 = list(list3)
print(list33)

list4 = map(chr,list33)
list44 = list(list4)
print(list44)

flag = ''.join(list44)
print(flag)

什么?你问题目那个表情是什么意思?
我当初就是研究这个研究了两天,除了用来做了一张表情包,好像并没有其他用处了。