← Back to Writeups
CUSTOMEasyMisc

iUseArchBTW

XESXOR9/2/20261 min read
#misc#custom#easy#ascii_shift_decode#custom_interpreter#esoteric_language_analysis#linux

iUseArchBTW

Platform: taipanbyte | Category: Misc | Type: Challenge | Difficulty: Easy | OS: Linux | Author: XESXOR | Date: 2026-01-23 | Status: Solved Techniques: ascii_shift_decode, custom_interpreter, esoteric_language_analysis

Summary

Given a file arch.archbtw with a custom extension, containing text with repeating words: "arch", "linux", "btw", "i", "the", "use", "way".

iUseArchBTW — 0xL4ugh CTF (taipanbyte)

Description

Given a file arch.archbtw with a custom extension, containing text with repeating words: "arch", "linux", "btw", "i", "the", "use", "way".

Analysis

This is a custom esoteric language built on the "I use Arch Linux BTW" meme. The structure resembles Brainfuck:

  • Each line is a separate operation
  • Words have semantic meaning:
    • arch = increment (+1)
    • linux = decrement (-1)
    • btw = output current accumulator value
  • Values accumulate line by line
  • Final values require a +35 shift to get ASCII characters ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Solution

python
#!/usr/bin/env python3
"""
iUseArchBTW - Custom Esoteric Language Interpreter
0xL4ugh CTF (taipanbyte)

Interpretation:
- "arch" = +1 (increment)
- "linux" = -1 (decrement)
- "btw" = output accumulator value
- ASCII shift: +35
"""

with open('arch.archbtw', 'r') as f:
    lines = f.readlines()

cell = 0
values = []

for line in lines:
    words = line.strip().split()
    # Count arch (+1) and linux (-1)
    cell += words.count('arch')
    cell -= words.count('linux')
    # btw = output current value
    if 'btw' in words:
        values.append(cell)
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

# Shift +35 to get ASCII characters
flag = ''.join(chr(v + 35) for v in values)
print(flag)

Esoteric Language Analysis Methodology

  1. Statistical analysis: count word/symbol frequency
  2. Pattern search: find repeating structures
  3. Semantic hypothesis: assume meaning for each token
  4. Testing: verify hypothesis on part of the data
  5. Shift selection: if result is not ASCII, try different offsets ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍