BUUCTF [SCTF2019]电单车详解两种方法(python实现绝对原创)
使用audacity打开,发现是一段PT2242 信号
PT2242信号 有长有短,短的为0,长的为1化出来
这应该是截获电动车钥匙发射出的锁车信号
0 01110100101010100110 0010 0 |
前四位为同步码0 。。。中间这20位为01110100101010100110为地址码 |
0010为功能码,最后一位0是停止码 |
答案就是flag{01110100101010100110} |
补充知识:PT2242 信号是一种编码信号,常用于遥控器等无线通信设备中。其信号格式具有特定的结构,具体信息如下:
- 同步码:前面 4 位是同步码,用于标识信号的开始,帮助接收设备识别并同步到信号的传输。
- 地址码:中间的 20 位是地址码,用于指定信号的接收对象或目标地址。不同的遥控器或设备可以通过设置不同的地址码来进行区分,以确保信号的准确传输和接收。
- 功能码:后面的 4 位是功能码,用于表示具体的操作指令或功能。例如,可能包括开关、调节音量、切换频道等不同的功能。
- 停止码:最后一位是停止码,作为信号的结束标志。
- 在对 PT2242 信号进行分析和处理时,需要根据这种特定的格式来解读信号中所包含的信息。比如在一些密码学或信号分析的题目中,会给出一段类似 PT2242 信号的编码,要求根据其格式特点来提取出地址码、功能码等关键信息。
---------------------------------------------------------------------------------------------------------------------------------以下是使用python脚本实现对从 wav 文件中提取PT2242 信号
import librosa
import librosa.display
import numpy as np
import matplotlib.pyplot as pltdef extract_signal_from_wav(file_path):y, sr = librosa.load(file_path)plt.figure(figsize=(14, 5))librosa.display.waveshow(y, sr=sr)plt.title('Waveform')plt.xlabel('Time (seconds)')plt.ylabel('Amplitude')# 假设 PT2242 信号具有特定的频率范围或幅度特征# 这里进行一些简单的幅度阈值判断作为示例threshold = 0.5 * np.max(y)signal_indices = np.where(np.abs(y) > threshold)[0]extracted_signal = y[signal_indices[0]:signal_indices[-1]]plt.figure(figsize=(14, 5))librosa.display.waveshow(extracted_signal, sr=sr)plt.title('Extracted Signal')plt.xlabel('Time (seconds)')plt.ylabel('Amplitude')plt.show()return extracted_signalwav_file_path = "attachment_2.wav"
extracted_signal = extract_signal_from_wav(wav_file_path)
运行结果
和audacity提取得结果一样