#!/usr/bin/env python3
"""
Decode the full S/L pattern as binary
"""

import struct

def parse_pcap(filename):
    with open(filename, 'rb') as f:
        f.read(24)
        packets = []
        while True:
            packet_header = f.read(16)
            if len(packet_header) < 16:
                break
            ts_sec, ts_usec, incl_len, orig_len = struct.unpack('IIII', packet_header)
            packet_data = f.read(incl_len)
            if len(packet_data) < incl_len:
                break
            packets.append(incl_len)
        return packets

lengths = parse_pcap('sniffed.pcap')

# Create S/L pattern
pattern = ""
for l in lengths:
    pattern += "L" if l >= 256 else "S"

print(f"Pattern ({len(pattern)} packets):")
print(pattern)
print()

# Convert to binary (S=0, L=1)
binary = pattern.replace('S', '0').replace('L', '1')
print(f"Binary: {binary}")
print()

# Decode as 8-bit ASCII
print("=" * 80)
print("DECODING AS 8-BIT ASCII:")
print("=" * 80)

message = ""
for i in range(0, len(binary), 8):
    byte_str = binary[i:i+8]
    if len(byte_str) == 8:
        decimal = int(byte_str, 2)
        char = chr(decimal) if 32 <= decimal <= 126 else f"[{decimal}]"
        message += char if 32 <= decimal <= 126 else ""
        print(f"Byte {i//8:2d}: {byte_str} -> {decimal:3d} -> {char}")

print("\n" + "=" * 80)
print("DECODED MESSAGE:")
print("=" * 80)
print(message)

if "HTB{" in message:
    start = message.find("HTB{")
    end = message.find("}", start) + 1
    flag = message[start:end]
    print(f"\n🚩 FLAG: {flag}")
else:
    print("\nNo HTB flag found. Trying reverse...")
    reversed_msg = message[::-1]
    print(f"Reversed: {reversed_msg}")
    if "HTB{" in reversed_msg:
        start = reversed_msg.find("HTB{")
        end = reversed_msg.find("}", start) + 1
        flag = reversed_msg[start:end]
        print(f"\n🚩 FLAG: {flag}")

# Also try L=0, S=1 (opposite)
print("\n" + "=" * 80)
print("TRYING OPPOSITE (L=0, S=1):")
print("=" * 80)

binary_opp = pattern.replace('L', '0').replace('S', '1')
message_opp = ""
for i in range(0, len(binary_opp), 8):
    byte_str = binary_opp[i:i+8]
    if len(byte_str) == 8:
        decimal = int(byte_str, 2)
        if 32 <= decimal <= 126:
            message_opp += chr(decimal)

print(f"Decoded: {message_opp}")

if "HTB{" in message_opp:
    start = message_opp.find("HTB{")
    end = message_opp.find("}", start) + 1
    flag = message_opp[start:end]
    print(f"\n🚩 FLAG: {flag}")
