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
先记录在这里吧!