#!/usr/bin/env python3
"""
Try reading the binary pattern in reverse and with different alignments
"""

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 pattern (L=0, S=1 based on previous results)
pattern = ""
for l in lengths:
    pattern += "0" if l >= 256 else "1"

print(f"Binary pattern ({len(pattern)} bits):")
print(pattern)
print()

# Try reading backwards
reversed_binary = pattern[::-1]
print(f"Reversed binary:")
print(reversed_binary)
print()

# Decode reversed binary as 7-bit ASCII
print("=" * 80)
print("DECODING REVERSED BINARY AS 7-BIT ASCII:")
print("=" * 80)

message = ""
for i in range(0, len(reversed_binary) - 6, 7):
    byte_str = reversed_binary[i:i+7]
    if len(byte_str) == 7:
        decimal = int(byte_str, 2)
        char = chr(decimal) if 32 <= decimal <= 126 else f"[{decimal}]"
        message += char if 32 <= decimal <= 126 else ""
        print(f"Bits {i:3d}-{i+6:3d}: {byte_str} -> {decimal:3d} -> {char}")

print(f"\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 FOUND: {flag} 🚩🚩🚩")
else:
    print("\nSearching for partial flag markers...")
    if "HTB" in message:
        print(f"Found 'HTB' at position {message.find('HTB')}")
    if "{" in message:
        print(f"Found '{{' at position {message.find('{')}")
    if "}" in message:
        print(f"Found '}}' at position {message.find('}')}")
    
    # Maybe the message itself IS the full flag
    print(f"\nFull decoded text: '{message}'")
