在“实验吧”的做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的更多相关文章

  1. 实验吧CTF题库-安全杂项

    XDCTF misc200: 题目提示: 下载文件 用foremost分离文件 接下来用archpr 4.53进行明文攻击 先把00002700.zip中的readme.txt提取出来压缩成zip文件 ...

  2. Android毕业设计-微圈

    勤拂拭软件出品,必属精品 : 勤拂拭软件 去年做了一个类似于我的朋友圈的项目,主要功能就是用户可以实时发表自己的动态,好友可以评论点赞什么的,可以建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服 ...

  3. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...

  4. 20172332 2017-2018-2 《程序设计与数据结构》Java哈夫曼编码实验--哈夫曼树的建立,编码与解码

    20172332 2017-2018-2 <程序设计与数据结构>Java哈夫曼编码实验--哈夫曼树的建立,编码与解码 哈夫曼树 1.路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子 ...

  5. 基于STM32F1 的BASIC解码实验 vb basic 液晶显示执行过程及结果

    基于STM32F1 的BASIC解码实验 1.basic程序以文件形式存储 2.程序文件存储在sd卡 3.解释结果显示在液晶屏上 主函数部分 int main(void){ u16 i,j; dela ...

  6. 图像压缩编解码实验(DCT编码+量化+熵编码(哈夫曼编码))【MATLAB】

    课程要求 Assignment IV Transform + Quantization + Entropy Coding Input: an intra-frame or a residue pict ...

  7. 协议分析 - DHCP协议解码详解

    协议分析 - DHCP协议解码详解 [DHCP协议简介]         DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 ...

  8. 【图像处理】第三次实验:JPEG图像压缩

    1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...

  9. [python基础]关于中文编码和解码那点事儿

    我们在用python处理中文的时候,或多或少会遇到这样一些错误 常见错误1: SyntaxError: Non-ASCII character '\xe4' in file C 常见错误2: Unic ...

随机推荐

  1. #考研笔记#计算机之word问题

    Word 问题:1. 如何为文档加密保存?单击 office 按钮\另存为\工具按钮\常规选项\设置打开文件时的密码 2. 怎样在横格稿纸中录入古诗?单击 office 按钮\新建\模板\信纸\稿纸( ...

  2. 学习笔记TF040:多GPU并行

    TensorFlow并行,模型并行,数据并行.模型并行根据不同模型设计不同并行方式,模型不同计算节点放在不同硬伯上资源运算.数据并行,比较通用简便实现大规模并行方式,同时使用多个硬件资源计算不同bat ...

  3. 阻塞队列 BlockingQueue 详解

    转自:https://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&mid=2247487078&idx=2&sn=315f39b6d53 ...

  4. Angular + Websocket

    Angular使用RxJS,它本质上是一个反应式扩展的javascript实现.这是一个使用可观察序列组成异步和基于事件的程序的库,非常适合使用WebSockets. 简而言之,RxJS允许我们从we ...

  5. Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)

    類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...

  6. CANVAS笔记

    bglayer.add(bgimage) /*后面的层会覆盖前面的,所以要放在上面的,就要后面才添加!*/ bglayer.add(this.shape1) Layer.destroy() layer ...

  7. 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore

    大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore  . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...

  8. 利用 Chrome 原生功能截图网页全图

    打开你想截图的网页了,然后按下 F12(macOS 是 option + command + i)调出开发者工具,接着按「Ctrl + Shift + P」(macOS 是 command + Shi ...

  9. 洛谷P1443马的遍历

    传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...

  10. java中的exception stack有时候不输出的原因(转)

    原文  https://www.cnblogs.com/lemonlotus/p/5650687.html 有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerEx ...