合天网安实验室CTF-基础50-0x01
最近无聊时准备刷点题,由简到难慢慢来吧
题目描述
真的不能再简单了!
相关附件
misc50.zip
题目链接
参考解题步骤
1、下载下来的压缩包解压后只有一个misc50.exe文件
2、先用sublime打开看一下,竟然是flag{666C61677B68315F6337667D}
想来不会这么简单,先提交试一下吧
提示flag不正确
3、考虑应该是加密了,观察一下是16进制,总共有24位
可能性1:直接对应26个英文字母,明显不对
6 | 6 | 6 | C | 6 | 1 | 6 | 7 | 7 | B | 6 | 8 | 3 | 1 | 5 | F | 6 | 3 | 3 | 7 | 6 | 6 | 7 | D |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
f | f | f | l | f | a | f | g | g | k | f | h | c | a | e | o | f | c | c | g | f | f | g | m |
可能性2:考虑到ASCII的范围为0~127,试一下两位对应一个ASCII字符
66 | 6C | 61 | 67 | 7B | 68 | 31 | 5F | 63 | 37 | 66 | 7D |
---|---|---|---|---|---|---|---|---|---|---|---|
f | l | a | g | { | h | 1 | _ | c | 7 | f | } |
即:flag{h1_c7f}
4、提交h1_c7f
验证通过
随手写的转换代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{char c[30];gets(c);for(int i = 0; i < strlen(c); i+=2){int t = 0;if(c[i]>'0' && c[i]<='9')t += (c[i]-'0')*16;elset += (c[i]-'A'+10)*16;if(c[i+1]>'0' && c[i+1]<='9')t += (c[i+1]-'0');elset += (c[i+1]-'A'+10);printf("%c", t);}
}
附
发现了个好玩的现象