实验吧“解码磁带”的write up
在“实验吧”的做CTF题时遇到的一道题,地址在这里:http://ctf5.shiyanbar.com/misc/cidai.html
因为正在学python,做这道题的时候正好用python写个简单程序辅助做题,将学到的知识用入实战,巩固一下python知识
感觉收获挺大,故此写下这篇随笔记录下。
----------------------------------------------------------华丽的分割线--------------------------------------------------------------------------
1.看题
首先题目给出的编码只有字符 'o' 和下划线 '_' ,可以很容易联想到二进制

接着观察样码,共有8行刚好对应 'Beijing' 有8个字符,并且每行只有7个字符,若表示成二进制刚好符合ASCII编码。
于是可以确定每一行可以转成一个二进制再通过ASCII编码转成字符
那么问题就来了是o代表0,_代表1呢?
还是o代表1,_代表0呢?
所以我们需要通过样码来确定
2.敲代码
这么多的符号,要是手动一个一个改成0,1再查ASCII码改成字符肯定不现实
而最近正好在学python,于是正好用python写一个小程序来实现这些功能 来练练手
我敲的代码如下:
#coding=UTF-8
filename='2.txt'
with open(filename,'r') as file:
lines=file.readlines()
n=len(lines)
i=0 # 将o_码转为二进制码并写入文档
for i in range(0,n):
lines[i].rstrip('\n')
lines[i]=lines[i].replace('o','')
lines[i]=lines[i].replace('_','')
with open(filename,'a') as file:
file.write('\n\n')
for line in lines:
file.write(line) # 网上扒的一个将二进制串转为字符串的函数
def decode(s):
return ''.join([chr(m) for m in [int(b, 2) for b in s.split(' ')]]) for i in range(0,n):
lines[i]=decode(lines[i]) # 将解码后的字符串写入文档
with open(filename,'a') as file:
file.write('\n\n')
for line in lines:
file.write(line)
(如果对于代码有更好的建议可以告诉我)
这里先假设 'o'-->0,'_'-->1
3.解码
将样码放进2.txt文档里,执行后

打开2.txt,结果最后一行乱码了,说明假设错误,应当是'0'-->1,'_'-->0
修改代码后

成功了,得到了我们想要的结果
然后将需要解码的那一段放进1.txt里,执行就能得到结果

4.总结:
虽然这个题本身是很简单的,解题过程也是很简单的,对于一些大佬来说是完全不起眼的小题。但是对于小菜鸟的我来说,通过最近正学的python辅助解题的这个过程很有意义的。在写python代码的过程中,遇到的一些坎,在百度的过程中,一方面了解了很多还不知道的知识,另一方面还熟悉了一些代码,比如数据类型的转换,文件操作等。
总之,学习需要一点一点地积累。
Where there is a will,there is a way!
实验吧“解码磁带”的write up的更多相关文章
- 实验吧CTF题库-安全杂项
XDCTF misc200: 题目提示: 下载文件 用foremost分离文件 接下来用archpr 4.53进行明文攻击 先把00002700.zip中的readme.txt提取出来压缩成zip文件 ...
- Android毕业设计-微圈
勤拂拭软件出品,必属精品 : 勤拂拭软件 去年做了一个类似于我的朋友圈的项目,主要功能就是用户可以实时发表自己的动态,好友可以评论点赞什么的,可以建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服 ...
- Verilog HDL那些事_建模篇笔记(实验八:键盘解码)
1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...
- 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码
20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...
- 基于STM32F1 的BASIC解码实验 vb basic 液晶显示执行过程及结果
基于STM32F1 的BASIC解码实验 1.basic程序以文件形式存储 2.程序文件存储在sd卡 3.解释结果显示在液晶屏上 主函数部分 int main(void){ u16 i,j; dela ...
- 图像压缩编解码实验(DCT编码+量化+熵编码(哈夫曼编码))【MATLAB】
课程要求 Assignment IV Transform + Quantization + Entropy Coding Input: an intra-frame or a residue pict ...
- 协议分析 - DHCP协议解码详解
协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...
- 【图像处理】第三次实验:JPEG图像压缩
1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...
- [python基础]关于中文编码和解码那点事儿
我们在用python处理中文的时候,或多或少会遇到这样一些错误 常见错误1: SyntaxError: Non-ASCII character '\xe4' in file C 常见错误2: Unic ...
随机推荐
- MyCat配置详解
MyCAT 配置解析 server.xml Mycat的配置文件,设置账号.参数等schema.xml Mycat对应的物理数据库和数据库表的配置rule.xml Mycat分片(分库分表)规则 一 ...
- bzoj 2460 线性基
#include<bits/stdc++.h> #define ll long long #define LL long long #define int long long using ...
- 前端基础----CSS语法、CSS四种引入方式、CSS选择器、CSS属性操作
一.CSS语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 例如: h1 {color:red; font-size:14px;} 二.CSS四种引入方式 1,行内式 行内式是在标 ...
- Go Example--组合函数
package main import ( "fmt" "strings" ) func Index(vs []string, t string) int { ...
- Python垃圾回收详解:引用计数+标记清理+分代回收
Python采用的是引用计数机制为主,标记-清理和分代收集两种机制为辅的策略. 1.引用计数 python中一切皆对象,所以python底层计数结构地就可以抽象为: 引用计数结构体{ 引用计数; 引用 ...
- zabbix自动发现zabbix_agent后添加到所属组和链接到某些模块(九)
自动发现的两个操作:discovery(自动发现) and actions(发现后执行某个操作) 需求: 1:自动发现 Zabbix agent运行的主机 2:执行的动作 1)添加到所属组 ...
- 1、Sql-oracle-日期问题
1.月份差 --MONTHS_BETWEEN(date2,date1) select months_between('19-12月-1999','19-3月-1999') from dual; sel ...
- oracle中如何修改用户名和密码
1.以Windows操作系统为例,打开命令提示符,输入命令sqlplus /nolog ,进入oracle控制台,并输入 conn /as sysdba;以DBA角色进入. 2.连接成功后,输入“se ...
- 依赖、耦合、解耦、控制反转(IOC)、依赖注入(DI)
随着net的深入学习,出现了很多概念性的东西需要理解,现在统一记录一下. 1.依赖:现阶段在任何一个有请求作用的系统,都会出现A类调用B类的情况,这时候A类就依赖于B类,A类和B类存在依赖关系. 2. ...
- phpize是什么
安装php(fastcgi模式)的时候,常常有这样一句命令:/usr/local/webserver/php/bin/phpize一.phpize是干嘛的?phpize是什么东西呢?php官方的说明: ...