วิธีดูสิทธิ์ของแอพ Android ก่อนติดตั้ง APK
เมื่อคุณติดตั้งแอปจาก Google Play Store Android จะแสดงข้อมูลสรุปแบบง่ายเกี่ยวกับสิ่งที่แอปสามารถเข้าถึงได้ ไซด์โหลด APK จากแหล่งที่ไม่ใช่ Play และคุณจะไม่มีเครือข่ายความปลอดภัยดังกล่าว เว้นแต่คุณจะอ่านไฟล์ Manifest ด้วยตัวเอง "แอปวอลเปเปอร์ควรต้องมีการเข้าถึง SMS และไมโครโฟนจริงๆ หรือไม่" เป็นคำถามประเภทเดียวกับคู่มือนี้ที่จะช่วยคุณตอบ
สิ่งต่อไปนี้คือขั้นตอนการทำงานเดียวกันกับที่ทีมของเราใช้ในการคัดแยก APK ที่ไม่คุ้นเคย: เปิดมัน อ่านรายการ uses-permission ถอดรหัสระดับการป้องกัน และเปรียบเทียบสิ่งที่แอป พูดว่า ต้องการกับสิ่งที่หมวดหมู่มักจะต้องการ เครื่องมือข้อมูล APK ออนไลน์ ของเราทำการถอดรหัสไบนารี-XML ให้กับคุณ ดังนั้นกระบวนการทั้งหมดจะใช้เวลาประมาณสิบวินาที
เหตุใดจึงต้องกังวลเรื่องสิทธิ์การตรวจสอบ?
นักพัฒนาที่เป็นอันตรายนำแอปฟรียอดนิยม ดัดแปลง และเผยแพร่อีกครั้งบนไซต์บุคคลที่สาม แม้ว่าแอปอาจดูและทำงานได้ตามปกติ แต่โค้ดที่ซ่อนไว้อาจกำลังคัดลอกรายชื่อผู้ติดต่อของคุณหรือบันทึกเสียงพื้นหลังของคุณ เมื่อดูสิทธิ์ ก่อนการติดตั้ง คุณจะมองเห็นธงสีแดงของ "การอนุญาตคืบคลาน"
วิธีตรวจสอบไฟล์ APK ใด ๆ (ออนไลน์)
เครื่องมือข้อมูล APK ของเราจะอ่านรายการไฟล์ของคุณทั้งหมดในเบราว์เซอร์ของคุณ ไฟล์จะไม่ถูกอัปโหลดไปยังเซิร์ฟเวอร์ และไม่มีการดำเนินการโค้ด นี่คือวิธีการใช้งาน:
กระบวนการ:
- ไปที่ หน้าข้อมูล APK
- เลือกไฟล์ .apk ของคุณ
- รอให้การวิเคราะห์เสร็จสิ้น (ปกติคือ 5 วินาที)
- เลื่อนลงไปที่ ส่วนการอนุญาต
- มองหาธงที่มีความเสี่ยงสูง เช่น READ_SMS, PROCESS_OUTGOING_CALLS หรือ ACCESS_FINE_LOCATION
รายการธงแดงอนุญาต
หากแอป เครื่องคิดเลข หรือ ไฟฉาย ถามถึง READ_CONTACTS หรือ RECORD_AUDIO ให้ลบไฟล์ทันที ไม่มีเหตุผลที่ถูกต้องตามกฎหมายที่แอปเหล่านี้จะมีข้อมูลดังกล่าว
ทำความเข้าใจระดับสิทธิ์ของ Android
สิทธิ์ทั้งหมดไม่ได้ถูกสร้างขึ้นเท่ากัน Android แบ่งออกเป็นสามระดับ:
- ปกติ: การอนุญาตที่มีความเสี่ยงต่ำที่ไม่คุกคามความเป็นส่วนตัวโดยตรง (เช่น SET_ALARM) Android ให้สิทธิ์เหล่านี้โดยอัตโนมัติ
- อันตราย: การอนุญาตที่มีความเสี่ยงสูง (ผู้ติดต่อ ตำแหน่ง กล้อง) ต้อง เหล่านี้ได้รับการยืนยันจากคุณเมื่อแอปทำงาน
- ลายเซ็น/ระบบ: มีความเสี่ยงสูงมาก สิ่งเหล่านี้ใช้ได้กับแอปที่ลงนามโดยผู้ผลิตอุปกรณ์หรือระบบปฏิบัติการเท่านั้น
วิธีการด้วยตนเอง (การใช้ ZIP Viewer)
หากคุณมีทักษะด้านเทคนิค คุณสามารถตรวจสอบการอนุญาตได้ด้วยตัวเอง:
- เปลี่ยนชื่อ app.apk เป็น app.zip แล้วเปิดขึ้นมา
- ค้นหา AndroidManifest.xml (หมายเหตุ: อยู่ในรูปแบบไบนารีและจะมีลักษณะเป็นคำพูดที่ไม่มีความหมายในโปรแกรมแก้ไขข้อความ)
- ใช้เครื่องมือเช่น AXMLPrinter เพื่อแปลงเป็นข้อความที่อ่านได้
- ค้นหาแท็กที่ขึ้นต้นด้วย <uses-permission>
คำแนะนำ: การใช้ เครื่องมือออนไลน์ ของเราเร็วกว่ามากซึ่งจะถอดรหัสสิ่งนี้ให้คุณทันที
สิ่งที่เก็บไว้จริงใน AndroidManifest.xml
ไฟล์ Manifest คือแหล่งที่มาของความจริงสำหรับทุกสิทธิ์ ส่วนประกอบ และฟีเจอร์ที่แอปประกาศ ภายใน APK ไฟล์จะอยู่ในรูปแบบ XML ไบนารี ไม่ใช่ข้อความธรรมดาที่คุณเห็นในซอร์สโค้ด ดังนั้นจึงไม่สามารถอ่านได้ด้วยโปรแกรมแก้ไขข้อความทั่วไป เครื่องมือข้อมูล APK ของเราจะถอดรหัส XML ไบนารีและแสดงแท็กที่เกี่ยวข้อง สิ่งที่สำคัญที่สุดคือ:
- <uses-permission android:name="..."/>: ทุกการอนุญาตที่แอปอาจร้องขอ รายการ เต็ม อยู่ที่นี่ รวมถึงรายการที่แอปอาจไม่เคยใช้จริงในขณะรันไทม์ด้วย
- <uses-permission-sdk-23 ... />: เหมือนกัน แต่ขอเมื่อแอปทำงานบน Android 6 หรือใหม่กว่าเท่านั้น อุปกรณ์รุ่นเก่าจะได้รับอนุญาตโดยไม่แจ้งให้ทราบโดยไม่ต้องแจ้ง
- <uses-feature android:name="..." android:required="true|false"/>: คุณสมบัติฮาร์ดแวร์ที่แอปใช้ (กล้อง, GPS, NFC) เมื่อทำเครื่องหมาย ที่จำเป็น แล้ว Play Store จะซ่อนแอปจากอุปกรณ์ที่ไม่มีคุณสมบัตินี้
- <application android:debuggable="true">: ธงสีแดงขนาดยักษ์ใน APK ที่วางจำหน่าย แอปที่แก้ไขข้อบกพร่องได้จะเปิดเผยหน่วยความจำและสถานะกระบวนการแก่ทุกคนที่มีสิทธิ์เข้าถึง ADB ปฏิเสธ.
- <activity android:exported="true"> สำหรับกิจกรรมที่มีความละเอียดอ่อน: อนุญาตให้แอปอื่นเปิดหน้าจอนั้นได้ สำหรับแอปความเป็นส่วนตัว สิ่งนี้มักส่งสัญญาณถึงการเขียนโค้ดที่เลอะเทอะ
ระดับการป้องกันการอนุญาต: แผ่นโกง
Android กำหนด "ระดับการป้องกัน" ทุกการอนุญาต การรู้ว่าคำขอเป็นของระดับใดจะบอกคุณได้ว่าระบบปฏิบัติการจะปฏิบัติต่อคำขอนั้นอย่างจริงจังเพียงใด
| ระดับการป้องกัน | ประสบการณ์ผู้ใช้ | ตัวอย่าง |
|---|---|---|
| ปกติ | ได้รับอย่างเงียบๆ ณ เวลาติดตั้ง ไม่มีพรอมต์. | อินเทอร์เน็ต, สั่น, ACCESS_NETWORK_STATE, WAKE_LOCK |
| อันตราย | รันไทม์พร้อมท์ในครั้งแรกที่ใช้ฟีเจอร์ เพิกถอนได้ในการตั้งค่า | กล้อง, RECORD_AUDIO, READ_CONTACTS, ACCESS_FINE_LOCATION |
| ลายเซ็น | มอบให้เฉพาะกับแอปที่ลงนามด้วยใบรับรองเดียวกันกับแอปหรือระบบปฏิบัติการที่ให้สิทธิ์เท่านั้น | BIND_VPN_SERVICE, INSTALL_PACKAGES (เฉพาะระบบ) |
| ลายเซ็น | สิทธิพิเศษ | ใช้ได้เฉพาะกับแอปที่ติดตั้งไว้ล่วงหน้าในไดเร็กทอรี priv-app ของอิมเมจระบบ | จัดการ_ผู้ใช้, READ_LOGS |
| แอพป๊อป / บทบาท | ต้องมีขั้นตอนการตั้งค่าแยกต่างหากจึงจะเปิดใช้งานได้ | SYSTEM_ALERT_WINDOW, BIND_ACCESSIBILITY_SERVICE, จัดการ_EXTERNAL_STORAGE |
สิทธิ์ "ซ่อน" หมายถึงอะไรจริงๆ
ความเข้าใจผิดที่พบบ่อยคือสิทธิ์บางอย่างเป็นความลับ ไม่ใช่: ทุกสิทธิ์ที่แอปอาจใช้จะต้องประกาศใน AndroidManifest.xml และระบบปฏิบัติการปฏิเสธที่จะให้สิทธิ์ใด ๆ ที่ไม่อยู่ในรายการ สิ่งที่ผู้คนมักหมายถึงคำว่า "ซ่อนเร้น" เป็นหนึ่งในสองสิ่ง:
- สิทธิ์ระดับปกติจะเงียบ จะได้รับเมื่อติดตั้งโดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ สรุป Play Store ไม่แสดงบางส่วนด้วยซ้ำ พวกเขาถูก "ซ่อน" ในแง่ "มองข้ามง่าย" ไม่ใช่ในแง่ "ไม่เปิดเผย"
- แอป สิทธิ์ที่กำหนดเองที่แอปกำหนด สามารถประกาศแท็ก <permission> ของตนเองได้ และกำหนดให้ใช้กับส่วนประกอบภายใน สิ่งเหล่านี้มีไว้เพื่อการสื่อสารระหว่างแอพและไม่ได้กังวลเรื่องความเป็นส่วนตัว แต่สามารถนำไปใช้ในทางที่ผิดได้หากแอพยอดนิยมประกาศการอนุญาตแบบกำหนดเองโดยมีระดับการป้องกันที่ไม่ถูกต้อง แล้วแอพอื่นก็ใช้เป็นแบ็คดอร์
ไม่ว่าจะด้วยวิธีใด คำตอบก็เหมือนกัน: อ่านรายการ อย่าเชื่อถือคำอธิบายของ Play Store เพียงอย่างเดียว
ตัวอย่างการทำงาน: การตรวจสอบ APK จริง
สมมติว่าคุณมี example.apk อยู่ในโฟลเดอร์ดาวน์โหลดของคุณ นี่คือขั้นตอนการทำงานที่แน่นอน:
- เปิด เครื่องมือข้อมูล APK ในเบราว์เซอร์ของคุณ
- วาง APK ลงในพื้นที่อัปโหลด การประมวลผลเกิดขึ้นภายในเครื่อง ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ
- อ่านส่วน สิทธิ์ แต่ละรายการจะแสดงชื่อคงที่ (android.permission.READ_CONTACTS และคำอธิบายภาษาธรรมดาว่าอนุญาตอะไรบ้าง)
- เปรียบเทียบรายการกับหมวดหมู่ของแอป โดยคร่าวๆ คาดว่า:
- แอพกล้อง: CAMERA, RECORD_AUDIO (สำหรับวิดีโอ), การจัดเก็บ/สื่อเขียน
- อินเทอร์เน็ต แอพส่งข้อความ:, READ_CONTACTS, SEND_SMS (หากใช้ SMS เท่านั้น), RECORD_AUDIO (สำหรับบันทึกเสียง), CAMERA (สำหรับการส่งรูปภาพ)
- อินเทอร์เน็ต เกม: บางครั้ง RECORD_AUDIO (สำหรับการแชทด้วยเสียงในเกม) สิทธิ์ที่เกี่ยวข้องกับการเรียกเก็บเงิน ไม่ค่อยมีสิ่งอื่นใด
- แอพยูทิลิตี้ (เครื่องคิดเลข, ไฟฉาย, สภาพอากาศ): อินเทอร์เน็ต (สำหรับโฆษณา), ACCESS_NETWORK_STATE, อาจเป็น LOCATION (สภาพอากาศเท่านั้น) มีอะไรเกินกว่านั้นก็น่าสงสัย
- หากมีสิ่งใดในรายการไม่ตรงกับหมวดหมู่ ห้ามติดตั้ง ไม่มีเหตุผลที่ดีที่เครื่องคิดเลขจำเป็นต้องเข้าถึง SMS
ตรรกะเดียวกันนี้มีผลไม่ว่าไฟล์จะเป็น APK, XAPK (โดยที่เราอ่าน APK ฐานภายใน) หรือชุด APKS (โดยที่เราอ่านไฟล์ Manifest ของการแยกแต่ละรายการ)
ทำมันจาก Command Line
หากคุณต้องการเส้นทางเทอร์มินัล Android SDK จะส่ง aapt2 ซึ่งจะทิ้งรายการจาก APK ใด ๆ ในรูปแบบ XML ธรรมดา:
aapt2 dump badging example.apk | grep "uses-permission"
หรือใช้ apksigner เพื่อตรวจสอบใบรับรองการลงนามในเวลาเดียวกัน:
apksigner verify --print-certs example.apk
เครื่องมือเบราว์เซอร์ทำสิ่งเดียวกันสำหรับผู้ใช้ที่ไม่ต้องการติดตั้ง SDK เพียงเพื่อตรวจสอบไฟล์เดียว
คำถามที่พบบ่อย (FAQ)
ฉันสามารถปฏิเสธการอนุญาตหลังจากติดตั้ง APK ได้หรือไม่
ใช่. บน Android 6.0 ขึ้นไป คุณสามารถไปที่ การตั้งค่า > แอป > [ชื่อแอป] > การอนุญาต เพื่อเปิดหรือปิดการอนุญาตที่เป็นอันตรายแต่ละรายการได้
ไฟล์ XAPK มีสิทธิ์ที่แตกต่างกันหรือไม่
XAPK มี APK หนึ่งรายการขึ้นไป APK ภายในแต่ละไฟล์มีไฟล์ Manifest ของตัวเอง เครื่องมือของเราจะวิเคราะห์ APKหลัก ภายในบันเดิลเพื่อแสดงสิทธิ์ที่เกี่ยวข้อง
เหตุใดทุกแอปจึงขอ "การเข้าถึงเครือข่าย"
แอพเกือบทั้งหมดจำเป็นต้องเชื่อมต่ออินเทอร์เน็ตเพื่อการวิเคราะห์ รายงานจุดบกพร่อง หรือโฆษณา แม้ว่าจะเป็นเรื่องปกติ แต่ข้อมูลที่ถูกขโมยจะถูกส่งไปยังเซิร์ฟเวอร์ของแฮ็กเกอร์ด้วย
การตรวจสอบสิทธิ์อย่างชัดแจ้งก่อนที่คุณจะแตะติดตั้ง
คุณไม่สามารถตัดสินสิ่งที่คุณไม่เห็นได้ การใช้เวลาสิบวินาทีกับ ดูการอนุญาตของ APK ก่อนที่คุณจะไซด์โหลด ความแตกต่างระหว่างการรู้ว่าแอปสามารถเข้าถึงอะไรและการหวังว่าแอปจะทำงานได้ อ่านรายการก่อน และติดตั้งครั้งที่สอง