当前位置: 首页 > news >正文

攻防世界题目练习——Crypto密码新手+引导模式(二)(持续更新)

题目目录

    • 1. 转轮机加密
    • 2. easychallenge

上一篇:攻防世界题目练习——Crypto密码新手+引导模式(一)(持续更新)

1. 转轮机加密

首先了解一下轮转机加密吧。
传统密码学(三)——转轮密码机

题目内容如下:

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 <
#可以看出,上面13行应该就是13个轮子了,每行有26个字母
密钥为:2,3,7,5,13,12,9,1,8,10,4,11,6
#上面密钥应该就是13个轮子的排列顺序
密文为:NFQKSEVOQOFNP

我们把它重新按照密钥顺序排列一下:

2:  < KPBELNACZDTRXMJQOYHGVSFUWI <
3:  < BDMAIZVRNSJUWFHTEQGYXPLOCK <
7:  < GWTHSPYBXIZULVKMRAFDCEONJQ <
5:  < IHFRLABEUOTSGJVDKCPMNZQWXY <
13< JZQAWSXCDERFVBGTYHNUMKILOP <
12< LVNCMXZPQOWEIURYTASBKJDFHG <
9:  < XPLTDSRFHENYVUBMCQWAOIKZGJ <
1:  < ZWAXJGDLUBVIQHKYPNTCRMOSFE <
8:  < NOZUTWDCVRJLXKISEFAPMYGHBQ <
10: < UDNAJFBOWTGVRSCZQKELMXYIHP <
4:  < RPLNDVHGFCUKTEBSXQYIZMJWAO <
11< MNBVCXZQWERTPOIUYALSKDJFHG <
6:  < AMKGHIWPNYCJBFZDRUSLOQXVET <

根据转轮密码机的定义,应该是第一个轮转一圈,第2个轮就会转一个字母,但是转的不到一圈的话第二个轮子也不会转,这样的周期下来,其实就和普通的密码锁随便转出来的结果是一样的我感觉。
还是有点搞不懂,但别人都是把每个轮的第一个字母转到和密码的排列一样的,然后再看哪一列是有意义的字母组合。
搞不懂,不想搞懂了,就这样记着吧:)。
脚本:

r = ["KPBELNACZDTRXMJQOYHGVSFUWI", "BDMAIZVRNSJUWFHTEQGYXPLOCK","GWTHSPYBXIZULVKMRAFDCEONJQ", "IHFRLABEUOTSGJVDKCPMNZQWXY","JZQAWSXCDERFVBGTYHNUMKILOP", "LVNCMXZPQOWEIURYTASBKJDFHG","XPLTDSRFHENYVUBMCQWAOIKZGJ", "ZWAXJGDLUBVIQHKYPNTCRMOSFE","NOZUTWDCVRJLXKISEFAPMYGHBQ", "UDNAJFBOWTGVRSCZQKELMXYIHP","RPLNDVHGFCUKTEBSXQYIZMJWAO", "MNBVCXZQWERTPOIUYALSKDJFHG","AMKGHIWPNYCJBFZDRUSLOQXVET"
]m = "NFQKSEVOQOFNP"
r2 = []
for i in range(13):index = r[i].index(m[i])#index()返回某个字符或字符串在所属字符串中第一次出现的位置r[i] = r[i][index:] + r[i][:index]
#print(r)
for i in range(26):s = ""for j in range(13):s += r[j][i]print(s.lower() + "\n")#s.lower()将所有的大写字母转成小写字母
#输出结果:
#nfqksevoqofnp
#ahgcxiusnwcbn
#ctwpcubfotuvy
#zetmdrmezgkcc
#dqhneyczuvtxj
#tgszrtqwtrezb
#rypqfawawsbqf
#xxywvsaxdcswz
#mpbxbbojczxed
#jlxygkigvqqrr
#qoiitjkdrkytu
#oczhydzljeips
#ykufhfgullzol
#hblrnhjbxmmio
#gdvlugxvkxjuq
#vmkamlpiiywyx
#sambkvlqsiaav
##fireinthehole##
##唯一一行有意义的字母##
#uzaulcdkfprst
#wvfoomsyaupka
#irdtpxrppdldm
#kncsjzfnmnnjk
#psegzphtyadfg
#bjojqqecgjvhh
#eunvaonrhfhgi
#lwjdwwymbbgmw

2. easychallenge

下载附件拿到了一个pyc文件,总记得之前在哪道题里见过,但是没找着,总之这是一个python类的文件,需要再反编译为py文件,搜到了可以在线网站解密:
python反编译 - 在线工具
这个网站提到,python文件在被import运行的时候会在同目录下编译一个pyc的文件(为了下次快速加载),这个文件可以和py文件一样使用,但无法阅读和修改。所以,再结合题目内容,我们要将它反编译为py文件再进行修改才能获得flag。
反编译后的py文件如下:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7import base64def encode1(ans):s = ''for i in ans:x = ord(i) ^ 36x = x + 25s += chr(x)return sdef encode2(ans):s = ''for i in ans:x = ord(i) + 36x = x ^ 36s += chr(x)return sdef 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'

代码里可以看到有3个encode加密函数,这几个加密函数都挺简单的,加密过程也很简单,在原来的代码基础上把过程或者运算操作反过来就好了。
解码脚本:

import base64def decode1(ans):s = ''for i in ans:x = ord(i) - 25x = x ^ 36s += chr(x)return sdef decode2(ans):s = ''for i in ans:x = i ^ 36x = x - 36s += chr(x)return sdef decode3(ans):return base64.b32decode(ans)flag = ' '
#print 'Please Input your flag:'
#flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
#s1=decode3(final)
#print(s1)
print(decode1(decode2(decode3(final))))
#输出结果:
#cyberpeace{interestinghhhhh}

decode2函数本来第一步按照原来encode2函数的写法应该是x=ord(i)^36,但是这样会报错:
在这里插入图片描述
说是ord() expected string of length 1, but int found。于是我们单独输出decode3之后的结果看看:
在这里插入图片描述
其实我并不理解输出的结果是什么类型,看到 \x 感觉是十六进制,但是又出现了字母Z,报错也说是int类型。
decode2处理的就是decode3之后的内容,既然decode3之后的内容是int类型,我们在decode2处就不需要进行ord()转整型了。

http://www.lryc.cn/news/191191.html

相关文章:

  • LeetCode【1】两数之和
  • 【运维笔记】VMWare 另一个程序已锁定文件的一部分,进程无法访问
  • [Springboot]统一响应和异常处理配置
  • Redis第四五六章 持久化事务主从复制
  • 【强烈推荐】免费的PDF工具,包括PDF拆分/分割、转WORD等功能的免费在线软件工具,救了大命,找了半天什么pdf365、福xipdf、还有哔果pdf全是打着免费名义收费,烦死了
  • SpringMVC源码分析(二)启动过程之RequestMappingHandlerMapping分析
  • KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7)
  • 2023 年 Arm A-Profile 架构发展
  • 2023年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • CentOS系统/root根目录扩容(扩展逻辑卷)
  • 苍穹外卖(三) 员工分页及技术实现细节
  • 二进制部署MySQL8.0
  • 全力以赴,火山引擎边缘云代表团出战亚运会
  • WPF页面向后端传参
  • PyTorch 入门
  • 微信自动批量添加好友的方法
  • [网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看
  • 生态兼容性进一步提升!白鲸开源 WhaleStudio 与火山引擎ByteHouse完成产品互认
  • iOS 内存管理和优化
  • 常见工具指令【Vim | GIT | ZIP | UNZIP | IDEA】
  • 中国人民大学与加拿大女王大学金融硕士——顺势而为,掌握人生的方向盘
  • Apache Ranger:(二)对Hive集成简单使用
  • 【angular】实现简单的angular国际化(i18n)
  • Redis之主从复制,哨兵模式,集群
  • 掌动智能浅析Web自动化测试的重要性
  • JTS: 12 Descriptions 图形覆盖
  • 业务安全五重价值:防攻击、保稳定、助增收、促合规、提升满意度
  • shiro反序列化和log4j
  • 『Linux项目自动化构建工具』make/Makefile
  • github提示Permission denied (publickey),如何才能解决