BUUCTF_Crypto_WriteUp | 看我回旋踢

发布时间 2023-11-06 16:13:49作者: Guanz

题目

下载附件解压得到字符串:
synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

分析

字符串里除去标志大括号,剩下的包括小写字母、数字和“-”符号。

字符串的形式和传统 flag 的形式很像但细看根本不是一个样,合理猜测“{”前的四个字母对应“flag”,打开 ASCII 码表对照发现“synt”的每个字母与“flag”前移 13 位一一对应,即将“f(70)”前移 13 位得到“s(83)”,以此类推。

于是我们将大括号内的每个字符都后移 13 位和除“-”外的每个字符后移 13 位的结果分别作为 flag 提交,都显示错误。

打开浏览器 ?

了解到如下:

套用 ROT13 到一段文字上仅仅只需要检查字元字母顺序并取代它在 13 位之后的对应字母,有需要超过时则重新绕回 26 英文字母开头即可。A 换成 N、B 换成 O、依此类推到 M 换成 Z,然后序列反转:N 换成 A、O 换成 B、最后 Z 换成 M。只有这些出现在英文字母里头的字元受影响;数字、符号、空白字元以及所有其他字元都不变。

于是将大括号内的字母 -13 后在小写字母范围内取模。(其实可以直接用 HackBar 或者其他工具在线解码)

char s[] = "synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}";
for (int i = 0; i < strlen(s); ++i) {
	if (s[i] >= 'a' && s[i] <= 'z') {
		s[i] -= 13;
		if (s[i] < 'a') {
			s[i] += 'z' - 'a';
		}
	}
}
printf("%s", s);

将输出的 flag 提交即可。

Flag

flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

参考

ASCII 码表对照
ROT13