เอดีบี
รูปเทอร์มินัลของกะโนมที่ได้เริ่มเซิฟเวอร์ของเอดีบี แล้วแสดงรายการอุปกรณ์ที่ต่อกับคอมพ์ หลังจากนั้นก็เปิดเชลล์แล้วทำรายคำสั่ง uname | |
ผู้ออกแบบ | กูเกิล |
---|---|
รุ่นเสถียร | 34.0.1 (มี.ค. 2023)
|
ที่เก็บข้อมูล | android.googlesource.com |
ภาษาที่เขียน | ซี++ |
ระบบปฏิบัติการ | วินโดวส์, ลินุกซ์, แมคโอเอส |
รวมถึง | Android SDK |
ประเภท | เครื่องมือพัฒนาซอฟต์แวร์ |
สัญญาอนุญาต | สัญญาอนุญาตอะแพชี 2.0 |
เว็บไซต์ | developer |
เอดีบี (อังกฤษ: Android Debug Bridge ตัวย่อ ADB) เป็นเครื่องมือที่ใช้ดีบั๊กซอฟต์แวร์ในระบบปฏิบัติการแอนดรอยด์ โดยเดมอนบนอุปกรณ์แอนดรอยด์จะต่อกับเซิร์ฟเวอร์บนพีซีที่เป็นโฮสต์ ผ่านสายยูเอสบีหรือผ่านโพรโทคอลอินเทอร์เน็ตทีซีพี และเซิฟเวอร์ก็จะต่อกับแอปลูกข่ายที่ผู้ใช้ใช้ด้วยทีซีพี กูเกิลได้เริ่มแจกจำหน่ายเป็นซอฟต์แวร์โอเพ่นซอร์ซใต้สัญญาอนุญาตอะแพชีตั้งแต่ปี 2007 โดยมีลูกเล่นเป็นเชลล์และการสำรองข้อมูล เอดีบีใช้ได้กับวินโดวส์ ลินุกซ์ และแมคโอเอส ต่อมามีบ็อตเน็ตและมัลแวร์ที่ใช้มันในทางที่ผิด จึงมีการพัฒนาการพิสูจน์ตัวจริงด้วยอาร์เอสเอ และการระบุรายการอุปกรณ์ที่อนุญาตให้ใช้โดยเฉพาะๆ (device whitelisting)
ลูกเล่น
[แก้]ลูกเล่นของเอดีบี รวมการก๊อปไฟล์ไปจากคอมพิวเตอร์ที่เป็นโฮสต์[1],
การติดตั้งแอป, การดูเอาต์พุตของ logcat, เชลล์ยูนิกซ์[2]
และการรีบูตเข้าใน Qualcomm EDL mode[3]
ยกตัวอย่างเช่น สามารถสำรองข้อมูลแอปต่างๆ บนอุปกรณ์แอนดรอยด์ด้วยรายคำสั่ง backup
[4]
เอดีบียังรองรับโพรโทคอล Java Debug Wire Protocol เพื่อใช้ดีบั๊กแอปอีกด้วย[5]
มีส่วนต่อประสานกราฟิกกับผู้ใช้ต่างๆ ที่ได้ทำขึ้น เช่น แอป Android Device Monitor ที่เป็นส่วนของแอนดรอยด์สตูดิโอ และสามารถใช้ดูดข้อมูลจากอุปกรณ์แอนดรอยด์[6]
เอดีบีสามารถใช้ติดตั้งไฟล์ APK ที่ไม่ได้มาจากกูเกิลเพลย์ เป็นวิธีที่เรียกว่า side-loading วิธีนี้ได้ใช้ติดตั้งแอปสำหรับ Windows Subsystem for Android ของวินโดวส์[7] และ Android virtual machine ของโครมโอเอส[8]
ประวัติ
[แก้]กูเกิลได้เริ่มแจกจำหน่าย Android SDK ในปี 2007 พร้อมกับเอดีบี[9] และเริ่มตั้งแต่ปี 2017 ก็ได้อนุญาตให้ดาวน์โหลดเอดีบีต่างหากกับ Android SDK[10]
ในปี 2015 ไมโครซอฟท์ได้แจกจำหน่าย Android emulator ที่สามารถต่อกับเครื่องลูกข่ายของเอดีบี[11]
ในปี 2016 แอนดรอยด์สตูดิโอรุ่น 2.0 ทำให้สามารถตั้งแอปและส่งไฟล์ผ่านเอดีบีได้เร็วเพิ่มขึ้นถึง 5 เท่า[12]
ในปี 2017 เพื่อให้ใช้ Android Things ได้ง่าย กูเกิลได้สร้างแอปที่ซ่อนรายคำสั่งเอดีบีไว้ภายใน[13]
สำหรับแอนดรอยด์ 11 ในปี 2020 กูเกิลได้เพิ่มวิธีการติดตั้งเอพีเคขนาดใหญ่โดยทำเป็นส่วนๆ (incremental installation)[14]
ในปี 2020 แอนดรอยด์สตูดิโอสำหรับแมคโอเอสเริ่มให้ใช้เอดีบีผ่านไวไฟ[15]
สำหรับแอนดรอยด์ 12 ในปี 2021 รายคำสั่ง adb backup
ได้จำกัดลงให้สำรองข้อมูลสำหรับแอปเฉพาะที่ผู้พัฒนาเลือกให้สำรองข้อมูลเท่านั้น (เป็น per-app manifesto configuration)[16]
หลังจากที่ได้เลิกใช้ในแอนดรอยด์ 10 โดยเลิกพร้อมๆ กับ adb restore
[17]
ระบบปฏิบัติการกูเกิล ฟิวเชีย จะใช้ร่วมกับเอดีบีได้ ถึงแม้ในปลายปี 2022 ก็ยังต้องใช้โปรแกรม fx และ ffx เพื่อกิจคล้ายๆ กันอยู่[18]
โครงงาน
[แก้]
|
คอมพิวเตอร์ที่เป็นโฮสต์
[แก้]สำหรับวินโดวส์ Android SDK มีไฟล์ฐานสองคือ adb.exe ที่สามารถดึงออกมาติดตั้งได้[19] เว็บไซต์ How-To แนะนำให้เพิ่มโฟล์เดอร์ที่มี adb.exe ในค่าตัวแปรสิ่งแวดล้อมคือ PATH[20]
สำหรับอูบุนตู สามารถติดตั้งเอดีบีได้ด้วยแพ็กเกจ android-tools-adb
[21]
สำหรับเดเบียน ยังแนะนำอีกด้วยว่าหลังจากติดตั้งแพ็กเกจ adb
แล้ว ให้ติดตั้งแพ็กเกจ android-sdk-platform-tools-common
ด้วย เพราะจะติดตั้ง udev rules ซึ่งทำให้ใช้ซอฟต์แวร์ได้โดยไม่ต้องมีสิทธิรูต[22]
สำหรับแมคโอเอสและลินุกซ์ดิสทริบิวชันอื่นๆ สามารถดาวนโหลด์ติดตั้งไฟล์ แล้วเปลี่ยนตัวแปร PATH ใน bashrc[23]
อุปกรณ์แอนดรอยด์
[แก้]สำหรับแอนดรอยด์รุ่น 4.2.2 และหลังจากนั้น (API level 17) จะมีกล่องข้อความที่แสดงรหัสย่ออาร์เอสเอ (fingerprint) ที่ผู้ใช้ควรเช็คแล้วยอมรับ ซึ่งป้องกันไม่ให้คอมพิวเตอร์ก่อการร้ายฉวยโอกาสกับกลไกดีบั๊กโดยไม่ได้รับอนุญาตจากผู้ใช้[24] เริ่มตั้งแต่แอนดรอยด์รุ่น 4.2 เมนูค่าตั้งผู้พัฒนา (developer settings) ก็จะซ่อนอยู่เป็นปกติ แต่เมื่อกดเลขบิลด์ 7 ครั้งในเมนู about ก็จะปรากฏให้เห็น หลังจากนั้นก็จะสามารถเปิด USB debugging ได้[25] ผู้ผลิตบางบริษัทใช้วิธีการอื่นในการเปิดให้ใช้ค่าตั้งนี้ ยกตัวอย่างเช่น หัวเว่ย จะต้องใส่รหัสพินก่อนจะเปิดใช้เอดีบี[26]
ถ้าหน้าจอของแอนดรอยด์เสีย ก็อาจจะต่อเมาส์ผ่าน USB On-The-Go แล้วเปิด USB debuggingได้[27][26]
สถาปัตยกรรม
[แก้]โพรโทคอลเอดีบีสามารถส่งผ่านยูเอ็สบี หรือผ่านไวไฟโดยใช้ทีซีพี
มีสถาปัตยกรรมเป็นแบบผู้รับ-ผู้ให้บริการ
มีโพรโทคอลอยู่สองอย่างที่ใช้
อย่างแรกใช้ระหว่างระบบรับบริการบนคอมกับระบบให้บริการบนคอม อย่างที่สองระหว่างระบบให้บริการบนคอมกับเดมอนบนอุปกรณ์แอนดรอยด์
เดมอนของเอดีบีใช้ภาษาซีทำให้เกิดผล โดยดำเนินการอยู่ในพื้นที่ผู้ใช้ของแอนดรอยด์ (Android user space)
โดยได้การสนับสนุนจาก Android USB framework คือ UsbDeviceManager
และ UsbDebuggingManager
[5]
โพรโทคอลระหว่างผู้รับกับผู้ให้บริการ
[แก้]ผู้รับบริการจะสื่อสารกับผู้ให้บริการผ่านซ็อกเก็ตทีซีพี คือ ผู้ให้บริการจะคอยฟังคำสั่งที่พอร์ตหนึ่งๆ ที่ผู้รับบริการจะส่งคำขอบริการไปหา คำขอบริการจะมีเขตข้อมูลเบื้องต้นยาว 4 ไบต์ในรูปแบบแอสกีบวกกับข้อมูลที่ส่ง (payload) ข้อมูลที่ส่งจะเริ่มด้วยคำว่า "host" ซึ่งแสดงว่ากำลังส่งข้อมูลไปยังผู้ให้บริการ ผู้ให้บริการก็จะตอบด้วยคำว่า OKAY หรือ FAIL เพื่อแสดงสถานะการบริการ บวกกับข้อมูลที่ส่งและความยาว[5]
โพรโทคอลระหว่างผู้ให้บริการกับเดมอน
[แก้]ข้อความที่ผู้ให้บริการส่งไปยังเดมอน มีหัวเรื่องยาว 24 ไบต์ ซึ่งมีเขตข้อมูลดังต่อไปนี้[5]
- คำสั่ง
- อาร์กิวเมนต์ที่หนึ่ง
- อาร์กิวเมนต์ที่สอง
- ความยาวข้อมูล >=0
- รหัสเช็คข้อมูล CRC-32
- ค่าแมจิก คำนวณโดย
คำสั่ง
XOR0xFFFFFFFF
ความปลอดภัย
[แก้]จนถึงแอนดรอยด์รุ่น 2.2 ระบบจะอ่อนแอต่อการโจมตีแบบ RageAgainstTheCage เพราะเดมอนของเอดีบีไม่เช็คค่า return ของการเรียกระบบคือ setuid เมื่อพยามยามลดสิทธิของโปรแกรมหลัก การโจมตีจะแยก (fork) กระบวนการจนกระทั่งทำไม่ได้เพราะหมดค่าระบุกระบวนการ (process identifier) เมื่อเดมอนล้มแล้วเริ่มใหม่ ก็จะไม่สามารถเริ่มกระบวนการใหม่ที่มีสิทธิลดลง ดังนั้น ก็จะดำเนินการต่อไปด้วยสิทธิของรูต ซึ่งทำให้ได้เชลล์ที่มีสิทธิเป็นรูต[28]
ในปี 2017 ได้พบช่องโหว่ทางความปลอดภัยที่ใช้เอดีบีเพื่อเข้าควบคุมโมเด็มซึ่งอยู่บนบอร์ด แต่การโจมตีจะต้องอาศัยเอดีบีที่ได้เปิดใช้แล้ว และได้รับอนุญาตให้ต่อกับคอมนั้นแล้ว แม้นักวิจัยที่พบช่องโหว่นี้ก็ระบุว่า ยังมีทางเลี่ยงอื่นๆ อีก[29]
มีสกุลมัลแวร์ต่างๆ รวมทั้ง ADB.Miner, Ares, IPStorm, Fbot และ Trinity 20 ที่สแกนอินเทอร์เน็ตเพื่อหาดูส่วนต่อประสานเอดีบีที่เปิดใช้อยู่ แล้วติดตั้งมัลแวร์ลงในอุปกรณ์เหล่านั้น[30]
เอดีบียังสามารถใช้ลบมัลแวร์ออกได้ด้วย โดยบูตอุปกรณ์ให้เข้าในเซฟโหมด แล้วใช้รายคำสั่ง adb uninstall
[31]
ดูเพิ่ม
[แก้]เชิงอรรถและอ้างอิง
[แก้]- ↑ Darcey, Lauren (2012). Android wireless application development. Shane Conder (3rd ed.). Upper Saddle River, NJ: Addison-Wesley. ISBN 978-0-321-81383-1. OCLC 749852462. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ "Things You Can Do with Android's adb Command". For Dummies (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2018-05-15. สืบค้นเมื่อ 2021-09-09.
- ↑ EASTTOM, CHUCK (2021). An In-Depth Guide to Mobile Device Forensics. [S.l.]: CRC PRESS. p. 72. ISBN 978-0-367-63300-4. OCLC 1250310301. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ "How to create a full backup of your Android device without root". 2015-03-06. เก็บจากแหล่งเดิมเมื่อ 2016-01-24. สืบค้นเมื่อ 2016-01-29.
- ↑ 5.0 5.1 5.2 5.3 Regupathy, Rajaram (2014). Unboxing Android USB: a hands-on approach with real World examples. Berkeley, CA. ISBN 978-1-4302-6209-1. OCLC 880673864. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ Morgillo, Ivan; Viola, Stefano (2016). Learning embedded Android N programming: create the perfectly customized system by unleashing the power of Android OS on your embedded device. Birmingham, UK. p. 89. ISBN 9781785283284. OCLC 1020708322. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ "How to sideload Android apps on Windows 11". 2022-01-23.
- ↑ "How to sideload apps to a Chromebook". 2023-03-05.
- ↑ "Google releases Android SDK". Macworld (ภาษาอังกฤษแบบอเมริกัน). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ "Google makes ADB, fastboot, and other platform tools available without full SDK or Android Studio download". Android Police (ภาษาอังกฤษแบบอเมริกัน). 2017-01-05. เก็บจากแหล่งเดิมเมื่อ 2021-04-10. สืบค้นเมื่อ 2021-09-09.
- ↑ Vasile, Cosmin. "Microsoft Releases Android Emulator and It's Supposed to Be Faster than Google's". Softpedia (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ "Android Studio 2.0 - Beta". Android Developers Blog (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ "Android Things Developer Preview 6". Android Developers Blog (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ "Turning it up to 11: Android 11 for developers". Android Developers Blog (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-17. สืบค้นเมื่อ 2021-09-10.
- ↑ "Announcing Android Studio Arctic Fox (2020.3.1) & Android Gradle plugin 7.0". Android Developers Blog (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-12. สืบค้นเมื่อ 2021-09-10.
- ↑ "Behavior changes: Apps targeting Android 12 | Android 12 Beta". Android Developers (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-28. สืบค้นเมื่อ 2021-09-28.
- ↑ "Google Considers Removing Android ADB Backup and Restore".
- ↑ Bradshaw, Kyle (2022-08-26). "Google wants to make Fuchsia devices manageable with Android's ADB tool". 9to5Google (ภาษาอังกฤษแบบอเมริกัน). สืบค้นเมื่อ 2022-08-29.
- ↑ Harwani, B. M. (2013). PhoneGap build: developing cross platform mobile applications in the cloud. Boca Raton. p. 38. ISBN 978-1-4665-8975-9. OCLC 862745697. เก็บจากแหล่งเดิมเมื่อ 2022-03-07. สืบค้นเมื่อ 2022-01-29.
- ↑ Hoffman, Chris; Fedewa, Joe (2021-09-04). "How to Install and Use ADB, the Android Debug Bridge Utility". How-To Geek (ภาษาอังกฤษแบบอเมริกัน). เก็บจากแหล่งเดิมเมื่อ 2021-09-18. สืบค้นเมื่อ 2021-09-09.
- ↑ Smyth, Neil (2020). "7". Android Studio 4. 0 Development Essentials - Java Edition: Developing Android Apps Using Android Studio 4. 0, Java and Android Jetpack. Cary. ISBN 978-1-951442-21-7. OCLC 1190906409. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ "Debian -- Details of package adb in bullseye". packages.debian.org. เก็บจากแหล่งเดิมเมื่อ 2021-09-08. สืบค้นเมื่อ 2021-09-08.
- ↑ "How to Install Android Debug Bridge (ADB) and Fastboot". Lifewire (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2022-01-30. สืบค้นเมื่อ 2022-01-18.
- ↑ "Run apps on a hardware device". Android Developers (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-08. สืบค้นเมื่อ 2021-09-08.
- ↑ Wallen, Jack. "How to enable Developer options in Android 4.2". TechRepublic (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-09. สืบค้นเมื่อ 2021-09-09.
- ↑ 26.0 26.1 Aranzulla, Salvatore. "Come attivare debug USB". Salvatore Aranzulla (ภาษาอิตาลี). เก็บจากแหล่งเดิมเมื่อ 2021-09-09. สืบค้นเมื่อ 2021-09-09.
- ↑ Ogubuike, Udochi (2019-08-09). "How to enable USB debugging mode on Android". The Punch (ภาษาอังกฤษแบบอเมริกัน). เก็บจากแหล่งเดิมเมื่อ 2019-09-17. สืบค้นเมื่อ 2021-09-09.
- ↑ Drake, Joshua J. (2014). Android hacker's handbook. Zach Lanier, Collin Mulliner, Pau Oliva, Stephen A. Ridley, Georg Wicherski. Indianapolis, IN: Wiley. p. 75. ISBN 978-1-118-60861-6. OCLC 875820167. เก็บจากแหล่งเดิมเมื่อ 2021-09-26. สืบค้นเมื่อ 2021-09-26.
- ↑ Mendelsohn, Tom (2017-01-09). "Google plugs severe Android vulnerability that exposed devices to spying". Ars Technica (ภาษาอังกฤษแบบอเมริกัน). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ Cimpanu, Catalin. "Android devices ensnared in DDoS botnet". ZDNet (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
- ↑ Schuman, Evan. "This Vultur app takes malicious to the next level". Computerworld (ภาษาอังกฤษ). เก็บจากแหล่งเดิมเมื่อ 2021-09-10. สืบค้นเมื่อ 2021-09-10.
แหล่งข้อมูลอื่น
[แก้]- เว็บไซต์ทางการ
- "Using ADB and fastboot". LineageOS wiki. สืบค้นเมื่อ 2023-05-02.
- "Android Debug Bridge". Arch Linux wiki. สืบค้นเมื่อ 2023-05-02.
- "Android/adb - Gentoo Wiki". Gentoo Linux wiki. สืบค้นเมื่อ 2023-05-02.
- "Android Debug Bridge". Android Wiki (ภาษาอังกฤษ). คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2022-02-28. สืบค้นเมื่อ 2023-05-02.