xctf攻防世界 CRYPTO薪手练习区

1. base64

题目给了一个附件,以为txt形式给出,题目为base64,猜测是base64编码,放入hackbar中或者在线base64解码中,直接解码即可。结果如图:
在这里插入图片描述
最终答案为:cyberpeace{Welcome_to_new_World!}

2. Caesar

题目给了一个txt文本文档,题目提示是凯撒,猜测是凯撒密码替换。https://www.qqxiuzi.cn/bianma/kaisamima.php
在这里插入图片描述
最终答案为:cyberpeace{you_have_learned_caesar_encryption}

3. Morse

题目给的附件是一个txt文本,全是01代码:
在这里插入图片描述
题目提示摩斯电码,使用txt文本,替换1为-,0为.,空格替换成/,得到替换的信息:

在这里插入图片描述
尝试在线解析,https://tool.lu/morse/
得到答案为:MORSECODEISSOINTERESTING

尝试将其转成小写字符,得到最终答案:cyberpeace{morsecodeissointeresting}

4. 幂数加密

题目给的是一串数字:8842101220480224404014224202480122,观察发现,数字只有1,2,4,8几个,也就是所有数字都可以用幂数进行表示,如15=2 ^ 0 + 2 ^ 1 + 2 ^ 2 + 2 ^ 3。

原以为本题就到这里就可以了,原来其含义并不是考察幂数加密,只是简单的数字转换,以0为分隔符号,将得到的数字对照字母表,最终得到答案。

data = '8842101220480224404014224202480122'.split('0')

res = ''
for i in range(len(data)):
    temp_sum = 0
    for j in range(len(data[i])):
        temp_sum += int(data[i][j])
    res += chr(64 + temp_sum)
    print(temp_sum, chr(64 + temp_sum))
print(res)

在这里插入图片描述
最终答案为:cyberpeace{WELLDONE}

5. Railfence

题目给的是一个附件:ccehgyaefnpeoobe{lcirg}epriec_ora_g,题目提示Railfence(栅栏),且农妇在栅栏里面喂5只小鸡,尝试每组字数为5进行解密:
在这里插入图片描述
emmm,看完wp才知道,本题考察栅栏宽度为5的W栅栏变种:

在这里插入图片描述
最终答案为:cyberpeace{railfence_cipher_gogogo}

6. 不仅仅是Morse

题目给的一串摩斯电码,尝试在线解析:https://www.bejson.com/enc/morse/,解码结果如下:
在这里插入图片描述
一串字符,后面的部分只有A、B两种字符,猜测可能是见过的培根加密,对照培根加密对照表:
在这里插入图片描述
使用在线培根解密http://www.hiencode.com/baconian.html
在这里插入图片描述
最终答案为:cyberpeace{attackanddefenceworldisinteresting}

7. 混合编码

题目给了一串字符,以==结束,尝试base64解码:
在这里插入图片描述
明显Unicode解码:
在这里插入图片描述
还没有正确答案,尝试再次base64试试:
在这里插入图片描述
带斜杠的,明显是ASCII码,脚本处理:

s = '/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'
data = s.lstrip('/').split('/')

flag = ''
for i in range(len(data)):
    flag += chr(int(data[i]))

print(flag)

最终答案为:cyberpeace{welcometoattackanddefenceworld}

8. easy_RSA

题目给了rsa的基本参数,需要求解处密钥,先了解一下RSA:
在这里插入图片描述
上代码:

import math

p = 473398607161
q = 4511491
Phi = (p - 1) * (q - 1)


def Euler_d(e, Phi, k):
    k += 1
    if math.gcd(e, Phi) == 1:
        while True:
            if (k * Phi + 1) % e == 0:
                (d, _) = divmod((k * Phi + 1), e)
                break
    else:
        d = '无解!!!'
    return d

# 不断尝试,
res = Euler_d(e=17, Phi=Phi, k=0)
print(res)

最终的答案为:cyberpeace{125631357777427553}

9. easychallenge

题目给出的是pyc文件,.pyc文件是什么呢?pyc文件中主要包含的是python的字节码。字节码就是由一种由指定的软件解释器来执行的指令集,是一种介于机器码和高级语言的中间代码,比机器码更抽象,但也比高级语言更接近底层。pyc文件虽然不是可执行文件,但也是经过编译了,我们是看不懂的,需要一个反编译来帮我们得到源码。

我们使用Python的反编译包,安装命令:

pip install uncompyle

对文件进行反编译:

uncompyle6 42aa1a89e3ae48c38e8b713051557020.pyc > res.py

得到res.py文件,查看其中的源码,如下:

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'
# okay decompiling 42aa1a89e3ae48c38e8b713051557020.pyc

看完代码后发现是对final字符进行encode1、encode2、encode3进行一步步编码,flag后得到包装final字符。那么如何得flag,那么将反过来操作,先decode1、decode2、decode3后得到最终的flag,同时也需要修改相应的解码函数,如下:

mport base64

def decode1(ans):
    s = ''
    for i in ans:
        x = ord(i) - 25
        x = x ^ 36
        s += chr(x)

    return s


def decode2(ans):
    s = ''
    for i in ans:
        x = ord(i) ^ 36
        x = x - 36
        s += chr(x)

    return s


def decode3(ans):
    return base64.b32decode(ans)

final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
flag = decode1(decode2(decode3(final)))
print flag

运行后得出最终的答案:cyberpeace{interestinghhhhh}

10. 转轮机加密

题目给出了一个txt文档如图:
在这里插入图片描述
题目提示,托马斯-杰斐逊—美利坚合众国第三任总统(1801年─1809年),同时也是《美国独立宣言》主要起草人,美国开国元勋之一,与乔治·华盛顿、本杰明·富兰克林并称为美利坚开国三杰。
好吧,学习了历史,但是现在的问题是如何轮转?看了看wp后,才知道题目是让对字符进行轮转,其实就是根据秘钥的顺序,重新排列给的字符:
在这里插入图片描述
其次根据密文依次循环移位:
在这里插入图片描述
将字符提出来方便查看,如图:
在这里插入图片描述
将每一列的内容单独提取出来,得到如下结果:

第1 列 :  NFQKSEVOQOFNP
第2 列 :  AHGCXIUSNWCBN
第3 列 :  CTWPCUBFOTUVY
第4 列 :  ZETMDRMEZGKCC
第5 列 :  DQHNEYCZUVTXJ
第6 列 :  TGSZRTQWTREZB
第7 列 :  RYPQFAWAWSBQF
第8 列 :  XXYWVSAXDCSWZ
第9 列 :  MPBXBBOJCZXED
第10列 :  JLXYGKIGVQQRR
第11列 :  QOIITJKDRKYTU
第12列 :  OCZHYDZLJEIPS
第13列 :  YKUFHFGULLZOL
第14列 :  HBLRNHJBXMMIO
第15列 :  GDVLUGXVKXJUQ
第16列 :  VMKAMLPIIYWYX
第17列 :  SAMBKVLQSIAAV
第18列 :  FIREINTHEHOLE
第19列 :  UZAULCDKFPRST
第20列 :  WVFOOMSYAUPKA
第21列 :  IRDTPXRPPDLDM
第22列 :  KNCSJZFNMNNJK
第23列 :  PSEGZPHTYADFG
第24列 :  BJOJQQECGJVHH
第25列 :  EUNVAONRHFHGI
第26列 :  LWJDWWYMBBGMW

第18列发现fire in the hole!!!关于战争的常用词。因此本题的最终答案为:fireinthehole

11. Normal_RSA

进入环境,发现给的是压缩包,其中一个是.pem文件,一个是.enc文件。经过查阅后,enc是一个通过openssl加密后生成的文件,而pem是一个公钥信息文件。一般是用私钥和去解出加密文件。
由于涉及到较多知识盲区,看完wp后进行总结!

在kali中查看pem文件:

openssl rsa -pubin  -text -modulus -in warmup -in pubkey.pem

如图:
在这里插入图片描述
其中Module是p*q的值,而Exponent则是RSA算法中的e。我们先对Module进行质因数分解,使用在线分解http://www.factordb.com/,结果如图:
在这里插入图片描述
得到
p = 275127860351348928173285174381581152299
q = 319576316814478949870590164193048041239
e = 65537

既然有了公钥的分解信息,那我们得尝试生成私钥:

python3 -m pip install gmpy

其次再进行分解:

python rsatool.py -f PEM -o private.pem -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239 -e 65537

生成private.pem文件
使用私钥pem文件对加密信息解密即可:

openssl rsautl -decrypt -in flag.enc -inkey private.pem

最终答案为:PCTF{256b_i5_m3dium}

12. easy_ECC

这个题算了吧,我是真看不懂。。。贴个大佬的链接:

  • https://www.jianshu.com/p/e41bc1eb1d81
  • https://blog.csdn.net/weixin_39934520/article/details/121772659

先记录在这里吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值