~/ crackmes.one [trynatobe6for6def's my first crackme] writeup --:--

Crackmes.one [TrynaToBe6for6Def's My First Crackme] Writeup

Technical overview for the [TrynaToBe6for6Def’s My First Crackme] Crackmes.one room. Room here: TrynaToBe6for6Def’s My First Crackme

Ghidra

Extract and open the exe:

image

I looked for main, but that was not present. Ghidra did find entry, and it is where we will start:

image

I think this is where we start, it takes in 4 parameters and then calls a function FUN_140... with them!

image

We get dropped into a pretty big function, luckily ghidra made some comments saying which calls return nothing, my guess is to trace the one that actually has a return:

This one does, lets move forwards and see where it brings us.

After many dead ends, I finally find where the logic brings us:

image

From here, it looks like we are close, and from here I try to understand the password logic:

image

Ok, so I kept tracing the functions until I found this:

image

From there, went through naming vars until we found the pass_checker func:

image

From there, the in_checker func led us to:

image

From here, we find the final logic!

The decoder XORs 13 bytes at DAT_1400030e4 with 0x2a to build the expected password at runtime, then pass_checker strcmps your input against it.

image

To get those values, I did:

image

I originally tried the plain ascii column, but the second byte (0x19) is non-printable, so I tried to get the flag from hex.

In Cyberchef:

image

And we found the answer, nice.

image

Thank you for reading!

(AI disclosure, I used Claude as a hint-giver while learning Ghidra. It helped me interpret decompiler output and suggested CyberChef for decoding, but didn’t give me the answer.)