รอบนี้ผมเล่นแค่ reverse engineering เท่านั้น ได้แค่ 3 ข้อเท่านั้น เนื่องจาก ไม่อยากปวดหัวในวันหยุดสงกรานต์ ^ ^
The Hidden Class
โจทย์ข้อนี้ก็ได้มาเป็นไฟล์ .jar ก็แน่นอนว่าต้องเป็นภาษา java เราก็เอาไฟล์ไป decomplie เลยดูสิว่ามันทำงานยังไง


ดูจากโค้ดแล้วจะเห็นว่าใน function main มีการเช็คคีย์อยู่ตรง KeyCheck.validate(var0[0]) ซึ่ง var0[0] ก็คงเป็น input จาก user ถ้าเราไปดูที่ KeyCheck.validate ก็จะเห็นว่ามีการเรียก function decode อีกรอบ ตรงนี้ทุกคนเห็นอะไรไหม
char[] var0 = new char[]{'}', 'n', '0', '1', '7', 'a', 'C', '!', 'l', 'p', 'p', '4', '_', 'A', 'v', 'a', 'J', '{', 'e', 'r'};นี่แหละน่าจะใช่ ดูเหมือนจะแค่ reverse คำเฉยๆ แต่ก็ไม่แน่ในงั้นก็เอาโค้ดไปรันเลย เท่านี้ก็ได้คำตอบละ

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

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

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

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

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

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