การวิเคราะห์โครงสร้างภายในของไฟล์ APK
Android application package (APK) คือรูปแบบไฟล์บีบอัดมาตรฐานที่ระบบปฏิบัติการ Android ใช้ในการแจกจ่ายและติดตั้งแอปพลิเคชัน ภายในไฟล์ APK ประกอบด้วยโครงสร้างข้อมูลสำคัญที่กำหนดพฤติกรรมและการทำงานของแอปพลิเคชันทั้งหมด เช่น ไฟล์ AndroidManifest.xml ซึ่งทำหน้าที่ประกาศข้อมูลพื้นฐานของระบบ, ไฟล์โค้ดที่คอมไพล์แล้วในรูปแบบ Dalvik Executable (.dex), ไฟล์รีซอร์สสำหรับแสดงผลอินเตอร์เฟส, ไฟล์แอสเซท และไลบรารีโค้ดเนทีฟ
การตรวจสอบโครงสร้างเหล่านี้ผ่านกระบวนการวิเคราะห์แบบสถิต (Static Analysis) ช่วยให้ผู้ใช้งานสามารถตรวจสอบข้อเท็จจริงของไฟล์ APK ได้อย่างละเอียดก่อนที่จะทำการติดตั้งลงบนอุปกรณ์จริง วิธีนี้ช่วยป้องกันความเสี่ยงจากการติดตั้งแอปพลิเคชันที่อาจมีการดัดแปลงหรือแอบแฝงสิทธิ์การใช้งานที่เป็นอันตราย โดยไม่จำเป็นต้องรันหรือติดตั้งแอปพลิเคชันให้เกิดความเสี่ยงต่อระบบ
ข้อกำหนดระบบปฏิบัติการและการทำงานร่วมกัน
ในการตรวจสอบไฟล์ APK ข้อมูลสำคัญส่วนแรกที่ต้องพิจารณาคือข้อกำหนดด้านระบบปฏิบัติการในส่วน Requirements ซึ่งระบุขอบเขตการทำงานของแอปพลิเคชันบนเวอร์ชัน Android ต่างๆ:
Android ขั้นต่ำ(Minimum SDK): แสดงผลในรูปแบบAndroid ‹version› (API ‹level›)หรือAPI ‹level›เพื่อระบุเวอร์ชันต่ำสุดของระบบปฏิบัติการ Android ที่แอปพลิเคชันนี้จะสามารถติดตั้งและทำงานได้Android เป้าหมาย(Target SDK): แสดงผลในรูปแบบAndroid ‹version› (API ‹level›)หรือAPI ‹level›ซึ่งเป็นเวอร์ชันที่ผู้พัฒนาใช้ในการทดสอบและออกแบบแอปพลิเคชัน โดยระบบปฏิบัติการ Android จะใช้ค่านี้ในการบังคับใช้พฤติกรรมความปลอดภัยและความเป็นส่วนตัวSDK สูงสุด ‹n›(Max SDK): ขีดจำกัดสูงสุดของเวอร์ชัน Android ที่แอปพลิเคชันนี้อนุญาตให้ทำงาน (หากมีการระบุไว้)
การเข้าใจค่า SDK เหล่านี้ช่วยให้ผู้ดูแลระบบและผู้ใช้งานทราบว่าแอปพลิเคชันจะถูกจำกัดพฤติกรรมความปลอดภัยตามมาตรฐานของ Android เวอร์ชันใด
การตรวจสอบสิทธิ์การใช้งานและการคัดกรองสิทธิ์อันตราย
ในส่วน Permissions เครื่องมือจะแสดงรายการสิทธิ์ทั้งหมดที่แอปพลิเคชันร้องขอต่อระบบปฏิบัติการ เพื่อความปลอดภัยในการวิเคราะห์ ระบบจะจัดเรียงสิทธิ์ที่มีความเสี่ยงสูงไว้ที่ส่วนบนสุดของรายการ พร้อมแสดงป้ายกำกับ อันตราย (Dangerous) กำกับไว้
สิทธิ์ที่ได้รับป้ายกำกับ อันตราย คือสิทธิ์ที่เข้าถึงข้อมูลส่วนบุคคลที่มีความละเอียดอ่อนสูง เช่น ตำแหน่งที่ตั้งทางภูมิศาสตร์, รายชื่อผู้ติดต่อ, กล้องถ่ายภาพ, ไมโครโฟน หรือพื้นที่จัดเก็บข้อมูลภายในเครื่อง การตรวจสอบสิทธิ์เหล่านี้ช่วยให้ผู้ใช้งานสามารถประเมินได้ว่า ข้อมูลที่แอปพลิเคชันขอเข้าถึงนั้นมีความสอดคล้องกับหน้าที่การทำงานจริงของแอปพลิเคชันหรือไม่
คอมโพเนนต์หลักและการส่งออกข้อมูลสู่ภายนอก
โครงสร้างการทำงานเบื้องหลังของแอปพลิเคชันจะถูกประกาศไว้ในส่วน Components โดยแบ่งออกเป็น 4 ประเภทหลัก ซึ่งระบบจะจำกัดการแสดงผลไว้ที่ประเภทละไม่เกิน 100 รายการ หากมีจำนวนเกินกว่านั้นจะแสดงป้ายกำกับ เพิ่มอีก ‹count› แทน:
Activities: หน้าจออินเตอร์เฟสที่ผู้ใช้มองเห็นและปฏิสัมพันธ์ได้Services: ส่วนการทำงานเบื้องหลังที่ไม่มีหน้าจอแสดงผลReceivers: ส่วนรับสัญญาณและตอบสนองต่อเหตุการณ์ต่างๆ จากระบบหรือแอปอื่นProviders: ส่วนจัดการและแบ่งปันข้อมูลระหว่างแอปพลิเคชัน
คอมโพเนนต์ใดที่มีการระบุป้ายกำกับ ส่งออกแล้ว (exported) หมายความว่าคอมโพเนนต์นั้นเปิดโอกาสให้แอปพลิเคชันอื่นภายนอกสามารถเรียกใช้งานหรือส่งข้อมูลเข้ามาควบคุมได้ ซึ่งเป็นจุดสำคัญที่นักพัฒนาและผู้ตรวจสอบความปลอดภัยต้องตรวจสอบเพื่อป้องกันช่องโหว่ของระบบ
การตรวจสอบลายเซ็นดิจิทัลและใบรับรองผู้เผยแพร่
ระบบปฏิบัติการ Android บังคับให้แอปพลิเคชันทุกตัวต้องผ่านการลงลายเซ็นดิจิทัลเพื่อยืนยันตัวตนผู้พัฒนา ในส่วน Signatures เครื่องมือจะทำการดึงข้อมูลเมทาดาตาจากบล็อกลายเซ็น v1 (PKCS#7) และ APK Signing Blocks (v2, v3, v3.1) เพื่อแสดงรายละเอียดดังนี้:
ผู้ลงนาม ‹n›: ลำดับของผู้ลงนามในแพ็กเกจหัวข้อและออกโดย: ข้อมูลผู้สร้างใบรับรองและหน่วยงานที่ออกใบรับรองหมายเลขซีเรียล: หมายเลขประจำตัวเฉพาะของใบรับรองใช้ได้ตั้งแต่และใช้ได้ถึง: ระยะเวลาเริ่มต้นและสิ้นสุดการใช้งานของใบรับรองอัลกอริทึมลายเซ็นและอัลกอริทึมคีย์: เทคโนโลยีเข้ารหัสลับที่ใช้- ลายนิ้วมือใบรับรอง: ค่าแฮช MD5, SHA-1 และ SHA-256 ของใบรับรอง
หากไม่พบข้อมูลดังกล่าว ระบบจะแสดงข้อความ ไม่พบบล็อกลายเซ็นที่รู้จัก แพ็กเกจนี้อาจไม่ได้ลงนามหรือถูกแพ็กใหม่ ทั้งนี้ กระบวนการนี้เป็นการดึงข้อมูลเมทาดาตามาแสดงเท่านั้น ไม่ใช่การตรวจสอบความถูกต้องทางคริปโทกราฟีหรือการตรวจสอบความน่าเชื่อถือของตัวบุคคลผู้เผยแพร่ในโลกความเป็นจริง
ข้อมูลทางเทคนิคและแฮชไฟล์เพื่อการตรวจสอบความถูกต้อง
เพื่อการตรวจสอบความถูกต้องและการทำเอกสารอ้างอิง เครื่องมือจะแสดงข้อมูลเชิงลึกในส่วน โค้ดเนทีฟ, รีซอร์ส และ แฮชไฟล์ ดังนี้:
| ส่วนการแสดงผล | รายละเอียดข้อมูลที่ปรากฏ |
|---|---|
โค้ดเนทีฟ |
ประเภทหน่วยประมวลผล (ABIs) ที่รองรับ และจำนวนไลบรารีเนทีฟภายในแพ็กเกจ |
รีซอร์ส |
ข้อมูล ความหนาแน่นหน้าจอ, ไฟล์รีซอร์ส, ไฟล์แอสเซท, ไฟล์โค้ด (.dex) และจำนวน ไฟล์ในแพ็กเกจ ทั้งหมด |
แฮชไฟล์ |
ค่าแฮช MD5, SHA-1 และ SHA-256 ของไฟล์ APK ทั้งไฟล์ เพื่อใช้เปรียบเทียบกับค่าแฮชทางการของผู้พัฒนา |
ความเป็นส่วนตัวและเทคโนโลยีการประมวลผลบนเบราว์เซอร์
ความปลอดภัยของข้อมูลถือเป็นหัวใจสำคัญ เครื่องมือนี้ทำงานผ่านเทคโนโลยี Web Worker ภายในเว็บเบราว์เซอร์ของผู้ใช้โดยตรง กระบวนการอ่านไฟล์ การคำนวณค่าแฮช และการวิเคราะห์โครงสร้างทั้งหมดเกิดขึ้นภายในเครื่องของผู้ใช้แบบ Local ไม่มีการอัปโหลดไฟล์ APK หรือข้อมูลใดๆ ไปยังเซิร์ฟเวอร์ภายนอก และไม่มีการติดตั้งหรือรันแอปพลิเคชันบนอุปกรณ์ของผู้ใช้แต่อย่างใด
คำถามที่พบบ่อย (FAQ)
เราสามารถเรียนรู้อะไรจาก APK ได้บ้างโดยไม่ต้องติดตั้ง?
รู้ได้หลายอย่างเลยทีเดียว: ชื่อแพ็กเกจและเวอร์ชันของแอป เวอร์ชัน Android ขั้นต่ำที่ต้องการ สิทธิ์ทั้งหมดที่แอปขอ หน้าจอและคอมโพเนนต์เบื้องหลังที่ประกาศไว้ ประเภทหน่วยประมวลผลที่รองรับโค้ดเนทีฟ และใบรับรองที่ใช้เซ็นชื่อแอป
เครื่องมือนี้สามารถบอกได้หรือไม่ว่า APK ตัวนี้เป็นมัลแวร์?
ไม่ได้ — และควรระวังเครื่องมือใดๆ ที่อ้างว่าฟันธงได้จากการสแกนเพียงครู่เดียว สิ่งที่คุณได้รับที่นี่คือข้อเท็จจริง ได้แก่ สิทธิ์ คอมโพเนนต์ ผู้เซ็นชื่อ และแฮชไฟล์ ให้นำไปเทียบกับสิ่งที่ผู้พัฒนาประกาศไว้ และหากพบสิทธิ์ที่น่าสงสัยหรือผู้เซ็นชื่อต่างไปจากเวอร์ชันทางการ ควรพิจารณาหลีกเลี่ยง
รองรับไฟล์รูปแบบใดบ้าง?
ไฟล์ APK เดี่ยวที่มีขนาดไม่เกิน 500 MB ส่วนแพ็กเกจแบบแยก (XAPK, APKM) และ Android App Bundle (.aab) นั้นเป็นรูปแบบคอนเทนเนอร์หรือรูปแบบการเผยแพร่ ไม่ใช่แพ็กเกจติดตั้งเดี่ยวๆ ดังนั้นระบบจึงปฏิเสธและแจ้งเตือนอย่างชัดเจนแทนที่จะแสดงรายงานที่อาจทำให้สับสน
รายละเอียดการเซ็นชื่อบอกอะไรเราได้บ้าง?
แอป Android ทุกแอปจะต้องมีการเซ็นชื่อ และใบรับรองจะระบุว่าใครเป็นผู้เผยแพร่ คุณจะเห็นว่าแพ็กเกจรองรับสกีมาการเซ็นชื่อใดบ้าง (v1, v2, v3) รวมถึงชื่อผู้เซ็น ระยะเวลาที่ใช้งานได้ และลายนิ้วมือแบบ MD5, SHA-1 และ SHA-256 APK สองไฟล์ที่มีลายนิ้วมือตรงกันมาจากผู้เผยแพร่รายเดียวกัน แต่คุณต้องเป็นผู้ตัดสินใจเองว่าจะไว้วางใจผู้เผยแพร่นั้นหรือไม่
ป้ายกำกับ “อันตราย” (Dangerous) บนสิทธิ์การใช้งานหมายถึงอะไร?
นี่คือการจัดประเภทของ Android เอง: สิทธิ์ที่เป็นอันตรายสามารถเข้าถึงข้อมูลส่วนตัวได้ เช่น ตำแหน่งที่ตั้ง รายชื่อผู้ติดต่อ กล้อง ไมโครโฟน และพื้นที่จัดเก็บข้อมูล ระบบจึงต้องถามผู้ใช้ก่อนอนุมัติสิทธิ์ ป้ายกำกับนี้ไม่ใช่ข้อกล่าวหา แอปแผนที่ที่ขอเข้าถึงตำแหน่งที่ตั้งถือเป็นเรื่องปกติ เพียงแต่เป็นสิทธิ์ที่ควรหยุดอ่านพิจารณาให้รอบคอบ