Base100 (Emoji Encoding)
Base100 (Emoji Encoding)
Platform: CUSTOM | Category: Crypto | Type: Challenge | Difficulty: Easy | OS: N/A | **Author: XESXOR Techniques: base100_decode, brute_force_offset, codepoint_offset, emoji_decode
Summary
Walkthrough of the CUSTOM Crypto Base100 (Emoji Encoding). Task: Decode an all-emoji encoded message. Solution: Identify Base100 encoding by analyzing emoji codepoint range (U+1F427-U+1F474), find the decoding formula ASCII = codepoint - 0x1F427 + 48 by match
Description
The task name and description were both encoded entirely in emoji:
- Task name:
πΉππͺππ¨π§π§ - Description:
ππΉπ²ππΌπππππΌππππΌπ€π§π‘π πππ£π·ππ΄
Flag format: TB{...}
Analysis
- Both the task name and description consist entirely of emoji characters
- All emoji fall in a narrow Unicode range: U+1F427 (π§) to U+1F474 (π΄)
- There are 21 unique emoji across both strings
- The narrow range suggests a simple offset-based encoding β each emoji maps to one ASCII character
- The key insight: the task name itself is the hint. Once decoded, it reads "Base100" β a known encoding scheme that maps ASCII to emoji ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Codepoint Mapping
| Emoji | Codepoint | Offset from U+1F427 | + 48 (ASCII '0') | Character |
|---|---|---|---|---|
| π§ | U+1F427 | 0 | 48 | 0 |
| π¨ | U+1F428 | 1 | 49 | 1 |
| πΉ | U+1F439 | 18 | 66 | B |
| π | U+1F44B | 36 | 84 | T |
| π | U+1F444 | 29 | 77 | M |
| πΌ | U+1F43C | 21 | 69 | E |
| π | U+1F446 | 31 | 79 | O |
| π | U+1F44E | 39 | 87 | W |
| π | U+1F456 | 47 | 95 | _ |
| π² | U+1F472 | 75 | 123 | { |
| π΄ | U+1F474 | 77 | 125 | } |
| ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
Decoding Formula
ASCII_char = chr(ord(emoji) - 0x1F427 + 48)
Where:
0x1F427(π§) is the base emoji codepoint (minimum in the set)48is the ASCII code for'0'β the offset that makes the mapping produce readable text
Approach: Offset Brute-Force
Since the encoding is a simple linear mapping emoji -> ASCII, the approach was:
- Find the minimum codepoint in the emoji set: U+1F427 (π§)
- Compute offsets from this base for each emoji
- Try adding common ASCII base values (0, 32, 48, 65, 97) to the offsets
- With base 48 (ASCII
'0'), the title decoded to "Base100" β confirming the scheme - Apply the same formula to the description to get the flag ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Solution
python read-only β’ copy allowed#!/usr/bin/env python3 """ TaipanByte CTF β Base100 Emoji Decoder Decodes emoji-encoded text using codepoint offset arithmetic. """ title = "πΉππͺππ¨π§π§" description = "ππΉπ²ππΌπππππΌππππΌπ€π§π‘π πππ£π·ππ΄" # Base100 encoding parameters BASE_EMOJI = 0x1F427 # π§ - minimum codepoint in the set ASCII_OFFSET = 48 # ASCII '0' - makes the mapping produce readable text def decode_base100(encoded: str) -> str: """Decode Base100 emoji string to ASCII.""" return ''.join(chr(ord(c) - BASE_EMOJI + ASCII_OFFSET) for c in encoded) ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # Decode title_decoded = decode_base100(title) flag = decode_base100(description) print(f"Title: {title_decoded}") # Base100 print(f"Flag: {flag}") # TB{REDACTED} # Verification: brute-force approach to find the correct offset print("\n--- Brute-force offset search ---") base = min(ord(c) for c in title + description) for offset in [0, 32, 48, 65, 97]: decoded = ''.join(chr(ord(c) - base + offset) for c in title) print(f" offset={offset:3d}: {decoded}")
Step-by-step Decoding of the Description
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π β U+1F44B β 0x1F44B - 0x1F427 + 48 = 36 + 48 = 84 β 'T'
πΉ β U+1F439 β 0x1F439 - 0x1F427 + 48 = 18 + 48 = 66 β 'B'
π² β U+1F472 β 0x1F472 - 0x1F427 + 48 = 75 + 48 = 123 β '{'
π β U+1F444 β 0x1F444 - 0x1F427 + 48 = 29 + 48 = 77 β 'M'
πΌ β U+1F43C β 0x1F43C - 0x1F427 + 48 = 21 + 48 = 69 β 'E'
π β U+1F446 β 0x1F446 - 0x1F427 + 48 = 31 + 48 = 79 β 'O'
π β U+1F44E β 0x1F44E - 0x1F427 + 48 = 39 + 48 = 87 β 'W'
π β U+1F456 β 0x1F456 - 0x1F427 + 48 = 47 + 48 = 95 β '_'
π β 'M' πΌ β 'E' π β 'O' π β 'W' π β '_'
πΌ β 'E' π€ β 'm' π§ β '0' π‘ β 'j' π β 'i' π β '_'
π β 'f' π£ β 'l' π· β '@' π β 'g' π΄ β '}'
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Result: TB{REDACTED}
Notes
- Base100 (also known as "emoji encoding") is a real encoding scheme that maps ASCII bytes to emoji
- The specific variant here uses base codepoint U+1F427 with ASCII offset 48
- Other Base100 implementations may use different base codepoints (e.g., U+1F600)
- The approach of trying multiple ASCII offsets against emoji codepoints is a reliable general strategy for unknown emoji encodings ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Takeaways / Lessons
- Mastering base100_decode, brute_force_offset, codepoint_offset, emoji_decode was key to this challenge.
- Always check for common misconfigurations and verify assumptions.
Crafted by XESXOR Research β’ 2026-02-14 β’ CUSTOM β’ Base100 (Emoji Encoding) β’ Difficulty: Easy