วิธีแก้ไขไฟล์ APK ที่เสียหายและแตกไฟล์
คุณใช้เวลาหลายชั่วโมงในการดาวน์โหลดชุดเกม 2GB เพียงเพื่อให้เบราว์เซอร์ของคุณแจ้งว่า "ดาวน์โหลดล้มเหลว" ที่ 99% หรือแย่กว่านั้น สำหรับ Android ที่กรีดร้อง "ข้อผิดพลาดในการแยกวิเคราะห์: มีปัญหาในการแยกวิเคราะห์แพ็คเกจ" APK ที่เสียหายไม่จำเป็นต้องเป็นไฟล์ที่เสียหาย เนื่องจาก APK สร้างขึ้นบนมาตรฐานการบีบอัด ZIP จึงมักจะสามารถซ่อมแซมได้ อย่างน้อยก็เพียงพอที่จะดึงทรัพย์สินอันมีค่าภายในออกมา
ด้านล่างนี้เราจะพูดถึงสิ่งที่เสียหายจริงๆ ภายใน APK เครื่องมือซ่อมแซมที่ควรค่าแก่การเข้าถึง และวิธีที่ โปรแกรมแปลงไฟล์ XAPK ของเราสามารถช่วยได้เมื่อคุณจัดการกับชุดรวมที่เสียหาย
กายวิภาคของการทุจริต APK
APK นั้นเป็นไฟล์ ZIP ที่มีโครงสร้างเฉพาะ การทุจริตมักเกิดขึ้นที่หนึ่งในสามแห่ง:
- ส่วนหัว: ไบต์ที่จุดเริ่มต้นของไฟล์หายไปหรือมีการเปลี่ยนแปลง
- รายการ (XML): AndroidManifest.xml มีรูปแบบไม่ถูกต้องหรือใช้การเข้ารหัสที่ไม่รองรับ
- รหัส DEX: ไบต์ Java/Kotlin จริงถูกตัดทอน ทำให้แอปไม่สามารถทำงานได้
วิธีที่ 1: การซ่อมแซม ZIP ที่ไม่มีหัว (ง่ายที่สุด)
หากไฟล์ "อ่านได้" แต่ไม่สามารถเปิดได้ ให้ใช้เครื่องมือเช่น การซ่อมแซม ZIP ของ DiskInternals (ฟรี) หรือคำสั่ง zip -FF บรรทัดคำสั่งใน Linux/macOS เครื่องมือเหล่านี้จะสแกนไฟล์เพื่อหา "ลายเซ็น" ของไฟล์และสร้างไดเร็กทอรีกลางใหม่ตั้งแต่ต้น
รหัสสำหรับผู้ใช้ Terminal: zip -FF corrupt_app.apk --out fixed_app.apk
วิธีที่ 2: การแก้ไข Zipalign/Alignment
บางครั้ง APK "เสียหาย" เพียงเพราะไม่ได้จัดแนวตามขอบเขตขนาด 4 ไบต์ การจัดการหน่วยความจำของ Android ต้องการสิ่งนี้ คุณสามารถแก้ไขได้โดยใช้เครื่องมือ ซิปไลน์ จาก Android SDK:
zipalign -v 4 input.apk output.apk
คำเตือน Bit-Rot
หากไฟล์ DEX (คลาส.เด็กซ์) ไม่มีข้อมูล การซ่อมแซม ZIP จะทำให้แอปทำงานได้ ในกรณีนี้ เป้าหมายเดียวของคุณควรคือการแยก สินทรัพย์/ทรัพยากร และค้นหาสำเนาใหม่ของแอป
จะบอกได้อย่างไรว่ามีอะไรผิดปกติจริงๆ
ก่อนที่คุณจะเลือกเครื่องมือซ่อมแซม ให้ระบุความล้มเหลว ข้อความแสดงข้อผิดพลาดที่ Android (หรือเครื่องมือเก็บถาวรของคุณ) แสดงมักเป็นเบาะแส:
| อาการที่คุณเห็น. | มันมักจะหมายถึงอะไร | สิ่งที่ต้องลองก่อน |
|---|---|---|
| "การแยกวิเคราะห์แพ็คเกจ" ล้มเหลว (Android) | ไดเรกทอรีกลาง ZIP ไม่สามารถอ่านได้ หรือเวอร์ชันไฟล์ Manifest ไม่ตรงกัน | การซ่อมแซมส่วนหัว ZIP (วิธีที่ 1) |
| "เกิดปัญหาในการแยกวิเคราะห์แพ็กเกจ" + APK เล็กกว่าที่คาดไว้เล็กน้อย | การดาวน์โหลดที่ถูกตัดทอน: KB สองสามอันสุดท้ายยังมาไม่ถึง | ดาวน์โหลดซ้ำจากแหล่งเดียวกัน การซ่อมแซม ZIP หากไม่สามารถดาวน์โหลดซ้ำได้ |
| 7-Zip / WinRAR เปิดขึ้นมาแต่รายงาน "ข้อผิดพลาด CRC" ในแต่ละไฟล์ | ไฟล์แต่ละไฟล์ภายใน ZIP เสียหาย | แยกชิ้นส่วน ยกเว้น ทั้งหมดออกจากชิ้นส่วนที่เสียหาย จากนั้นดูว่ามีอะไรหายไป |
| "ไม่ได้ติดตั้งแอป" โดยไม่มีรายละเอียดเพิ่มเติม | บ่อยครั้งปัญหาลายเซ็นไม่ตรงกันหรือการจัดตำแหน่ง ไม่ใช่ความเสียหายที่แท้จริง | zipalign + ตรวจสอบลายเซ็นอีกครั้ง (วิธีที่ 2) |
| ขัดข้องทันทีหลังจากติดตั้งด้วย java.lang.VerifyError | รหัสไบต์ classes.dex เสียหายหรือเข้ากันไม่ได้กับเวอร์ชัน | ไม่สามารถกู้คืนได้ด้วยการซ่อมแซม รับสำเนาที่สะอาดอีกครั้ง |
การเดินทะลุคอนกรีต
ลองจินตนาการว่าคุณได้ APK ขนาด 320 MB ซึ่งการดาวน์โหลดถูกขัดจังหวะประมาณ 99% โทรศัพท์ของคุณปฏิเสธที่จะติดตั้งด้วยข้อความ "การแยกวิเคราะห์แพ็คเกจล้มเหลว" ต่อไปนี้คือวิธีโจมตีบนเวิร์กสเตชัน Windows หรือ macOS ตามลำดับที่คุณจะลองทำสิ่งต่างๆ
ขั้นตอนที่ 1 ยืนยันว่าไฟล์ส่วนใหญ่อยู่ที่นั่นเป็นอย่างน้อย
ตรวจสอบขนาดไฟล์กับแหล่งที่มาที่โฆษณา หากไฟล์มีขนาดเล็กลงอย่างมาก (เช่น 220 MB แทนที่จะเป็น 320 MB) การดาวน์โหลดจะถูกตัดทอนอย่างรุนแรง และแทบไม่มีประโยชน์ในการซ่อมแซม wrapper: ส่วนใหญ่ของ classes.dex หรือเนื้อหาหายไป ในกรณีนั้น ให้เริ่มการดาวน์โหลดใหม่
ขั้นตอนที่ 2 ทดสอบโครงสร้าง ZIP
เปิดเทอร์มินัลในโฟลเดอร์ที่มี APK และเรียกใช้บน macOS หรือ Linux:
unzip -t broken.apk
เครื่องมือจะรายงานแต่ละไฟล์ภายในไฟล์เก็บถาวรและข้อผิดพลาด CRC หากมีข้อผิดพลาดเพียงไม่กี่รายการและไม่ใช่ classes*.dex หรือ resources.arsc คุณมีโอกาสที่ดีที่จะสร้างการติดตั้งที่ใช้งานได้
ขั้นตอนที่ 3 สร้างไดเร็กทอรีกลางใหม่
หาก unzip -t บ่นเกี่ยวกับไดเร็กทอรีกลางเอง ("ไม่พบลายเซ็นสิ้นสุดไดเร็กทอรีกลาง", "ขาด 1 EOCD") ให้ใช้โหมด "แก้ไข":
zip -FF broken.apk --out fixed.apk
ธง -FF บอกให้ zip สแกนไฟล์เพื่อหาลายเซ็นส่วนหัวไฟล์ในเครื่อง และสร้างรายการไดเรกทอรีใหม่ทีละรายการ เอาต์พุต fixed.apk คือสิ่งที่คุณพยายามติดตั้งจริงๆ
ขั้นตอนที่ 4 จัดตำแหน่งใหม่และลงนามใหม่หากจำเป็น
หลังจากการเปลี่ยนแปลงโครงสร้าง ลายเซ็นของ APK จะใช้ไม่ได้อีกต่อไป เนื่องจากการแก้ไขแม้แต่ไบต์เดียวจะทำให้บล็อกลายเซ็น v2/v3 เป็นโมฆะ หากคุณมีคีย์การลงนามของคุณเอง (ซึ่งเป็นเรื่องปกติสำหรับบิลด์ที่คุณเป็นเจ้าของ) ให้จัดเรียงและลงนามใหม่:
zipalign -v 4 fixed.apk aligned.apk
apksigner sign --ks my.keystore aligned.apk
หากไม่มีรหัสของคุณเอง วิธีเดียวที่จะติดตั้งไฟล์ได้คือติดตั้งผ่าน ที่มีอยู่เดิม ด้วยใบรับรองการลงนามเดียวกัน ซึ่งหมายความว่า APK ที่ได้รับการซ่อมแซมจากบุคคลที่สามจะไม่ติดตั้งทับการติดตั้ง Play Store ที่มีอยู่ เนื่องจากห่วงโซ่การลงนามมีการเปลี่ยนแปลง
เมื่อการซ่อมแซมเป็นเป้าหมายที่ผิด
คุ้มค่าที่จะซื่อสัตย์ว่า "การแก้ไข" ทำได้และไม่สามารถทำได้:
- คุณไม่สามารถกู้คืนไบต์ที่ไม่เคยมาถึงได้ หากการดาวน์โหลดถูกตัดทอน การซ่อมแซมส่วนหัวใดๆ จะสร้างข้อมูลที่ขาดหายไปขึ้นมาใหม่ ดาวน์โหลดใหม่
- Bit-rot เป็นแบบถาวร หากไฟล์อยู่บนพื้นที่จัดเก็บข้อมูลที่พลิกบิตสองสามบิตภายใน classes.dex ขั้นตอนการตรวจสอบโค้ดไบต์ ณ เวลาติดตั้งจะปฏิเสธไฟล์นั้น และไม่มีทางรู้ได้เลยว่าไบต์ต้นฉบับควรจะเป็นเท่าใด
- ไฟล์ที่ซ่อมแซมจะมีลายเซ็นใหม่ แม้แต่ APK ที่ได้รับการแก้ไขอย่างสมบูรณ์แบบก็ไม่ได้รับการลงนามโดยผู้เผยแพร่ดั้งเดิมอีกต่อไป นั่นเป็นคุณลักษณะ ไม่ใช่ข้อบกพร่อง: จะป้องกันไม่ให้ผู้โจมตีส่งโค้ดที่เป็นอันตรายไปยังแอปยอดนิยมและลงนามใหม่ราวกับว่าพวกเขาเป็นผู้เผยแพร่ดั้งเดิม
หากเป้าหมายของคุณคือการเล่นเกมที่การดาวน์โหลดเสียชีวิตถึง 99% เส้นทางที่มีการต่อต้านน้อยที่สุดคือการล้างไฟล์บางส่วน เพิ่มพื้นที่ว่างในดิสก์ และดาวน์โหลดอีกครั้งจากการเชื่อมต่อที่เชื่อถือได้ เครื่องมือซ่อมแซมจะโดดเด่นเมื่อไม่สามารถดาวน์โหลดซ้ำได้ เช่น APK เก่าที่เก็บไว้ ไฟล์ที่ได้รับผ่านการถ่ายโอน LAN ที่ไม่สม่ำเสมอ หรือข้อมูลสำรองที่แหล่งต้นฉบับหายไป
คำถามที่พบบ่อย (FAQ)
ฉันสามารถแยกไอคอนและภาพหน้าจอออกจาก APK ที่เสียหายได้หรือไม่
ปกติแล้วใช่ ไฟล์ไอคอนอยู่ภายใต้ res/mipmap-* และข้อมูลภาพหน้าจอนั้นหาได้ยากใน APK ในตอนแรก แม้ว่าไดเร็กทอรีส่วนกลางจะเสียหาย แต่ส่วนหัวของไฟล์แต่ละไฟล์ก็ยังสมบูรณ์อยู่บ่อยครั้งมากพอที่ตัวเลือก "แยกไฟล์โดยละเว้นข้อผิดพลาด" ของ 7-Zip จะดึงรูปภาพส่วนใหญ่ออกมา
APK ที่ได้รับการซ่อมแซมจะอัปเดตแอปที่ติดตั้งหรือไม่
เฉพาะในกรณีที่การซ่อมแซมยังคงรักษาลายเซ็นดั้งเดิมไว้ ซึ่งโดยทั่วไปจะเป็นไปไม่ได้หลังจากการแก้ไขโครงสร้างแล้ว ถือว่า APK ที่ได้รับการซ่อมแซมเป็นการติดตั้งใหม่: ถอนการติดตั้งเวอร์ชันเก่าก่อน (คุณจะสูญเสียข้อมูล) หรือติดตั้งบนอุปกรณ์ที่ยังไม่มีแอป
มีเครื่องมือออนไลน์ที่ทำทั้งหมดนี้หรือไม่?
เครื่องมือที่ใช้เบราว์เซอร์สามารถอ่านโครงสร้างของ APK และบอกคุณได้ว่ามีอะไรเสียหาย (เครื่องมือข้อมูล APK ของเราทำเช่นนั้นได้) แต่จริงๆ แล้วการเขียน ZIP ใหม่และการลงนามใหม่ต้องใช้เครื่องมือเดสก์ท็อปหรือเซิร์ฟเวอร์ เราจงใจไม่ดำเนินการขั้นตอนการลงชื่อใหม่บนเซิร์ฟเวอร์ เนื่องจากนั่นหมายถึงการอัปโหลดไฟล์ของคุณ: คำมั่นสัญญาด้านความเป็นส่วนตัวของไซต์นี้คือ ไม่มีสิ่งใดออกจากเบราว์เซอร์ของคุณ
แล้วไฟล์ XAPK ที่ไม่สามารถแตกไฟล์ได้ล่ะ?
XAPK เป็นเพียง ZIP ดังนั้นจึงใช้เทคนิคเดียวกันนี้ เรียกใช้ zip -FF เพื่อกู้คืน APK ภายในพร้อมไฟล์ OBB ใด ๆ จากนั้นดำเนินการราวกับว่าคุณมี APK ที่เสียหายและ OBB แยกต่างหาก
หากเป้าหมายของคุณคือเพียงเพื่อให้ได้กราฟิก เสียง หรือข้อมูล OBB จากการดาวน์โหลดที่ล้มเหลว ให้ใช้ 7-Zip 7-Zip มีความเข้มงวดมากกว่าเครื่องมือ ZIP ของ Windows Explorer และมักจะให้คุณ "ละเว้นข้อผิดพลาด" เพื่อแยกไฟล์ที่ดาวน์โหลดเพียงบางส่วนเท่านั้น
สแกน APK ของคุณอย่างละเอียด
อัปโหลดไฟล์ไปยังตัววิเคราะห์ของเราเพื่อดูว่าโครงสร้างถูกต้องหรือไม่สามารถอ่านไฟล์ Manifest ได้
วิเคราะห์ความสมบูรณ์ของไฟล์บทสรุป
"ข้อผิดพลาดในการแยกวิเคราะห์" คือระบบปฏิบัติการยอมแพ้ ด้วยการใช้เครื่องมือที่กล่าวมาข้างต้น คุณสามารถควบคุมกลับคืนมาได้ แม้ว่าคุณจะไม่สามารถ "แก้ไข" แอปที่เสียหายเพื่อให้ทำงานได้เสมอไป แต่คุณก็สามารถ กู้คืนข้อมูล เข้าไปข้างในได้เกือบตลอดเวลา หากต้องการเคล็ดลับเพิ่มเติมในการจัดการไฟล์ขนาดใหญ่ โปรดดูคำแนะนำของเราใน การรวม APK แบบแยกส่วน หรือ การแยกข้อมูลเกม OBB