Thailand Cyber Top Talent 2024 OPEN [Qualifier] — Mobile Security
สวัสดีครับ เมื่อวันเสาร์ที่ผ่านมาได้มีโอกาสไปเล่น CTF รายการ Thailand Cyber Top Talent 2024 โดยบทความนี้ก็จะเป็น Write-Up เฉพาะข้อ Mobile Security เท่านั้นครับ เพราะเห็นว่ายังไม่มีใครเขียน (หรือเราหาไม่เจอ 😭)
Easy (100)
สำหรับข้อนี้เราก็จะได้ไฟล์ YouSeeMe2.zip มาครับ เราก็ทำการ unzip ออกมาเราก็จะได้ YouSeeMe2.apk ไฟล์มา

หลังจากนั้นเราก็ใช้ Decompiler Tool อย่าง Jadx (https://github.com/skylot/jadx) มาทำการ Decompile code และเริ่มทำ Static Analysis ซึ่งโดยปกติเเล้วผมจะเข้าไปเช็ค Entry Point ของ App ก่อน ที่ไฟล์ AndroidManifest.xml พอเข้าไปก็เจอชื่อ label ของแอป ที่ดูเหมือนจะ decode ออกมาได้ (base64) จากนั้นก็นำค่า label มา decode และได้ flag ออกมา


Medium (200)
ส่วนข้อนี้ก็เช่นกันครับ โจทย์จะให้ไฟล์ Mobile2.zip มา เราก็ทำการ unzip และใช้ Jadx เปิดไฟล์ .apk ขึ้นมาเพื่อทำ Static Analysis

โดยหลังจากที่ไล่เปิดตามไฟล์ path ต่าง ๆ ดู ก็ไปเจอไฟล์ flag.txt ที่ข้างในมี content ตามรูปครับ แต่ว่าจะเห็นว่าเป็น Hex format

เอาไปถอดที่ CyberChef ก็จะได้ flag ออกมาครับ

The Face THCTT24 (100)
ข้อนี้โจทย์บอกว่า
แอปพลิเคชัน The Face THCTT24 ได้รวบรวมใบหน้าของบุคคลสำคัญที่คาดว่าท่านจะได้เจอในการแข่งขัน Thailand Cyber Top Talent 2024 แต่เดี๋ยวก่อนนะมีหน้าใครบางคนหายไป
หมายเหตุ รูปแบบของ Flag ที่เป็นคำตอบของข้อนี้คือ THCTT24{md5}
จากนั้นเราก็ทำเหมือนเดิมครับ เริ่มต้นด้วยการเปิด apk ไฟล์ด้วย Jadx เข้าไปเช็ค Entry Point ที่ AndroidManifest.xml ไฟล์ (Entry Point คือ class ที่ Application จะทำงานก่อนตอนที่ผู้ใช้งานกด icon ของ application ตอนเปิด app)

ซึ่งหากดูจาก Code จะพบว่าตัว application มี method onclick ที่ทำการ random รูปภาพที่อยู่ในตัวแปร picture ออกมา โดยหากเราลองลงแอปบน android เราจะพบว่าแอปนี้จะเป็นแอปที่มี Image View และปุ่มให้กด 1 ปุ่มถ้วน โดยทุกครั้งที่กดปุ่มก็จะมีรูป random ออกมาเรื่อย ๆ ซึ่งตรงกับโค้ดที่เรา decompile มา

ที่นี้ย้อนกลับไปที่โจทย์ที่บอกว่า “แต่เดี๋ยวก่อนนะมีหน้าใครบางคนหายไป” พอเรามารวมกับ code ที่ Decompile มาจะเห็นว่ารูปที่ 32 หายไป

พอเรา double click ที่ตัวแปร pic31 แล้ว ตัว Jadx จะพาเรามาที่ Class “com.example.thefacethctt24.C0503R” ซึ่งมีค่า pic32 อยู่ด้วย!!!!!!

เนื่องจากเราเห็นเเล้วว่านี่คือ Class “R” เราก็ไล่ตามต่อไปที่ Resources > res > drawable เราจะเจอรูป pic32.jpg


พอเปิดไฟล์มาก็จะมี Flag โชว์อยู่ ………………..ไม่มี!!!!!!! จริง ๆ มันก็มี flag แหละครับ แค่ต้องหรี่ ๆ ตาหน่อย


Click Click (200)
ก็แค่ใส่ข้อมูลให้ถูกต้องแล้วก็คลิก ถ้าโชคดีก็จะได้ Flag
หมายเหตุ รูปแบบของ Flag ที่เป็นคำตอบของข้อนี้คือ THCTT24{md5}
สำหรับข้อนี้ ก็เช่นเคยครับทำ Static Analysis ด้วย Jadx

โดยที่ถ้าดูจาก Method onClick จะสามารถสรุปได้ดังนี้
public void onClick(View view) {
String check = "";
String flag = MainActivity.this.edtFlag.getText().toString();
for (int i = 0; i < flag.length(); i++) {
int c = flag.charAt(i);
check = check + (MainActivity.this.key ^ c);
}
if (check.equals(MainActivity.this.secret)) {
MainActivity.this.txtShow.setText(flag + "\nCorrect Flag");
} else {
MainActivity.this.txtShow.setText(flag + "\nIncorrect Flag");
}
}
- check = “”
- flag คือค่าที่ผู้ใช้งานกรอก
- เอา flag มา XOR กับ MainActivity.this.key จะได้ค่า check
- ค่า check ควรจะเท่ากับ MainActivity.this.secret
จะได้สูตรคร่าว ๆ ว่า
flag = MainActivity.this.key ^ check
check = MainActivity.this.secret
flag = MainActivity.this.key ^ MainActivity.this.secret
ดังนั้น!!!! ต้องหาค่า key กับ secret เพิ่ม
MainActivity.this.secret

MainActivity.this.key



แก้ code และ run เอา flag หรือ เอาไปรันใน ChatGPT ^_^

Conclusion
อยากอ่านข้อ Crypto ที่มีคน solve flag ได้แค่คนเดียวจังครับ 😵 😵 😵