پرش به محتویات

چالش Intercepted Transmissions


challenge cover.png

فایل تکست ضمیمه‌شده به چالش شامل یکسری صفر و یک متوالی هست. با توجه به توضیح سوال، هینتی که وجود داره اینه که این رشته احتمالا با استفاده از روش CCIR476 که یک انکدینگ قدیمی برای انتقال داده‌ها در ارتباطات رادیویی با قابلیت تشخیص و اصلاح خطاهای یک بیتی هست کد شده. برای آشنایی بیشتر با این روش کد کردن و چگونگی نوشتن کد انکودر و دیکودر، می‌تونین از لینک ۱ و لینک ۲ و لینک ۳ استفاده کنید.

یک اسکریپت پایتون می‌نویسیم که طبق اون لینک‌های مرجع هندل کنه دیکود کردن این رشته باینری رو به صورت بلاک‌های ۵ بیتی.

class CCIR476:
    def __init__(self):
        self.CCIR_MODE = 1  # Default to letter mode
        self.OLD_MODE = 1

    def decode(self, CCIR):
        if CCIR == 0x78: return '\r'  # CR
        if CCIR == 0x6C: return '\n'  # LF
        if CCIR == 0x5C: return ' '   # SP
        if CCIR == 0x0F: return ''    # ALPHA
        if CCIR == 0x33: return ''    # BETA
        if CCIR == 0x66: return ''    # REP
        if CCIR == 0x5A:
            self.CCIR_MODE = 1
            return ''
        if CCIR == 0x36:
            self.CCIR_MODE = 0
            return ''

        if self.CCIR_MODE == 1:
            return self.decode_letter_mode(CCIR)
        else:
            return self.decode_figure_mode(CCIR)

    def decode_letter_mode(self, CCIR):
        letter_mode_mapping = {
            0x47: 'A', 0x72: 'B', 0x1D: 'C', 0x53: 'D', 0x56: 'E', 0x1B: 'F', 0x35: 'G', 0x69: 'H',
            0x4D: 'I', 0x17: 'J', 0x1E: 'K', 0x65: 'L', 0x39: 'M', 0x59: 'N', 0x71: 'O', 0x2D: 'P',
            0x2E: 'Q', 0x55: 'R', 0x4B: 'S', 0x74: 'T', 0x4E: 'U', 0x3C: 'V', 0x27: 'W', 0x3A: 'X',
            0x2B: 'Y', 0x63: 'Z'
        }
        return letter_mode_mapping.get(CCIR, '')

    def decode_figure_mode(self, CCIR):
        figure_mode_mapping = {
            0x2D: '0', 0x2E: '1', 0x27: '2', 0x56: '3', 0x55: '4', 0x74: '5', 0x2B: '6', 0x4E: '7',
            0x4D: '8', 0x71: '9', 0x4B: "'", 0x1B: '!', 0x1D: ':', 0x1E: '(', 0x35: '&', 0x39: '.',
            0x3A: '/', 0x3C: '=', 0x47: '-', 0x53: '$', 0x59: ',', 0x63: '+', 0x65: ')', 0x69: '#',
            0x72: '?'
        }
        return figure_mode_mapping.get(CCIR, '')

def ccir476_decode(binary_string):
    n = 7
    segments = [int(binary_string[i:i+n], 2) for i in range(0, len(binary_string), n)]

    decoder = CCIR476()
    decoded_message = ''.join([decoder.decode(segment) for segment in segments])

    return decoded_message

binary_string = "101101001101101101001110100110110101110100110100101101101010110101110010110100101110100111001101100101101101101000111100011110011011010101011001011101101010010111011100100011110101010110110101011010111001011010110100101101101010110101101011001011010011101110001101100101110101101010110011011100001101101101101010101101101000111010110110010111010110101100101100110111101000101011101110001101101101001010111001011101110001010111001011100011011"
decoded_message = ccir476_decode(binary_string)
print(decoded_message)

فلگ زیر پس از اجرای کد به نمایش در می‌آید.


FLAG 🚩

DUCTF{##TH3 QU0KK4'S AR3 H3LD 1N F4C1LITY #11911!}

نویسنده

Sadegh