合天網安實驗室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;
else
t += (c[i]-'A'+10)*16;
if(c[i+1]>'0' && c[i+1]<='9')
t += (c[i+1]-'0');
else
t += (c[i+1]-'A'+10);
printf("%c", t);
}
}
附
發現了個好玩的現象