[misc]上帝之音 400

0x00 已知条件

给了一个godwave.wav,还有两个提示。

0x01 解法过程

  • Hint1: 你们做音频题都不喜欢看时域图?
    根据这个,用Cooledit看一下时域波形,如下:

image.png

发现波形明显整过,赋值差异很明显,数出周期为64个点。第一次做音频题,看一下writeup,写个脚本把它提取成01序列:
写的过程中值得注意的是:横轴改成smpl,即采样点,每个单位对应一个实心点;纵轴改成norm,表示幅值。这样在编程时,每个点就是横轴对应waveData[i],纵轴对应norm。
另外,判断每周期的值时,本来采用的是计算平均值。后来简化计算改成全部求和,先看了一下低赋值周期最大值不超过0.035,那么64个点最多也就2.24。(不知道题解的这个10是怎么取的,可能是为保险取大点吧)

[Python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wave
import matplotlib.pyplot as plt
import numpy
import os

path = 'D:\PyCharm\Projects\CTF\Javis OJ\misc\god_wave\\'
wav = wave.open(path+'godwave.wav','rb')

params = wav.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]

strData = wav.readframes(nframes) #读取音频,字符串格式
waveData = numpy.fromstring(strData, dtype=numpy.int16) #上述字符串转int
waveData = waveData*1.0/(max(abs(waveData))) #wave幅值归一化,与Cool edit的norm纵轴数值一致

#将音频转化为01串
string = ''
norm = 0
for i in range(1735680):
    norm = norm+abs(waveData[i])
    if (i+1) % 64 == 0:
        if norm > 10:
            string += '1'
        else:
            string += '0'
        norm = 0

with open('01output.txt','w') as output:
    output.writelines(string)

在输出文件中写了一行01串。

  • Hint2: 在数据传输过程中,我们往往会使用一种自带时钟的编码以减少误码率
    搜索“自带时钟的编码”,说是曼彻斯特编码。写脚本把上面得到的01串做曼彻斯特解码,负电平为1,正电平 为0:
# -*- coding: utf-8 -*-
file_in = open('01output.txt','r')
code = file_in.readline()
file_in.close()
le = len(str(code))
print le
print code

result = ''
count = 0
res = 0
while code != '':
    cp = code[:2]
    if cp != '':
        if cp[0] == '0' and cp[1] == '1':
            res = (res<<1)|0
            count +=1
        if cp[0] == '1' and cp[1] == '0':
            res = (res<<1)|1
            count +=1
        if count == 8:
            result += chr(res)
            count = 0
            res = 0
    else:
        print 'Unexpected cp, exit!' # found '00' or '11', stop the script directly
        break

    code = code[2:]

with open('result.png','wb') as file_out:
    file_out.write(result)

一开始自己写的时候犯蠢,直接每两位出一位写到result里,写出来也打不开。
参(zhao)考(chao)题解用位运算, 逐字节(8位)转成字符写入。打开是个二维码,扫了即可。
也不知道题解怎么知道要存成PNG的……好吧自己试了一下只要是图片格式都能扫,随便选个格式就行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容