# เอดีบี
เอดีบี (ตัวย่อ ADB) เป็นเครื่องมือที่ใช้ดีบั๊กซอฟต์แวร์ใน
โดยเดมอนบนอุปกรณ์แอนดรอยด์จะต่อกับเซิร์ฟเวอร์บนพีซีที่เป็นโฮสต์ ผ่านสายหรือผ่านอินเทอร์เน็ต
และเซิฟเวอร์ก็จะต่อกับแอปลูกข่ายที่ผู้ใช้ใช้ด้วยทีซีพี
ได้เริ่มแจกจำหน่ายเป็นใต้ตั้งแต่ปี2007 โดยมีลูกเล่นเป็นเชลล์และการสำรองข้อมูล
เอดีบีใช้ได้กับวินโดวส์ ลินุกซ์ และแมคโอเอส
ต่อมามีบ็อตเน็ตและมัลแวร์ที่ใช้มันในทางที่ผิด จึงมีการพัฒนาการพิสูจน์ตัวจริงด้วยอาร์เอสเอ และการระบุรายการอุปกรณ์ที่อนุญาตให้ใช้โดยเฉพาะ ๆ (device whitelisting)

 ลูกเล่น 
thumb|left|
Android Device Monitor
ลูกเล่นของเอดีบี รวมการก๊อปไฟล์ไปจากคอมพิวเตอร์ที่เป็นโฮสต์,
การติดตั้งแอป, การดูเอาต์พุตของ logcat, เชลล์ยูนิกซ์
และการเข้าใน Qualcomm EDL mode
ยกตัวอย่างเช่น สามารถสำรองข้อมูลแอปต่าง ๆ บนอุปกรณ์แอนดรอยด์ด้วยรายคำสั่ง backup
เอดีบียังรองรับโพรโทคอล Java Debug Wire Protocol เพื่อใช้ดีบั๊กแอปอีกด้วย

มีส่วนต่อประสานกราฟิกกับผู้ใช้ต่าง ๆ ที่ได้ทำขึ้น
เช่น แอป Android Device Monitor ที่เป็นส่วนของแอนดรอยด์สตูดิโอ และสามารถใช้ดูดข้อมูลจาก

เอดีบีสามารถใช้ติดตั้งไฟล์ APK ที่ไม่ได้มาจากกูเกิลเพลย์ เป็นวิธีที่เรียกว่า side-loading วิธีนี้ได้ใช้ติดตั้งแอปสำหรับ Windows Subsystem for Android ของวินโดวส์
และ Android virtual machine ของโครมโอเอส

 ประวัติ 
กูเกิลได้เริ่มแจกจำหน่าย Android SDK ในปี2007 พร้อมกับเอดีบี
และเริ่มตั้งแต่ปี2017 ก็ได้อนุญาตให้ดาวน์โหลดเอดีบีต่างหากกับ Android SDK

ในปี2015 ไมโครซอฟท์ได้แจกจำหน่าย Android emulator ที่สามารถต่อกับเครื่องลูกข่ายของเอดีบี
ในปี2016 แอนดรอยด์สตูดิโอรุ่น 2.0 ทำให้สามารถตั้งแอปและส่งไฟล์ผ่านเอดีบีได้เร็วเพิ่มขึ้นถึง 5เท่า
ในปี2017 เพื่อให้ใช้ Android Things ได้ง่าย กูเกิลได้สร้างแอปที่ซ่อนรายคำสั่งเอดีบีไว้ภายใน
สำหรับ ในปี2020 กูเกิลได้เพิ่มวิธีการติดตั้งเอพีเคขนาดใหญ่โดยทำเป็นส่วน ๆ (incremental installation)
ในปี2020 สตูดิโอสำหรับเริ่มให้ใช้เอดีบีผ่านไวไฟ
สำหรับแอนดรอยด์ 12 ในปี 2021รายคำสั่ง adb backup ได้จำกัดลงให้สำรองข้อมูลสำหรับแอปเฉพาะที่ผู้พัฒนาเลือกให้สำรองข้อมูลเท่านั้น (เป็น per-app manifesto configuration)
หลังจากที่ได้เลิกใช้ในแอนดรอยด์ 10 โดยเลิกพร้อม ๆ กับ adb restore
ระบบปฏิบัติการกูเกิล ฟิวเชีย จะใช้ร่วมกับเอดีบีได้ ถึงแม้ในปลายปี2022 ก็ยังต้องใช้โปรแกรม fx และ ffx เพื่อกิจคล้าย ๆ กันอยู่

 โครงงาน 

 คอมพิวเตอร์ที่เป็นโฮสต์ 
สำหรับวินโดวส์ Android SDK มีไฟล์ฐานสองคือ adb.exe ที่ดึงออกมาติดตั้งได้
เว็บไซต์ How-To แนะนำให้เพิ่มโฟล์เดอร์ที่มี adb.exe ในค่าตัวแปรสิ่งแวดล้อมคือ PATH

สำหรับอูบุนตู สามารถติดตั้งเอดีบีได้ด้วยแพ็กเกจ android-tools-adb
สำหรับ ยังแนะนำอีกด้วยว่าหลังจากติดตั้งแพ็กเกจ adb แล้ว ให้ติดตั้งแพ็กเกจ android-sdk-platform-tools-common ด้วย เพราะจะติดตั้ง udev rules ซึ่งทำให้ใช้ซอฟต์แวร์ได้โดยไม่ต้องมีสิทธิรูต
สำหรับแมคโอเอสและอื่น ๆ สามารถดาวนโหลด์ติดตั้งไฟล์ แล้วเปลี่ยนตัวแปร PATH ใน bashrc

 อุปกรณ์แอนดรอยด์ 
สำหรับแอนดรอยด์รุ่น 4.2.2 และหลังจากนั้น (API level 17) จะมีกล่องข้อความที่แสดงรหัสย่ออาร์เอสเอ (fingerprint) ที่ผู้ใช้ควรเช็คแล้วยอมรับ 
ซึ่งป้องกันไม่ให้คอมพิวเตอร์ก่อการร้ายฉวยโอกาสกับกลไกดีบั๊กโดยไม่ได้รับอนุญาตจากผู้ใช้
เริ่มตั้งแต่แอนดรอยด์รุ่น 4.2 เมนูค่าตั้งผู้พัฒนา (developer settings) ก็จะซ่อนอยู่เป็นปกติ 
แต่เมื่อกดเลขบิลด์ 7ครั้งในเมนู about ก็จะปรากฏให้เห็น 
หลังจากนั้นก็จะสามารถเปิด USB debugging ได้
ผู้ผลิตบางบริษัทใช้วิธีการอื่นในการเปิดให้ใช้ค่าตั้งนี้ 
ยกตัวอย่างเช่น หัวเว่ย จะต้องใส่รหัสพินก่อนจะเปิดใช้เอดีบี

ถ้าหน้าจอของแอนดรอยด์เสีย ก็อาจจะต่อเมาส์ผ่าน USB On-The-Go แล้วเปิด USB debuggingได้

 สถาปัตยกรรม 
โพรโทคอลเอดีบีสามารถส่งผ่านยูเอ็สบี หรือผ่านไวไฟโดยใช้ทีซีพี
มีสถาปัตยกรรมเป็นแบบผู้รับ-ผู้ให้บริการ
มีโพรโทคอลอยู่สองอย่างที่ใช้ 
อย่างแรกใช้ระหว่างระบบรับบริการบนคอมกับระบบให้บริการบนคอม อย่างที่สองระหว่างระบบให้บริการบนคอมกับเดมอนบนอุปกรณ์แอนดรอยด์
ของเอดีบีใช้ภาษาซีทำให้เกิดผล โดยดำเนินการอยู่ในพื้นที่ผู้ใช้ของแอนดรอยด์ (Android user space)
โดยได้การสนับสนุนจาก Android USB framework คือ UsbDeviceManager และ UsbDebuggingManager

 โพรโทคอลระหว่างผู้รับกับผู้ให้บริการ 
ผู้รับบริการจะสื่อสารกับผู้ให้บริการผ่านซ็อกเก็ตทีซีพี
คือ ผู้ให้บริการจะคอยฟังคำสั่งที่พอร์ตหนึ่ง ๆ ที่ผู้รับบริการจะส่งคำขอบริการไปหา 
คำขอบริการจะมีเขตข้อมูลเบื้องต้นยาว ในรูปแบบแอสกีบวกกับข้อมูลที่ส่ง (payload)
ข้อมูลที่ส่งจะเริ่มด้วยคำว่า "host" ซึ่งแสดงว่ากำลังส่งข้อมูลไปยังผู้ให้บริการ 
ผู้ให้บริการก็จะตอบด้วยคำว่า OKAY หรือ FAIL เพื่อแสดงสถานะการบริการ บวกกับข้อมูลที่ส่งและความยาว

 โพรโทคอลระหว่างผู้ให้บริการกับเดมอน 
ข้อความที่ผู้ให้บริการส่งไปยังเดมอน มีหัวเรื่องยาว 24ไบต์ ซึ่งมีเขตข้อมูลดังต่อไปนี้ 
 คำสั่ง 
 อาร์กิวเมนต์ที่หนึ่ง
 อาร์กิวเมนต์ที่สอง
 ความยาวข้อมูล >=0
 รหัสเช็คข้อมูล CRC-32
 ค่าแมจิก คำนวณโดย คำสั่ง XOR 0xFFFFFFFF

 ความปลอดภัย 
จนถึงแอนดรอยด์รุ่น 2.2 ระบบจะอ่อนแอต่อการโจมตีแบบ RageAgainstTheCage
เพราะเดมอนของเอดีบีไม่เช็คค่า return ของการเรียกระบบคือ setuid เมื่อพยามยามลดสิทธิของโปรแกรมหลัก
การโจมตีจะแยก (fork) กระบวนการจนกระทั่งทำไม่ได้เพราะหมดค่าระบุกระบวนการ (process identifier)
เมื่อเดมอนล้มแล้วเริ่มใหม่ ก็จะไม่สามารถเริ่มกระบวนการใหม่ที่มีสิทธิลดลง ดังนั้น ก็จะดำเนินการต่อไปด้วยสิทธิของรูต
ซึ่งทำให้ได้เชลล์ที่มีสิทธิเป็นรูต

ในปี2017 ได้พบช่องโหว่ทางความปลอดภัยที่ใช้เอดีบีเพื่อเข้าควบคุมโมเด็มซึ่งอยู่บนบอร์ด
แต่การโจมตีจะต้องอาศัยเอดีบีที่ได้เปิดใช้แล้ว และได้รับอนุญาตให้ต่อกับคอมนั้นแล้ว แม้นักวิจัยที่พบช่องโหว่นี้ก็ระบุว่า ยังมีทางเลี่ยงอื่น ๆ อีก

มีสกุลมัลแวร์ต่าง ๆ รวมทั้ง ADB.Miner, Ares, IPStorm, Fbot และ Trinity 20 ที่สแกนอินเทอร์เน็ตเพื่อหาดูส่วนต่อประสานเอดีบีที่เปิดใช้อยู่ แล้วติดตั้งมัลแวร์ลงในอุปกรณ์เหล่านั้น
เอดีบียังสามารถใช้ลบมัลแวร์ออกได้ด้วย โดยบูตอุปกรณ์ให้เข้าในเซฟโหมด แล้วใช้รายคำสั่ง adb uninstall