แอปพลิเคชัน CLI ที่เตรียมไฟล์ Android APK สำหรับการตรวจสอบ HTTPS โดยอัตโนมัติ
การตรวจสอบการรับส่งข้อมูล HTTPS ของแอปมือถือโดยใช้พร็อกซีอาจเป็นวิธีที่ง่ายที่สุดในการทราบวิธีการทำงาน อย่างไรก็ตาม ด้วยการกำหนดค่าความปลอดภัยเครือข่ายที่นำมาใช้ใน Android 7 และนักพัฒนาแอปพยายามป้องกันการโจมตี MITM โดยใช้การปักหมุดใบรับรอง การทำให้แอปทำงานกับพร็อกซี HTTPS กลายเป็นเรื่องที่น่าเบื่อทีเดียว
apk-mitm
ทำให้กระบวนการทั้งหมดเป็นแบบอัตโนมัติ สิ่งที่คุณต้องทำคือให้ไฟล์ APK และ apk-mitm
จะ:
คุณยังสามารถใช้ apk-mitm
เพื่อแพตช์แอปโดยใช้ Android App Bundle และ ไม่ จำเป็นต้องรูทโทรศัพท์ของคุณ
การปรับเปลี่ยนลักษณะการทำงานปกติของแอปเพื่อแก้ไขคุณลักษณะด้านความปลอดภัย เช่น การปักหมุดใบรับรอง จำเป็นต้องแก้ไขซอร์สโค้ดของแอป ก่อนที่ จะเรียกใช้ หรือ "เชื่อมต่อ" แอป ในขณะที่ กำลังทำงานเพื่อสกัดกั้นการเรียกใช้ฟังก์ชัน
ปัจจุบัน apk-mitm
ใช้แนวทางเดิมในการแก้ไขโค้ดของแอปโดย "แยกส่วน" แอปโดยใช้ Apktool ก่อน ทำการเปลี่ยนแปลงไฟล์หลายไฟล์ จากนั้นจึงประกอบกลับเข้าด้วยกัน (อีกครั้งโดยใช้ Apktool)
วิธีนี้มีประโยชน์ตรงที่ไม่ต้องใช้อุปกรณ์ที่รูท แต่ก็มีข้อเสียหลายประการเช่นกัน ปัญหาใหญ่ที่สุดก็คือแอปไม่ได้ ตั้งใจ ที่จะแยกชิ้นส่วนจริงๆ Apktool พยายามที่จะบรรลุเป้าหมายนั้นอยู่แล้ว แต่โดยเฉพาะอย่างยิ่งกับแอปขนาดใหญ่และซับซ้อน มันมักจะประสบปัญหา
ปัญหาอีกประการหนึ่งของแนวทางนี้คือวิธีการปักหมุดใบรับรองบางอย่าง เช่น การตรวจสอบที่ดำเนินการภายในไบนารีดั้งเดิม (เช่นในกรณีของเฟรมเวิร์กอย่าง Flutter) นั้นยากหรือเป็นไปไม่ได้เลยที่จะหลีกเลี่ยง ด้วยเหตุนี้ การลองใช้วิธีอื่นๆ สำหรับแอปที่ยุ่งยากมากขึ้นจึงอาจเป็นประโยชน์
โดยเฉพาะอย่างยิ่ง ฉันต้องการเน้นโครงการ android-unpinner
ของ mitmproxy และสคริปต์ frida-interception-and-unpinning
ปักหมุดโดย HTTP Toolkit วิธีการของพวกเขาใช้แพตช์ขณะรันไทม์โดยใช้ Frida ซึ่งมีประสิทธิภาพมากกว่ามาก แต่ก็หมายความว่าไม่สามารถใช้งานได้หรือใช้งานยากกว่าหากไม่มีอุปกรณ์ที่รูท
หากคุณมี Node.js (14+) และ Java (8+) เวอร์ชันล่าสุด คุณสามารถติดตั้ง apk-mitm
ได้โดยการเรียกใช้:
npm install -g apk-mitm
เมื่อติดตั้งแล้ว คุณสามารถรันคำสั่งนี้เพื่อแพตช์แอปได้:
apk-mitm < path-to-apk >
การแพตช์ไฟล์ APK ชื่อ example.apk
อาจมีลักษณะดังนี้:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
ตอนนี้คุณสามารถติดตั้งไฟล์ example-patched.apk
บนอุปกรณ์ Android ของคุณและใช้พร็อกซีเช่น Charles หรือ mitmproxy เพื่อดูปริมาณการใช้งานของแอป
คุณยังสามารถแพตช์แอปโดยใช้ Android App Bundle ด้วย apk-mitm
โดยจัดเตรียมไฟล์ *.xapk
(เช่น จาก APKPure) หรือไฟล์ *.apks
(ซึ่งคุณสามารถส่งออกได้ด้วยตนเองโดยใช้ SAI) หากคุณกำลังทำเช่นนี้บน Linux ตรวจสอบให้แน่ใจว่าได้ติดตั้งทั้ง zip
และ unzip
แล้ว
บางครั้งคุณจะต้องทำการเปลี่ยนแปลงแอปด้วยตนเองเพื่อให้แอปใช้งานได้ ในกรณีเหล่านี้ ตัวเลือก --wait
คือสิ่งที่คุณต้องการ การเปิดใช้งานจะทำให้ apk-mitm
รอก่อนที่จะเข้ารหัสแอปอีกครั้ง ซึ่งช่วยให้คุณสามารถเปลี่ยนแปลงไฟล์ในไดเร็กทอรีชั่วคราวได้
หากคุณต้องการทดลองกับการเปลี่ยนแปลงต่างๆ ใน APK การใช้ --wait
อาจไม่ใช่ตัวเลือกที่สะดวกที่สุด เนื่องจากจะบังคับให้คุณเริ่มต้นใหม่ทุกครั้งที่คุณใช้ ในกรณีนี้ คุณอาจต้องการดู APKLab เป็นโต๊ะงานวิศวกรรมย้อนกลับของ Android ที่สร้างขึ้นบน VS Code ที่มาพร้อมกับการรองรับ apk-mitm
และน่าจะช่วยให้คุณสามารถวนซ้ำได้รวดเร็วยิ่งขึ้น
ในอุปกรณ์บางรุ่น (เช่น Android TV) คุณอาจไม่สามารถเพิ่มใบรับรองใหม่ให้กับใบรับรองหลักของระบบได้ ในกรณีดังกล่าว คุณยังคงสามารถเพิ่มใบรับรองพร็อกซีของคุณลงในการกำหนดค่าความปลอดภัยเครือข่ายของแอปได้โดยตรง เนื่องจากใบรับรองดังกล่าวจะทำงานบนอุปกรณ์ใดก็ได้ คุณสามารถทำได้โดยการรัน apk-mitm
โดยตั้งค่าสถานะ --certificate
เป็นเส้นทางของใบรับรอง (ไฟล์ .pem
หรือ .der
) ที่พร็อกซีของคุณใช้
หากแอปใช้ Google Maps และแผนที่ใช้งานไม่ได้หลังจากการแพตช์ คีย์ API ของแอปอาจถูกจำกัดไว้เฉพาะใบรับรองของนักพัฒนาเท่านั้น คุณจะต้องสร้างคีย์ API ของคุณเองโดยไม่มีข้อจำกัด และเรียกใช้ apk-mitm
ด้วยตัวเลือก --wait
เพื่อให้สามารถแทนที่ค่า com.google.android.geo.API_KEY
ในไฟล์ AndroidManifest.xml
ของแอปได้
หาก apk-mitm
ขัดข้องขณะถอดรหัสหรือเข้ารหัส ปัญหาอาจเกี่ยวข้องกับ Apktool ตรวจสอบปัญหาของพวกเขาบน GitHub เพื่อค้นหาวิธีแก้ปัญหาที่เป็นไปได้ หากคุณพบเวอร์ชันของ Apktool ที่ไม่ได้รับผลกระทบจากปัญหานี้ คุณสามารถสั่งให้ apk-mitm
ใช้งานได้โดยระบุเส้นทางของไฟล์ JAR ผ่านตัวเลือก --apktool
MIT © นิคลาส ฮิกิ