120 words
1 minute
Cybersplash 2025 – Reverse Engineering CTF

รอบนี้ผมเล่นแค่ reverse engineering เท่านั้น ได้แค่ 3 ข้อเท่านั้น เนื่องจาก ไม่อยากปวดหัวในวันหยุดสงกรานต์ ^ ^

The Hidden Class#

โจทย์ข้อนี้ก็ได้มาเป็นไฟล์ .jar ก็แน่นอนว่าต้องเป็นภาษา java เราก็เอาไฟล์ไป decomplie เลยดูสิว่ามันทำงานยังไง

image.png

image.png

ดูจากโค้ดแล้วจะเห็นว่าใน function main มีการเช็คคีย์อยู่ตรง KeyCheck.validate(var0[0]) ซึ่ง var0[0] ก็คงเป็น input จาก user ถ้าเราไปดูที่ KeyCheck.validate ก็จะเห็นว่ามีการเรียก function decode อีกรอบ ตรงนี้ทุกคนเห็นอะไรไหม

Terminal window
char[] var0 = new char[]{'}', 'n', '0', '1', '7', 'a', 'C', '!', 'l', 'p', 'p', '4', '_', 'A', 'v', 'a', 'J', '{', 'e', 'r'};

นี่แหละน่าจะใช่ ดูเหมือนจะแค่ reverse คำเฉยๆ แต่ก็ไม่แน่ในงั้นก็เอาโค้ดไปรันเลย เท่านี้ก็ได้คำตอบละ

image.png

The Vault#

โจทย์ข้อนี้ก็ได้มาเป็นไฟล์ชื่อ vault ขั้นแรกลองเช็คดูก่อนว่าเป็นไฟล์แบบไหน มันเป็นไฟล์ที่รันบน Linux

image.png

ในตอนนั้นคิดอะไรไม่ออกก็เลยจับโยนใส่ HxD แล้วค้นหา text สะเลย สรุปก็เจอ

image.png

The Format#

โจทย์ข้อนี้ก็เป็นไฟล์ที่รันบน linux เหมือนกันกับ The Vault แต่รอบนี้ไม่สามารถอ่าน string ได้แล้ว งั้นก็ลองเปิดด้วย ida ดู (ผมเปลี่ยนชื่อตัวแปรไปบางส่วนเพื่อช่วยให้ตอน reverse จะได้เข้าใจ)

image.png

สิ่งที่น่าสนในก็คือ function sub_5564052112B0 เพราะมันเขียนบอกเลยว่า Correct! The flag is: %s ลองเข้าไปดูข้างในกัน

image.png

ดูจากโค้ดก็คงจะเป็น XOR แหละ ถ้าดูที่ตัวแปร result จะไปเอาข้อมูลจาก address 556405214010 ออกมา loop แล้วถ้าไปดูที่ address 556405214010 ก็จะเห็นว่าเป็น BYTE

image.png

ถ้านำ BYTE ทั้งหมดมา XOR ด้วย KEY 0xAB ก็จะได้ flag ออกมา

image.png

Cybersplash 2025 – Reverse Engineering CTF
https://blog.0x01code.me/posts/cybersplash-2025-reverse-engineering-ctf/
Author
0x01code
Published at
2025-04-23
License
CC BY-NC-SA 4.0