← Back to Writeups
CUSTOMMediumMisc

Текст на клавишах (Text on Keys)

XESXOR9/2/20262 min read
#misc#custom#medium#t9-predictive-text-decoding#word-separator-identification-

Текст на клавишах (Text on Keys)

Platform: hackerlab | Category: Misc | Type: Challenge | Difficulty: Medium | OS: NA | Author: XESXOR | Date: 2025-12-26 | Status: Solved Techniques: T9 predictive text decoding, Word separator identification (0 = space)

Summary

Task: Decode a numeric string using T9 predictive text. Solution: Split by 0 (word separator) and map digits to letters using T9 keypad mapping to reveal the message.

Текст на клавишах (Text on Keys) - HackerLab

Description

Лишний помощник, который всех раздражает. Формат флага: CODEBY{flag}

File: text.txt contains the string 9680483773309428048047

Analysis

Hints in the Task

  1. Title "Text on Keys" - direct reference to text input on a phone keypad
  2. "Annoying helper" - description of T9 predictive text, which often suggested wrong words

T9 Predictive Text

T9 (Text on 9 keys) - predictive text input system on phones with numeric keypads: ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

2 = ABC    5 = JKL    8 = TUV
3 = DEF    6 = MNO    9 = WXYZ
4 = GHI    7 = PQRS   0 = SPACE

Unlike Multi-tap (where you need to press multiple times to select a letter), T9 uses a dictionary and each digit = one letter.

Decoding

String: 9680483773309428048047

Split by 0 (word separator):

  • 968 → YOU (9=Y, 6=O, 8=U)
  • 4837733 → GUESSED (4=G, 8=U, 3=E, 7=S, 7=S, 3=E, 3=D)
  • 9428 → WHAT (9=W, 4=H, 2=A, 8=T)
  • 48 → IT (4=I, 8=T)
  • 47 → IS (4=I, 7=S)

Message: "YOU GUESSED WHAT IT IS" ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Solution

python
#!/usr/bin/env python3
"""T9 Predictive Text Decoder"""

# T9 mapping (one digit = one letter, context-dependent)
# In T9, the system uses a dictionary to predict words
# Here we decode manually based on word patterns

encoded = "9680483773309428048047"

# Split by 0 (word separator)
words = encoded.split('0')
print(f"Words: {words}")

# T9 keypad
t9_map = {
    '2': 'ABC', '3': 'DEF', '4': 'GHI', '5': 'JKL',
    '6': 'MNO', '7': 'PQRS', '8': 'TUV', '9': 'WXYZ'
}

# Manual decoding based on common English words:
# 968 = YOU (Y=9, O=6, U=8)
# 4837733 = GUESSED (G=4, U=8, E=3, S=7, S=7, E=3, D=3)
# 9428 = WHAT (W=9, H=4, A=2, T=8)
# 48 = IT (I=4, T=8)
# 47 = IS (I=4, S=7)
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

decoded = "YOU GUESSED WHAT IT IS"
flag = "CODEBY{" + decoded.replace(" ", "").lower() + "}"
print(f"Message: {decoded}")
print(f"Flag: {flag}")

Difference from Multi-tap

CharacteristicT9Multi-tap
Presses per letter11-4
Uses dictionaryYesNo
Example "HELLO"435564433555555666
Separator0Pause or #

References

  • T9 Predictive Text
  • Similar task: Nokia 3310 (Multi-tap) ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍