514 words
3 minutes
[AJCCBC 2025] ASEAN CTF Open

The CTF Open Challenge is a series of technical problems designed to utilize creative technical problem-solving abilities to solve technical challenges.

Actually I have solved more than the writeups, but I will only writeup the interesting ones or the one that I learned something new from.

  • 🏆 124th of ASEAN
  • 🚩 10 flags solved

Table of Contents#


Reverse Engineering#

simple_server (100 pts)#

Please download the zip file and solve the challenge by using reverse engineering knowledge.

alt text

From the config file, we know that it use dotnet8.0 to run, so make sure we have the compatible version.

I will try running the program first

alt text

Then try decompile it with dnSpy

alt text

After search for useful string like flag, I found this function which actually might print out the flag!

alt text

So, I search SystemSecrets to find where this function is called. Then I know that I had to navigate to Advanced Option menu then bypass the if (!(choice == "4")) to then bypass condition in SystemSecrets to print flag.

alt text

So, I will patch by change condition to if (a == "4") and bypass all security check condition in SystemSecrets. then save the file.

alt text
alt text

Then running again:

alt text

Flag solved!


modern_crackme1 (200 pts)#

Please download the zip file and solve the challenge by using reverse engineering knowledge

File inspection#

Terminal window
┌──(kali㉿kali)-[~/CTF/rev]
└─$ file modern_crackme1
modern_crackme1: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>

arm executable file, I can’t run it directly. So, I just throw in ghidra.

Static Analysis with Ghidra#

Found entry:

Terminal window
┌──(kali㉿kali)-[~/CTF/rev]
└─$ file modern_crackme1
modern_crackme1: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE|HAS_TLV_DESCRIPTORS>

After observation, it’s a program that contains some options that perform different functions and also an anti-debugging function. alt text

It also controls the flow of program using a state machine. alt text

After checking where the menu options go, I found that all of the function names contain fake. alt text

So, I tried searching for real. Then got this suspicious function. alt text

At the entry code of real_hidden_function() it checks the REAL_TRIGGER value to convert some string. alt text

After tracing to look data at the address, I found some string that might be a flag. alt text

Construct it with the flag format flag{md5} and we solved the challenge!


Forensics#

Bombadiro Crocadiro (200 pts)#

First given bombardino.zip → extract and get container.vc and secret.zip.

Since zip need password to extract, I use zip2john to get the hash then use john to crack it: alt text

Inside secret.zip there is a secret.txt which contain string naruto. The password must be used with something so I run binwalk on container.vc and after some research I learned it is a VeraCrypt disk file.

veracrypt
/
VeraCrypt
Waiting for api.github.com...
00K
0K
0K
Waiting...

So I decrypt it with naruto passphrase: alt text

The odt file needs a password to open. So, I import the key.asc to gpg and decrypt it by using john again to crack the key passphrase. alt text

After opening the file, we got first part of flag: alt text

As hint stated, “In part 2, the ‘file key’ replaces the password”. So mount the vc file again, but use key.asc as the key file. alt text

WHAT!?

After listing all files, I found .git. Well, let’s check it.

Found suspicious commit here: alt text

Dump, unzip, open then, Flag Solved! alt text

[AJCCBC 2025] ASEAN CTF Open
https://plugspakuko.github.io/posts/ctf/aseanopenctf2025/
Author
kpakkawat
Published at
2025-08-18
License
CC BY-NC-SA 4.0