← Back to Writeups
CUSTOMEasyReversing

Uttar

XESXOR9/2/20262 min read
#reversing#custom#easy#input_transformation_reversal#static_analysis#string_extraction

Uttar

Platform: CUSTOM | Category: Reversing | Type: Challenge | Difficulty: Easy | OS: N/A | **Author: XESXOR Techniques: input_transformation_reversal, static_analysis, string_extraction

Summary

Walkthrough of the CUSTOM Reversing Uttar. Task: a PE32 Windows console binary asks for a valid serial key and contains a hardcoded reference string. Solution: inspect the check routine, notice the XOR-swap of the 3rd and 4th input characters

Description

Download binary: uttar.exe

We are given a Windows PE32 console executable that asks for a serial key. The goal is to recover the exact input accepted by the validation routine.

Analysis

Initial triage shows that uttar.exe is a PE32 Windows console executable. Running strings immediately reveals two important strings:

  • really_tricky
  • Input valid serial key: >

That strongly suggests a straightforward serial-check crackme with an embedded target string.

The main validation routine is located at 0x401080. In that function, the program: ‍​‌‌​​​​‌​‌‌​​‌‌​​‌‌​​‌‌​​‌‌​​‌​​​​‌‌​​​​​‌‌​​‌‌​​‌‌​​‌​‌​‌‌​​‌​‌‍

  1. Copies the constant string really_tricky into a local buffer.
  2. Reads user input.
  3. Swaps the 3rd and 4th characters of the input buffer using an XOR-swap sequence.
  4. Compares the transformed input against really_tricky.

So the binary does not expect really_tricky directly. It expects an input that becomes really_tricky after swapping characters 3 and 4.

Starting from:

text
really_tricky

Swap the 3rd and 4th characters (a and l in zero-based positions 2 and 3):

text
REDACTED

‍​‌‌​​​​‌​‌‌​​‌‌​​‌‌​​‌‌​​‌‌​​‌​​​​‌‌​​​​​‌‌​​‌‌​​‌‌​​‌​‌​‌‌​​‌​‌‍

That reconstructed serial is accepted and triggers the success message.

Solution

The recovery logic is just the inverse of the program transformation: if the checker swaps positions 2 and 3 before comparing to really_tricky, then the valid input is the reference string with those positions already swapped.

Minimal reproduction:

python
#!/usr/bin/env python3
target = "really_tricky"
buf = list(target)
buf[2], buf[3] = buf[3], buf[2]
print(''.join(buf))

Output:

text
REDACTED

‍​‌‌​​​​‌​‌‌​​‌‌​​‌‌​​‌‌​​‌‌​​‌​​​​‌‌​​​​​‌‌​​‌‌​​‌‌​​‌​‌​‌‌​​‌​‌‍

Key Takeaways / Lessons

  • Mastering input_transformation_reversal, static_analysis, string_extraction was key to this challenge.
  • Always check for common misconfigurations and verify assumptions.

Crafted by XESXOR Research • 2026-03-31 • CUSTOM • Uttar • Difficulty: Easy