online
writeups

Bypassbin

PicoCTF2026 reverse

First, download the binary from the remote host: scp -P 57999 [email protected]:/home/ctf-player/bypassme.bin ./

Pasted image 20260311064825 When the program runs, it prompts for a password and sanitizes the user input before validating it. Testing inputs such as pass1, pass2, and pass3 shows that numeric characters are stripped, leaving only pass. This suggests the program compares a cleaned version of the input against an internally generated password.

In Binary Ninja, the main function calls decode_password() before entering the authentication loop and stores the result in a local buffer named password[0x80]. This indicates that the real password is not stored directly as plaintext in the binary, but is instead reconstructed at runtime.

Pasted image 20260311064839

Pasted image 20260311064919 Looking at decode_password(), we can see an encoded byte array that is decoded with an XOR operation using 0xaa, then written into the output buffer followed by a null terminator. Rather than reversing the bytes manually, the easiest approach is to inspect the decoded buffer during execution with a debugger.

Pasted image 20260311064937 Pasted image 20260311064949

Using GDB, I set a breakpoint immediately after the call to decode_password() and examined the contents of the password buffer in memory. The decoded password was:

Pasted image 20260311065010

Entering SuperSecure into the program successfully passes authentication and reveals the flag.

● NORMAL 0xBlog
JetBrains Mono UTF-8 Hugo