下载附件有一串数字8842101220480224404014224202480122
根据0的个数以及题目的提示,把数串分成8组,每组对应的数字分别求和就是对应的字母顺序。
flag:cyberpeace{WELLDONE}
下载附件后得到一串base64编码串Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9
,解码即得flag
flag:cyberpeace{Welcome_to_new_World!}
#include
#include
int main()
{
char passwd[100],encrypted[100];
int i,j,k,t,move;
while(1)
{
printf("Enter message to be encrypted:");
gets(passwd);
printf("Enter shift amount(1-25):");
scanf("%d%*c",&move);
for(i=0; i= 'A' && passwd[i] <= 'Z')
{
passwd[i] = ((passwd[i]-'A')+move)%26+'A';
}
else if(passwd[i] >= 'a' && passwd[i] <= 'z')
{
passwd[i] = ((passwd[i]-'a')+move)%26+'a';
}
}
printf("%s",passwd);
printf("\n");
}
return 0;
}
根据flag的格式首字母是c可以得到偏移量是14
得到flag:cyberpeace{you_have_learned_caesar_encryption}
对照摩尔斯编码表,1代表杠,0代表点解密即可。
得到flag:cyberpeace{morsecodeissointeresting}
首先是转轮机密码的介绍:
转轮密码机是由一个输入键盘和一组转轮组成,每个转轮上标有有26个字母,字母的的顺序随意。转轮之间由齿轮进行连接,当一个转轮转动的时候,可以将一个字母转化成另外一个字母。
工作原理:
转轮密码机由多个转轮构成,每个转轮旋转的速度都不一样,比如有3个转轮,分别标号为1,2,3,其中1号转轮转动26个字母后,2号转轮就转动一个字母,当2号转轮转动26个字母后,3号转轮就转动1个字母。因此,当转轮密码机转动26X26X26次后,所有转轮恢复到初始状态,即3个转轮密码机的一个周期长度为26X26X26(17576)的多表代换密码。
下载附件得到:
首先通过密钥把所有的行重新排序,比如原先的第一行实际上是第二行,原先的第二行是第三行,以此类推。然后再按照密文把对应字母放到前面,例如第一行应该是NOZUTWDCVRJLXKISEFAPMYGHBQ,以此类推。
最终得到一个13X13的矩阵,然后观察方阵,得到flag。
查看官方wp是写了脚本运行:
import re
sss='''1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11 < MNBVCXZQWERTPOIUYALSKDJFHG < 12 < LVNCMXZPQOWEIURYTASBKJDFHG < 13 < JZQAWSXCDERFVBGTYHNUMKILOP <
'''
m="NFQKSEVOQOFNP"
content=re.findall(r'< (.*?) <',sss,re.S)
iv=[2,3,7,5,13,12,9,1,8,10,4,11,6]
vvv=[]
ans=""
for i in range(13):
index=content[iv[i]-1].index(m[i])
vvv.append(index)
for i in range(0,26):
flag=""
for j in range(13):
flag+=content[iv[j]-1][(vvv[j]+i)%26]
print flag
比较坑的点是最终flag是小写字母的形式。
flag:fireinthehole
通过在线工具解密出摩斯密码MAYBEHAVEANOTHERDECODEHHHHAAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA
根据莫斯密码的提示,这不是正确的flag,真正的flag隐藏在后边的AAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA
,很明显的培根密码形式,解密即得flag。
flag:cyberpeace{attackanddefenceworldisinteresting}
打开附件以后是明显的base64编码,使用burp suite解密以后得到
LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
Escape编码解密以后得到LzExOS8xMDEvMTA4Lzk5LzExMS8xMDkvMTAxLzExNi8xMTEvOTcvMTE2LzExNi85Ny85OS8xMDcvOTcvMTEwLzEwMC8xMDAvMTAxLzEwMi8xMDEvMTEwLzk5LzEwMS8xMTkvMTExLzExNC8xMDgvMTAw
是base64编码,解密得到/119/101/108/99/111/109/101/116/111/97/116/116/97/99/107/97/110/100/100/101/102/101/110/99/101/119/111/114/108/100
明显的ASCII编码,按照对应表解出welcometoattackanddefenceworld
flag:cyberpeace{welcometoattackanddefenceworld}
下载附件打开以后是要求输入flag的.pyc文件。.pyc是.py运行后的编译文件,是一种二进制文件。
经过在线.pyc反编译工具得到python的源码:
#!/usr/bin/env python
# encoding: utf-8
# 如果觉得不错,可以推荐给你的朋友!http://tool.lu/pyc
import base64
def encode1(ans):
s = ''
for i in ans:
x = ord(i) ^ 36
x = x + 25
s += chr(x)
return s
def encode2(ans):
s = ''
for i in ans:
x = ord(i) + 36
x = x ^ 36
s += chr(x)
return s
def encode3(ans):
return base64.b32encode(ans)
flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
print 'correct'
else:
print 'wrong'
补充:.pyc文件的反编译还可以利用uncompyle6。执行命令pip install uncompyle6
安装工具。执行命令uncompyle6 XXX.pyc
就可以完成反编译过程。
下面就是审计代码: 最终的flag首先经过加密方式1,然后方式2,最后方式3。所以解密的话,先3再2后1。
写脚本直接运行就可以出现flag
import base64
s="UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==="
s=base64.b32decode(s)
m = ''
for i in s:
x = ord(i) ^ 36
x = x - 36
m+= chr(x)
h = ''
for i in m:
x = ord(i) - 25
x = x ^ 36
h+= chr(x)
print h