Call my name softly
Call my name softly
Platform: CUSTOM | Category: Reversing | Type: Challenge | Difficulty: Medium | OS: N/A | **Author: XESXOR Techniques: function_chain_analysis, hex_to_ascii, static_analysis
Summary
Walkthrough of the CUSTOM Reversing Call my name softly. The challenge provided a ZIP file containing 15.15, an ELF 64-bit LSB PIE executable written in C++, not stripped, with debug info.
Description
The challenge provided a ZIP file containing 15.15, an ELF 64-bit LSB PIE executable written in C++, not stripped, with debug info.
The challenge name "Call my name softly" is a hint about the recursive function calls that "softly call" each other in a chain.
Analysis
Binary Identification
bash read-only • copy allowed$ file 15.15 15.15: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=..., for GNU/Linux 3.2.0, with debug_info, not stripped
Function Chain Discovery
Using radare2, discovered two chains of functions:
First Chain:
firstFirst() -> firstSecond() -> firstThird() -> ... -> firstFifteenth()
Second Chain:
secondFirst() -> secondSecond() -> secondThird() -> ... -> secondFifteenth()
Each function in the chain calls the next one, creating a "soft calling" pattern - hence the challenge name.
Hex Strings in Terminal Functions
The terminal functions (firstFifteenth and secondFifteenth) return hex-encoded strings:
| Function | Hex String |
|---|---|
firstFifteenth() | 315f35306c7633645f3768335f3 |
secondFifteenth() | 16e66316e3137795f3531366e |
Main Function Logic
The main() function performs the following operations:
- Calls
firstFirst()which traverses the first chain and returns the first hex string - Calls
secondFirst()which traverses the second chain and returns the second hex string - Concatenates both hex strings
- Passes the combined string to
hexToText()function to decode - Wraps the result with
CTF{and}
Solution
Decoding Process
bash read-only • copy allowed# Combined hex string from both chains combined="315f35306c7633645f3768335f316e66316e3137795f3531366e" # Decode hex to ASCII echo "$combined" | xxd -r -p # Output: REDACTED
Alternative Python Solution
python read-only • copy allowed#!/usr/bin/env python3 # Hex strings from the two function chains first_hex = "315f35306c7633645f3768335f3" second_hex = "16e66316e3137795f3531366e" # Combine and decode combined = first_hex + second_hex decoded = bytes.fromhex(combined).decode('ascii') # Construct flag flag = f"CTF{{{decoded}}}" print(flag) # Output: CTF{REDACTED}
Flag Meaning
The decoded text REDACTED is leetspeak for:
"I solved the infinity sign"
The "infinity sign" (∞) relates to the number 15 in the binary name (15.15) and the 15 functions in each chain - the infinity symbol resembles two connected loops, just like the two function chains.
Tools Used
| Tool | Purpose |
|---|---|
file | Identify binary type (ELF 64-bit, C++, debug info) |
strings | Find embedded strings and function names |
radare2 | Disassembly and function chain analysis |
xxd | Hex to ASCII decoding |
| |
Lessons Learned
- Challenge name hints: "Call my name softly" directly hints at the function calling pattern
- Debug symbols help: The binary being "not stripped" with debug info made function names visible
- Pattern recognition: Sequential function naming (first, second, ..., fifteenth) reveals the chain structure
- Two-part secrets: Data split across multiple function chains is a common obfuscation technique
Key Takeaways / Lessons
- Mastering function_chain_analysis, hex_to_ascii, static_analysis was key to this challenge.
- Always check for common misconfigurations and verify assumptions.
Crafted by XESXOR Research • 2026-01-15 • CUSTOM • Call my name softly • Difficulty: Medium