#!/usr/bin/env python3
"""
Try all possible 7-bit alignments of the reversed 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 pattern (L=0, S=1)
pattern = ""
for l in lengths:
    pattern += "0" if l >= 256 else "1"

# Reverse it
reversed_binary = pattern[::-1]

print("=" * 80)
print("TRYING ALL 7-BIT OFFSETS ON REVERSED BINARY:")
print("=" * 80)

for offset in range(7):
    binary = reversed_binary[offset:]
    message = ""
    
    for i in range(0, len(binary) - 6, 7):
        byte_str = binary[i:i+7]
        if len(byte_str) == 7:
            decimal = int(byte_str, 2)
            if 32 <= decimal <= 126:
                message += chr(decimal)
    
    print(f"\nOffset {offset}: {message}")
    
    if "HTB{" in message:
        start = message.find("HTB{")
        end = message.find("}", start) + 1
        flag = message[start:end]
        print(f"\n🚩🚩🚩 FLAG FOUND at offset {offset}: {flag} 🚩🚩🚩")
        break

# Also try forward (non-reversed) with all offsets
print("\n" + "=" * 80)
print("TRYING ALL 7-BIT OFFSETS ON FORWARD BINARY:")
print("=" * 80)

for offset in range(7):
    binary = pattern[offset:]
    message = ""
    
    for i in range(0, len(binary) - 6, 7):
        byte_str = binary[i:i+7]
        if len(byte_str) == 7:
            decimal = int(byte_str, 2)
            if 32 <= decimal <= 126:
                message += chr(decimal)
    
    print(f"\nOffset {offset}: {message}")
    
    if "HTB{" in message:
        start = message.find("HTB{")
        end = message.find("}", start) + 1
        flag = message[start:end]
        print(f"\n🚩🚩🚩 FLAG FOUND at offset {offset}: {flag} 🚩🚩🚩")
        break
