南邮CTF练习平台网址: http://ctf.nuptzj.cn/challenges#
1.esay!
base64解密不解释
nctf{this_is_base64_encode}
2.KeyBoard
在键盘上按字母画画可得areuhack
注意格式得到
nctf{areuhack}
3.base全家桶
base有64,32,16三种加密,按顺序来一轮可得
nctf{base64_base32_and_base16}
4.n次base
反复base64 15次 嫌麻烦的可以自己去写python,最后得到
flag:nctf{please_use_python_to_decode_base64}
5.骚年来一发吗
写出对应的解密函数
<?php function decode($str) { $str=base64_decode(strrev(str_rot13($str))); $_o=strrev($str); for($_0=0;$_0<strlen($_o);$_0++) { $_c=substr($_o,$_0,1); $__=ord($_c)-1; $_c=chr($__); $_=$_.$_c; } return $_; } $string='iEJqak3pjIaZ0NzLiITLwWTqzqGAtW2oyOTq1A3pzqas'; echo decode($string); ?>
运行后得到
nctf{rot13_and_base64_and_strrev}
6.mixed_base64
base64,32,16随机组合解密,爆破可得
直接上python代码,爆破跑一分钟直接出flag
# coding:utf8 import base64 ciphertext = "GM2DINJTGUZTIMZUGM4TGNZUGEZTINBUGM2TGNBTGUZTEMZUGMZDGNBUGUZTIMZUGM2DGOJTGMZTCMZUGQ2TGNRUGEZTKMZRGMZTGMJTGQ2DKMZXGQYTGNJTGEZTGMZRGM2DINBTGY2DCMZVGM2TGNZUGEZTINBVGM3DIMRTGQ2DIMZTGMYTGNBUGUZTMNBRGM2TGMRTGQZTEMZUGQ2TGNJTGQZTKMZZGMZTGMJTGQ2DKMZUGM2DGNJTGIZTIMZSGM2DINJTGQZTIMZVGM2TGMZTGEZTINBVGM2DGNBTGUZTKMZTGMYTGNBUGQZTONBRGM2TGNJTGMZTAMZUGQ2DGNZUGEZTKMZVGMZTGMRTGQ2DKMZWGQZDGNBTHEZTGMZSGM2DINJTGQZTIMZVGM2TGMZTGIZTINBVGM2DGNJTGUZTCMZXGQYTGNBUGQZTKMZUGM2TGNJTG4ZTSMZUGQ2TGNBTGUZTIMZVGMZTGMJTGQ2DKMZUGM2DGNJTGUZTGMZSGM2DINJTG42DCMZUGMYTGMZTGEZTINBVGM3DIMJTGUZTKMZXGQYTGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNJTGQZTMMZTGMZTGNJTGQ2DKMZVGM2DGNBTHEZTGMZRGM2DINJTGUZTIMZVGM4TGMZTGAZTINBVGM2DGNJTGUZTSMZTGMYTGNBUGQZTKMZUGM2DINBTG4ZTOMZUGQ2TGNBTGUZTIMZVGMZTGMBTGQ2DMMZUGM2DGNJTGUZTGMZRGM2DINJTGY2DEMZUGM4TGMZTGAZTKMZRGM2TGNBTGUZTCMZTGMYTGNBUGUZTKMZUGM2DINBTGMZTCMZUGQ2TGNJTGQZTINBUGMZTGMJTGQ2DKMZUGM2DGNBUGQZTGMZRGM2DINJTGY2DCMZVGM2TGMZTGEZTINBVGM3DIMJTGQ2DIMZXGQYTGNBUGQZTIMZUGM2TGMRTGQZTKMZUGQ2TGNRUGIZTINBUGMZTGMJTGQ2DIMZWGQYTGNJTGIZTIMZSGM2DINJTGUZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGYZTGMZXGM3TGNBUGUZTKMZUGM2TGMJTGMZTCMZUGQ2DGNRUGEZTINBUGM3TGOBTGQ2DKMZUGM2TGNBTGUZTGMZQGM2DINBTG42DCMZVGM2TGNZTHEZTINBVGM2DGNBTGUZTKMZTGMZDGNJTGEZTONBRGM2TGNJTG4ZTSMZUGQ2TGNJTGQZTKMZVGMZTGMRTGUZTCMZXGQYTGNJTGUZTGMZSGM2DINJTGQZTIMZWGM3TGMZTGEZTINBVGM3TIMJTGUZTKMZTGMYDGNBUGUZTIMZVGM2DGNJTGMZTAMZUGQ2TGNRUGEZTKMZVGM3TGOJTGQ2DIMZXGQYTGNBTGEZTONBRGM2DINJTGUZTIMZVGMZDGNBTGMZTINBVGM2TGNBTGUZTSMZTGMYTGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ2TGNJTGQZTIMZZGMZTGMBTGUZTEMZVGM2DGNJTGEZTGMZSGM2DINJTGUZTIMZUGM4TGMZTGAZTKMZRGM3TIMJTGUZTKMZTGMYDGNBUGUZTMNBSGM2DINBTGMZTGMZUGQ2DGNBTGQZTKMZVGMZTGMZTGQ2DKMZVGM2DGNBTHEZTONBRGM2DINBTGQZTIMZUGQ2DGNZTG4ZTINBVGM3TIMJTGY2DEMZTGMYTGNBUGQZTMNBRGM2TGMJTGMZTCMZUGQ2TGNZUGEZTKMZRGMZTGMBTGUZTEMZWGQYTGNJTGUZTOMZYGM2DINBTG42DCMZUGMYTGMZTGAZTKMZSGM2TGNBTGUZTCMZTGM2DGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNRUGEZTMMZTGM3TGNZTGQ2DKMZUGM2DGNJTGUZTGMZRGM2DINBTG42DCMZVGM2TGMZTGEZTINBUGM3TIMJTGY2DEMZTGMYDGNBUGQZTONBRGM2TGNJTGMZTEMZUGQ2TGNJTGQZTKMZVGMZTGMRTGQ2DKMZUGM2DGNJTGYZTIMZSGM2DINJTGQZTKMZVGMYTGMZTGIZTKMZRGM3DIMJTGUZTKMZTGMZDGNBUGUZTIMZVGM2DGNJTGMZTCMZUGQ2TGNBTGQZTKNBRGM2DGMZTGQ2DKMZXGQYTGNBTGEZTGMZRGM2DINJTG42DCMZVGM2TGNZTHEZTINBUGM3TIMJTGQZTKMZTGMYDGNBUGUZTMNBRGM2TGOJTG4ZTQMZUGQ2TGNJTGQZTKMZZGMZTGMBTGQ2DKMZVGM2DGNRTGMZTGMZQGM2DINJTGUZTIMZUGMYTGMZTGEZTINBUGM2TGNBTGU2DCMZUGM2DGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ3DGNBTGQZTKMZSGM2DGNRTGQ2DKMZUGM2DGNJTGEZTGMZQGM2TGMJTGUZTIMZVGMYTGMZTGEZTINBVGM2TGNBTGUZTKMZXGQYTGNBUGQZTIMZUGM2DINBTGMZTCMZUGQ2TGNBTGUZTINBUGMZTGMJTGQ2DIMZVGM2DGNJUGEZTIMZTGM2DINJTGY2DCMZVGMYTGMZTGEZTINBUGM3DIMJTGUZTEMZUGM2TGNBUGUZTMNBSGM2DINBTGMZTCMZUGQ2DGNRUGEZTKMZSGM2DGNBTGQ2DKMZVGM2DGNJTGEZTONBRGM2DINBTGQZTIMZWGMZTGNZTG4ZTINBVGM2TGNBTGYZTGMZTGMYTGNBUGQZTMNBRGM3DGNBTGQZTEMZUGQ2TGNJTGQZTIMZVGMZTGMZTGQ2DMMZVGM2DGNJTGUZTOMZZGM2DINJTGUZTIMZVGM2TGMZTGEZTINBVGM3DIMJTGUZTEMZUGM3TGNBUGUZTKMZUGM2DGNJTG42DCMZUGQ2DGNBTGQZTKMZWGM2DGMRTGQ2DKMZUGM2DGNRTG4ZTGMZRGM2DINJTGUZTIMZVGQYTGNBTGMZTINBVGM2DGNJTGQZTKMZTGMYDGNBUGUZTKMZUGM2TGNJTG42DCMZUGQ2DGNZUGEZTIMZVGMZTGMBTGQ2DKMZWGQYTGNJTGIZTIMZTGM2DINJTGUZTIMZVGM4TGMZTGEZTINBVGM2TGNBTGU2DCMZUGM2DGNBUGUZTIMZUGM2TGOJTGMZTAMZVGMZDGNBTGQZTKNBRGM2DGNBTGQ2DKMZVGM2DGNBTHEZTGMZQGM2TGMJTG42DCMZVGM2TGMZTGAZTINBVGM3DIMRTGQZTSMZTGMYDGNJTGIZTKMZUGM2TGMJTGMZTEMZUGQ2TGNJTGQZTIMZZGM3TIMJTGQ2DIMZVGM2DGNJTGIZTIMZSGM2DINJTGQZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGUZTCMZTGMYTGNBUGUZTONBRGM2TGMJTGMZTAMZVGMZDGNJTGQZTKMZVGMZTGMZTGQ2DKMZWGQZDGNBUGQZTGMZRGM2TGMJTGUZTIMZVGMZDGNBTGIZTINBVGM2TGNBTGQZTSMZTGMYTGNBUGUZTIMZUGM2TGMRTGQZTEMZUGQ2TGNBTGQZTKMZZGMZTGMJTGQ2DIMZWGQYTGNJTGUZTGMZRGM2DINBTG42DCMZVGM2TGMZTGAZTKMZRGM3DIMJTGUZTKMZTGMYTGNBUGQZTONBRGM2DGMJTGMZTEMZUGQ2TGNBTGQZTKMZVGM3TGOJTGQ2DKMZVGM2DGNRTGMZTGMZSGM2TGMJTGY2DCMZVGM2TGNZTHEZTINBVGM2DGNJTGQZTKMZTGMYTGNBUGUZTIMZUGM2TIMJTGQZTGMZUGQ2TGNZUGEZTIMZRGMZTGMJTGQ2DKMZVGM2DGNJTGUZTOMZZGM2DINBTG42DCMZUGM2TGMZTGIZTKMZRGM3DIMJTGYZTGMZTGM2TGNBUGUZTKMZUGM2TGOJTGMZTAMZUGQ2TGNJTGQZTKNBRGM2DGNBTGQ2DKMZUGM2TGNJTHEZTGMZRGM2DINBTG42DCMZVGQYTGNBTGQZTINBVGM2TGNBTGQZTSMZTGMYDGNBUGYZTIMZUGM2TGNJTGMZTEMZUGQ2TGNJTGQZTKMZRGMZTGMBTGUZTCMZVGM2DGNJTGEZTGMZRGM2DINJTGUZTIMZUGQ2DGMZTGEZTINBVGM3DIMJTGUZTCMZTGMZDGNBUGUZTKMZUGM2DINBTGMZTCMZUGQ2TGNRUGEZTKNBRGM2DGMZTGQ2DKMZWGQYTGNJTGEZTGMZQGM2TGMJTGUZTIMZVGMZDGNBTGUZTINBVGM3DIMRTGQZTSMZTGMYTGNBUGQZTMNBRGM2TGNJTG4ZTOMZUGQ2TGNJTGQZTKMZRGMZTGMRTGUZTCMZWGQYTGNRTGMZTOMZXGM2DINJTGUZTIMZWGMZTGMZTGEZTINBUGM3DIMJTGQ2DIMZXGM3TGNBUGQZTONBRGM2DGMJTGMZTGMZUGQ3DGNJTGQZTKMZVGM3TGOJTGQ2DKMZUGM2DGNJTGUZTGMZTGM2DINJTGQZTIMZVGMZDGNBTGYZTINBVGM2TGNBTGQ2DIMZTGMZDGNJTGEZTONBRGM2TGNRTGQZTEMZUGQ2TGNBTGUZTIMZVGMZTGMJTGQ2DIMZWGQYTGNJTGUZTGMZQGM2DINJTGQZTKMZUGM2TGMZTGEZTINBVGM2TGNBTGUZTKMZTGMYTGNBUGUZTKMZUGM2TGNJTG42DCMZUGQ2TGNJTGQZTKMZRGMZTGMBTGQ2DKMZVGM2DGNBTGUZTGMZSGM2TGMJTGY2DCMZVGM4TGMZTGAZTINBVGM2TGNBTGUZTSMZTGMYDGNJTGIZTIMZUGM2DINBTG4ZTOMZUGQ2TGNJTGQZTIMZZGMZTGMBTGUZTCMZVGM2DGNJTGUZTGMZRGM2DINJTGUZTIMZVGM4TGMZTGMZTINBUGM2DGNBTGUZTKMZTGMZDGNBUGUZTKMZUGM2DGOJTG42DCMZUGQ2DGNJTGQZTKNBRGM2DGMZTGQ2DKMZXGQYTGNRUGIZTGMZRGM2DINJTGY2DCMZVGMYTGMZTGEZTINBVGM2DGNJTGUZTKMZTGMYDGNJTGIZTMNBRGM2TGNJTG42DCMZUGQ2TGNRUGIZTINBUGMZTGMBTGUZTEMZVGM2DGNJTGEZTGMZUGM2DINJTGUZTIMZVGMYTGMZTGEZTINBVGM3DIMJTGYZTGMZXGM3TGNBUGUZTIMZUGM2TGNJTGMZTCMZUGQ2DGNZUGEZTKMZVGMZTGMJTGQ2DIMZXGQYTGNRUGIZTGMZQGM2DINBTG42DCMZVGM2TGMZTGIZTINBVGM2TGNBTGUZTKMZTGMZDGNBUGQZTONBRGM2DINBTG4ZTOMZUGQ2TGNBTGUZTKMZRGMZTGMRTGUZTCMZWGQYTGNJTGUZTGMZSGM2DINJTGQZTKMZUGM2TGMZTGEZTINBVGM2DGNBTGU2DCMZUGMZTGNBUGUZTONBRGM2TGMJTGMZTAMZUGQ2DGNZUGEZTKMZVGM3TGOJTGQ2DIMZXGQYTGNBTGUZTGMZRGM2DINJTGUZTIMZWGMZTGMZTGUZTINBVGM2TGNBTGUZTSMZTGMYDGNBUGUZTKMZUGM2TIMJTGQZTIMZUGQ2TGNJTGQZTIMZZGMZTGMJTGQ2DKMZVGM2DGNJUGEZTIMZUGM2DINJTGUZTKMZUGM2TGMZTGAZTINBWGM2DGNBTGUZTKMZTGMYTGNBUGUZTKMZUGM2TGMJTGMZTAMZVGMYTGNJTGQZTKMZRGMZTGMRTGQ2DKMZVGM2DGNBTHEZTGMZRGM2DINJTGUZTIMZUGQ2DGMZTGEZTINBVGM2DGNJTGQZTSMZTGMYTGNBUGUZTONBRGM2TGMJTGMZTCMZUGQ2TGNRUGEZTKMZRGMZTGMJTGQ2DIMZWGQYTGNJTGIZTIMZVGM2DINBTG42DCMZUGM2TGMZTGEZTINBUGM3DIMJTGUZTEMZUGM2DGNBUGUZTKMZUGM2TGNJTGMZTCMZUGQ2TGNJTGQZTMMZTGM3TGNZTGQ2DKMZVGM2DGNJTHEZTGMZRGM2DINBTG42DCMZVGMYTGMZTGEZTINBVGM2TGNBTGUZTKMZTGMZTGNBUGYZTKMZUGM2TGNJTGMZTEMZUGQ2TGNBTGQZTKMZVGMZTGMRTGUZTCMZXGQYTGNJTGIZTIMZWGM2DINJTGUZTIMZWGMZTGMZTGIZTKMZRGM3TIMJTGUZTEMZUGM3DGNBUGUZTIMZUGM3DGNZTGMZTCMZUGQ2TGNRUGEZTKMZVGMZTGMRTGQ2DKMZWGQZDGNBUGQZTGMZQGM2DINJTGUZTIMZVGM2TGNZUGEZTINBVGM2TGNBTGUZTSMZTGMYDGNBUGUZTMNBRGM2TGMRTGQZTGMZUGQ2TGNJTGQZTKMZZGMZTGMBTGQ2DKMZVGM2DGNJTHEZTGMZQGM2DINJTGUZTIMZVGM4TGMZTGAZTKMZSGM2DGNBTGU2DCMZUGMZTGNBUGUZTKMZUGM2DGOJTGMZTCMZUGQ2DGNRUGEZTKMZVGMZTGMBTGQ2DKMZWGQZDGNBTHEZTGMZTGM2DINBTGQZTIMZVGM2TGMZTGMZTINBVGM2TGNBTGQZTSMZXGQYTGNBUGQZTIMZUGM2DINBTGMZTCMZUGQ2TGNBTGQZTKMZRGMZTGMJTGQ2DIMZWGQYTGNJTGEZTGMZRGM2DINJTGY2DCMZVGMYTGMZTGEZTINBUGM3TIMJTGUZTKMZXGM4DGNBUGUZTMNBSGM2DINBTGMZTCMZUGQ2DGNRUGEZTKMZSGM2DGMRTGQ2DKMZVGM2DGNJTGUZTGMZRGM2DINJTGY2DCMZWGMZTGNZTG4ZTINBVGM2TGNBTGUZTSMZTGMYTGNBUGQZTONBRGM2TGNJTGMZTCMZUGQ2DGNZUGEZTIMZRGMZTGMZTGQ2DMMZVGM2DGNJTGUZTOMZZGM2DINJTGUZTIMZVGM2TGMZTGIZTINBVGM2DGNBTGUZTEMZUGM3TGNBUGUZTKMZUGM2DGNJTG42DCMZUGQ2DGNBTGQZTKMZRGMZTGMJTGQ2DIMZXGQYTGNRUGIZTGMZRGM2DINBTGQZTIMZVGM2TGMZTGAZTINBUGM3TIMJTGQZTCMZXGQYTGNBUGYZTKMZRGMZTINBTGM2DI===" plaintext = "nctf{" def decode(choice, ciphertext): ''' 功能 : 根据参数不同选择不同的加密方式对进行解密 参数 : choice : 0 : 使用Base64的方式进行解密 1 : 使用Base32的方式进行解密 2 : 使用Base16的方式进行解密 ciphertext : 密文 返回 : 解密结果 ''' result = "" if choice == 0: try: result = base64.b64decode(ciphertext) except Exception as e: return "" elif choice == 1: try: result = base64.b32decode(ciphertext) except Exception as e: return "" elif choice == 2: try: result = base64.b16decode(ciphertext) except Exception as e: return "" else: return "" return result def encode(choice, plaintext): ''' 功能 : 根据参数不同选择不同的加密方式对进行加密 参数 : choice : 0 : 使用Base64的方式进行加密 1 : 使用Base32的方式进行加密 2 : 使用Base16的方式进行加密 plaintext : 明文 返回 : 加密结果 ''' plaintext.replace('=','') if choice == 0: return base64.b64encode(plaintext) elif choice == 1: return base64.b32encode(plaintext) elif choice == 2: return base64.b16encode(plaintext) else: return "" for i in range(3): for j in range(3): for k in range(3): for l in range(3): for m in range(3): for n in range(3): for o in range(3): for p in range(3): for q in range(3): for r in range(3): order = str(i) + str(j) + str(k) + str(l) + str(m) + str(n) + str(o) + str(p) + str(q) + str(r) result = encode(i,encode(j,encode(k,encode(l,encode(m,encode(n,encode(o,encode(p,encode(q,encode(r,plaintext)))))))))) print "Checking : " + order + " ..." # 判断结果是否正确 , 如果加密得到的结果的前几位和密文相同 , 我们大概就可以判断我们已经正确爆破出了加密顺序 if(result.startswith('GM2DINJTGUZTIMZUGM4TGNZUGEZTINBUGM2TGNBTGUZTEMZUGMZDGNBUGUZTIMZUGM2DGOJTGMZTCMZUGQ2TGNRUGEZTKMZRGMZTGMJTGQ2DKMZXGQYTGNJTGEZTGMZRGM2DINBTGY2DCMZVGM2TGNZUGEZTINBVGM3DIMRTGQ2DIMZTGMYTGNBUGUZTMNBRGM2TGMRTGQZTEMZUGQ2TGNJTGQZTKMZZGMZTGMJTGQ2DKMZUGM2DGNJTGI')): print "Success!" print "The encode order is : " + order for ch in order: ciphertext = decode(int(ch), ciphertext) print ciphertext exit(0)
nctf{random_mixed_base64_encode}
7.异性相吸
打开压缩包发现密文,明文,分别用winhex按二进制打开
题目提示xor异或运算可得
01100110 01101100 01100001 01100111 00111010 01101110 01100011 01110100
01100110 01111011 01111000 01101111 01110010 01011111 01111000 01101111
01110010 01011111 01111000 01101111 01110010 01011111 01100010 01101001
01110101 01100010 01101001 01110101 01100010 01101001 01110101 01111101
新建一个hex文件粘贴上面数据可得
flag:nctf{xor_xor_xor_biubiubiu}
8.MD5
MD5爆破补全,直接上代码块
# -*- coding: utf-8 -*- import hashlib for ch1 in range(33,127): for ch2 in range(33,127): for ch3 in range(33,127): m='TASC'+chr(ch1)+'O3RJMV'+chr(ch2)+'WDJKX'+chr(ch3)+'ZM' md = hashlib.md5(m).hexdigest() if md[:5] == 'e9032': print m
可得 TASCJO3RJMVKWDJKXLZM
9.Vigenere
暂时没有头绪,待解