XCTF攻防世界Crypto

幂数加密

在这里插入图片描述下载附件有一串数字8842101220480224404014224202480122
根据0的个数以及题目的提示,把数串分成8组,每组对应的数字分别求和就是对应的字母顺序。
flag:cyberpeace{WELLDONE}

base64

在这里插入图片描述

下载附件后得到一串base64编码串Y3liZXJwZWFjZXtXZWxjb21lX3RvX25ld19Xb3JsZCF9,解码即得flag

在这里插入图片描述
flag:cyberpeace{Welcome_to_new_World!}

Caesar

在这里插入图片描述凯撒密码解密脚本:

#include <stdio.h>
#include <string.h>

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<strlen(passwd); i++)
        {
            if(passwd[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}

Morse

在这里插入图片描述
对照摩尔斯编码表,1代表杠,0代表点解密即可。
在这里插入图片描述得到flag:cyberpeace{morsecodeissointeresting}

Railfence

在这里插入图片描述使用在线工具很轻松解出来密码
在这里插入图片描述得到flag:

转轮机加密

在这里插入图片描述首先是转轮机密码的介绍:
转轮密码机是由一个输入键盘和一组转轮组成,每个转轮上标有有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

easy_RSA

在这里插入图片描述

不仅仅是Morse

在这里插入图片描述
通过在线工具解密出摩斯密码MAYBEHAVEANOTHERDECODEHHHHAAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA
根据莫斯密码的提示,这不是正确的flag,真正的flag隐藏在后边的AAAAABAABBBAABBAAAAAAAABAABABAAAAAAABBABAAABBAAABBAABAAAABABAABAAABBABAAABAAABAABABBAABBBABAAABABABBAAABBABAAABAABAABAAAABBABBAABBAABAABAAABAABAABAABABAABBABAAAABBABAABBA,很明显的培根密码形式,解密即得flag。
在这里插入图片描述
flag:cyberpeace{attackanddefenceworldisinteresting}

混合编码

在这里插入图片描述打开附件以后是明显的base64编码,使用burp suite解密以后得到

&#76;&#122;&#69;&#120;&#79;&#83;&#56;&#120;&#77;&#68;&#69;&#118;&#77;&#84;&#65;&#52;&#76;&#122;&#107;&#53;&#76;&#122;&#69;&#120;&#77;&#83;&#56;&#120;&#77;&#68;&#107;&#118;&#77;&#84;&#65;&#120;&#76;&#122;&#69;&#120;&#78;&#105;&#56;&#120;&#77;&#84;&#69;&#118;&#79;&#84;&#99;&#118;&#77;&#84;&#69;&#50;&#76;&#122;&#69;&#120;&#78;&#105;&#56;&#53;&#78;&#121;&#56;&#53;&#79;&#83;&#56;&#120;&#77;&#68;&#99;&#118;&#79;&#84;&#99;&#118;&#77;&#84;&#69;&#119;&#76;&#122;&#69;&#119;&#77;&#67;&#56;&#120;&#77;&#68;&#65;&#118;&#77;&#84;&#65;&#120;&#76;&#122;&#69;&#119;&#77;&#105;&#56;&#120;&#77;&#68;&#69;&#118;&#77;&#84;&#69;&#119;&#76;&#122;&#107;&#53;&#76;&#122;&#69;&#119;&#77;&#83;&#56;&#120;&#77;&#84;&#107;&#118;&#77;&#84;&#69;&#120;&#76;&#122;&#69;&#120;&#78;&#67;&#56;&#120;&#77;&#68;&#103;&#118;&#77;&#84;&#65;&#119;

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}

easychallenge

在这里插入图片描述下载附件打开以后是要求输入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

在这里插入图片描述
flag:cyberpeace{interestinghhhhh}

猜你喜欢

转载自blog.csdn.net/weixin_44236278/article/details/102907842