รู้ทันโจรกับการ Decompiling, Modifying Smali และ Recompiling APK file โดยใช้ APKLab

Jakkrit
TakoDigital
Published in
3 min readNov 22, 2023

การโจมตี Mobile Application มีหลากหลายรูปแบบทั้ง Static และ Dynamic Attack ซึ่ง Static Attack เป็นรูปแบบหนึ่งที่นิยมใช้คือทำการแก้ไข source code แล้วหลอกให้ user ใช้งาน โดยอาจปลอมจะเป็น app ที่มีชื่อเสียงแต่แฝงไปด้วย source code ที่ประสงค์ร้ายต่อเรา บทความนี้เราจะมาศึกษาเกี่ยวกับการ inject smali code (Smali คือ Assembly language สำหรับ Dalvik VM บน Android) ว่ามีขั้นตอนการทำอย่างไร

เริ่มจากการติดตั้ง tool เหล่านี้ให้เรียบร้อย

  • Visual Studio Code
  • JDK 8+
  • quark-engine
  • adb

1. ก่อนอื่นเรามาสร้าง APK file ที่ใช้สำหรับทดสอบกันก่อน โดยผมได้สร้าง Project ที่ชื่อ “Test Decompiling” และ Package เป็น “com.testdecompiling” ขึ้นมาดังภาพ

เสร็จแล้วทำการ Generate signed APK ให้เรียบร้อย เมื่อ run ขึ้นมาจะได้ app หน้าตาแบบนี้

2. เปิด Visual Studio Code ขึ้นมาแล้วไปที่ EXTENSION แล้ว Search “APKLab” ทำการติดตั้งให้เรียบร้อย

3. กด Ctrl+Shift+P (Windows) หรือ Command+Shift+P (MacOS) แล้วเลือก “APKLab: Open an APK”

ทำการเลือก file APK ที่ต้องการทดสอบแล้วกด “OK”

จากนั้น APKLab จะทำการ decompile APK ให้เรา จะได้หน้าตาแบบนี้

4. มาถึงจุดที่เรากำลังสนใจคือ “smali” folder สังเกตดูจะเห็นว่าภายใต้ smali->com->testdecompile จะมี MainActivity.smali ซึ่งเป็น file ที่มี code ของเราอยู่

หากเปรียบเทียบ code ให้เห็นทั้งก่อนและหลัง decompile ให้เห็นภาพง่ายๆ จะเป็นประมาณนี้

5. เมื่อรู้จุดของ code ที่ต้องการ inject แล้ว ผมทดสอบโดยการเพิ่ม code smali เพื่อให้แสดง Toast ง่ายๆ ขั้นมาหลังจากเปิด app

Code smali ที่ highlight สีเขียวคือส่วนที่เพิ่มเข้ามา โดยที่ line 41–62 คือ method ที่เอาไว้แสดง Toast “Hello world!” และ line 76 เป็นการเรียกใช้งาน method นี้

จากนั้น click ขวาที่ apktool.yml เลือก “APKLab: Rebuild and Install the APK”

APKLab จะทำการ build APK ใหม่ และ sign ด้วย key ของ APKLab ที่สร้างขึ้นมา

เมื่อเราเปิด app ขึ้นมาก็จะมี Toast ที่เรา inject ไว้แสดงขึ้นมาตอนเปิด app

แนวทางการป้องกัน

  • ProGuard: เปิดการใช้งาน ProGuard เพื่อทำการ obfuscate source code ให้ยากต่อการอ่านเมื่อมีการ decompile APK
  • Check app certificate: ทำการตรวจสอบ certificate ที่ใช้ sign APK ว่าเป็นตัวที่ถูกต้องหรือไม่
  • Play Integrity API: สามารถใช้ Play Integrity API ตรวจสอบ security ได้ในหลายๆ ด้าน เช่น ความสมบูรณ์ของ APK, certificate ที่ใช้ sign, เป็น app ที่ติดตั้งจาก Google Play Store หรือไม่ หรือว่า app นั้น run อยู่บน device ที่เชื่อถือได้หรือไม่

Reference

https://github.com/APKLab/APKLab

--

--