攻防世界——CRYPTO新手练习区解题总结<3>(9-12题)

第九题easychallenge

 

下载附件,得到一个后缀为pyc的文件,上网百度一下pyc文件,得知

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,运行加载的速度会有所提高;另一反面,把py文件编译为pyc文件,从而可以实现部分的源码隐藏,保证了python做商业化软件时的安全性

知道可将pyc反编译为py文件

pip install uncompyle6

安装好uncompyle6后,

输入命令uncompyle6 -o . 123.pyc

(123.py就是下载的附件)

 

 

 

 

 

 成功反编译,这时候可以看到文件夹中新出现的文件

 

 

 打开

 

 

得到密文,那么怎么解密呢?只要将整个程序的过程倒过来就可以了

该程序中存在异或与加运算,倒过来的时候异或还是异或,加变成减就可以了,大约就是这个样子

 

 

 运行一下,发现有错误

 

 

 

 好像在encode3(final)之后就出现了错误

输出encode3(final)看一下,原来encode3(final)返回的类型为types,而ord需要一个长度至少为1的字符串

 

 

 我们将encode3(final)是改成encode3(final).decode(),运行一下发现依然有错误

 

 

 说是'utf-8'不能解码0xa0,上网搜一下

UCS字符U+0000到U+007F(ASCII)被编码为字节0×00到0x7F(ASCIⅡ兼容)。

也就是只能解码0-127,而0xa0为160(不确定这个说法对不对)

上网再搜一下,找到

ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

发现这个ISO-8859-1能解码0xa0,用这个解码试一试

 

 可以运行了,得到flag

第十题转轮机加密

下载附件 ,得到密文

 

 由题目可是转轮机加密

转轮机密码,这里简单说一下,就像上面这个图,一共是给了十三行字母,我们还发现每一行字母都是完整的二十六个,那么我们就可以把这十三行字母看成是我们行李箱上的可以转动的密码锁(可以理解为密码是英文的行李箱密码锁),每一行都可以转啊转,每一列也就可以组成不同的字段(其中也就包含我们所需要的明文,也就相当于是我们行李箱上的正确密码),我们只需要转到正确的位置就是密码了。

那么怎么样才是正确的位置呢,这就需要密钥和密文了,我们可以发现密钥正好是十三行数字,密文也正好是十三个字母,这样的话只需要将密钥所对应的数字对准相应的行数,并将密文所对应的字母转到第一位(也就相当于密码锁要转到正确的位置上),最后将这十三行字母按照密钥的顺序排序。(可以理解为密码锁的转轮可以拆卸,且必须按照一定的顺序重新安装转轮,才能开锁,行李箱密码锁升级版)

如果还没明白的话我们手动解密一下

 

 

先以密钥的第一个数2,也就是以第二行为例

 

找到2对应的字母N,想象一下转轮的转动(首尾相接),将N转到第一位

 

 其余的也这么操作,解完后的结果

 

 

 当然这还没有完,还有最后一步(当做第一步也可以,没有影响)按照密钥的顺序对行排序

 这就是最后的结果,我们只需要找到里面有实际意义的一段话,那就应该是我们要找的flag了(即黄色标注部分)

第十一题Normal_RSA

 

下载附件,发现是一个压缩包,打开

 

 

 发现一个enc文件,一个pem文件,一个都不认识

上网查了一下,大约明白,flag.enc是一个加密文件,而pubkey.pem是公钥文件,我们需要解出私钥,解密flag.enc文件得到flag

这里我们需要虚拟机,以及一些工具

工具:虚拟机,rsatool.py,OpenSSL

首先我们用OpenSSL来看一下公钥

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

 

 Modulus就是n,Exponent就是e

用py直接将Modulus由十六进制转化为十进制

这时候就需要进行分解p,q了这里用这个网站分解

http://www.factordb.com/

分解得到p=275127860351348928173285174381581152299,q=319576316814478949870590164193048041239

关于rsatool.py的安装,(我是在虚拟机中安装的)

git clone https://github.com/ius/rsatool.git
cd rsatool
python setup.py install

安装成功后,我们就可以用rsatool来生成私钥了

 

 

python rsatool.py -f PEM -o private.pem -e 65537 -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239
//private为要生成的私钥文件的名字,可以随意取

最后一句为saving as PEM as xxx.pem(xxx为私钥文件的名称)时说明私钥生成成功

这里有一个我遇到的问题

 

 在博问中问过大神后得到答案,大家如果遇到相同的问题可以去看一下https://q.cnblogs.com/q/129227/

解出私钥后,我们用openssl解开falg.enc即可

 

 

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

解出flag

第十二题easy_ECC

 

需要工具:ecctool    下载链接:https://bbs.pediy.com/thread-66683.htm

下载附件,打开

 

 将所给的内容填进工具

 

因为给的数据都是十进制的记得将Numberbase16改成10 ,点击CALC R

得到Rx(x)和Ry(y)

 

 

 将其相加得到flag

CRYPTO新手练习区解题总结完。

 ps:本人新手一枚,写的题解呢也是以新人的口吻写的所以有许多地方不够专业,也可能还有许多错误,也请各位大佬多多包容,也欢迎各位大佬的指导。

posted @ 2020-09-19 17:38  Don_Joshua  阅读(643)  评论(0编辑  收藏  举报