← Back to Writeups
CUSTOMEasyMisc

Nokia 3310

XESXOR9/2/20263 min read
#misc#custom#easy#t9/multi-tap-phone-keypad-deco#character-position-mapping-by-

Nokia 3310

Platform: hackerlab.pro | Category: Misc | Type: Challenge | Difficulty: Easy | OS: NA | Author: XESXOR | Date: 2025-12-24 | Status: Solved Techniques: T9/Multi-tap phone keypad decoding, Character position mapping by digit repetition count

Summary

Позвони мне (Call me)

Nokia 3310 - hackerlab.pro

Description

Позвони мне (Call me)

Flag format: CODEBY{text}

Files

  • nokia3310.txt:
888 33 777 999 0 777 88 4 4 33 3 0 7 44 666 66 33

Analysis

The task name "Nokia 3310" and description "Позвони мне" (Call me) clearly point to T9/Multi-tap encoding - a text input method on old phones with numeric keypads.

T9 Keypad Mapping

On Nokia phones, each digit corresponds to several letters:

DigitLetters
2A B C
3D E F
4G H I
5J K L
6M N O
7P Q R S
8T U V
9W X Y Z
0(space)
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Number of presses determines the letter:

  • 1 press = first letter
  • 2 presses = second letter
  • 3 presses = third letter
  • etc.

Decoding

GroupDigitCountLettersResult
88883T,U,VV
3332D,E,FE
77773P,Q,R,SR
99993W,X,Y,ZY
001(space)_
77773P,Q,R,SR
8882T,U,VU
441G,H,IG
441G,H,IG
3332D,E,FE
331D,E,FD
001(space)_
771P,Q,R,SP
4442G,H,IH
66663M,N,OO
6662M,N,ON
3332D,E,FE
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

Result: REDACTED

This is a reference to the legendary durability of the Nokia 3310!

Solution

Python script

python
#!/usr/bin/env python3
"""Nokia 3310 T9/Multi-tap decoder"""

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

encoded = "888 33 777 999 0 777 88 4 4 33 3 0 7 44 666 66 33"
groups = encoded.split(' ')

result = ""
for group in groups:
    if not group:
        continue
    digit = group[0]
    count = len(group)
    
    if digit == '0':
        result += ' '
    elif digit in keypad:
        letters = keypad[digit]
        # Index = (number of presses - 1) mod length of letter string
        result += letters[(count - 1) % len(letters)]
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

print(f"Decoded: {result}")
print(f"Flag: CODEBY{{{result.lower()}}}")

Output

Decoded: REDACTED
Flag: CODEBY{REDACTED}

References

  • T9 (predictive text)
  • Multi-tap
  • Nokia 3310 ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍