Welcome Call!: VoIP Telephony Forensics & Audio Backmasking
Inspecting SIP handshakes and G.711 mu-law SDP parameters, extracting raw RTP voice streams via Python and Wireshark, and reversing audio backmasking in Audacity to recover the flag.
Step 1: SIP Handshake & Codec Triage
Analyzing `welcomecall.pcap` reveals a SIP voice call handshake on UDP port 5060. The SDP parameters specify a G.711 mu-law audio stream negotiated between ports 4000 and 4002.
from scapy.all import rdpcap, UDP
import audioop, wave
packets = rdpcap('welcomecall.pcap')
rtp_packets = []
for pkt in packets:
if UDP in pkt and (pkt[UDP].dport == 4002 or pkt[UDP].sport == 4000):
payload = bytes(pkt[UDP].payload)
if len(payload) > 12 and (payload[0] >> 6) == 2:
seq = int.from_bytes(payload[2:4], 'big')
cc = payload[0] & 0x0F
rtp_packets.append((seq, payload[12 + cc * 4:]))
rtp_packets.sort(key=lambda x: x[0])
raw_audio = b''.join([data for seq, data in rtp_packets])
# Convert G.711 mu-law into 16-bit linear PCM WAV
pcm_data = audioop.ulaw2lin(raw_audio, 2)
with wave.open('call.wav', 'wb') as wf:
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(8000)
wf.writeframes(pcm_data)
print(f"Extracted {len(rtp_packets)} RTP packets -> call.wav")Step 3: Audio Backmasking in Audacity
Playing `call.wav` plays an incomprehensible reversed speech pattern. Loading the file into Audacity, selecting all audio, and applying Effect → Reverse immediately produces clear spoken English: “Thank you for playing... The flag is sun open bracket thankyouforplaying close bracket”.
sun{thankyouforplaying}