Android Debug Bridge

**Android Debug Bridge** (tạm dịch: Cầu gỡ lỗi Android) (thường được viết tắt là  **adb**) là một công cụ lập trình sử dụng cho việc gỡ lỗi các thiết bị dựa trên nền tảng Android. Phương thức trình nền (Daemon) trên thiết bị Android kết nối với máy chủ trên PC chủ qua USB hoặc TCP kết nối với máy khách được người dùng cuối sử dụng qua TCP. Được cung cấp dưới dạng Phần mềm nguồn mở theo Giấy phép Apache của Google từ năm 2007, các tính năng bao gồm shell và khả năng tạo bản sao lưu.. Phần mềm adb tương thích với Windows, Linux và macOS. Nó đã bị lạm dụng bởi botnets và các Phần mềm độc hại, trong đó các biện pháp giảm thiểu đã được phát triển như xác thực RSA và danh sách trắng.

## Tính năng nổi bật

Các tính năng của adb bao gồm sao chép tệp từ máy tính chủ, cài đặt ứng dụng, xem đầu ra logcat, tải Unix shell, và khởi động lại để vào chế độ Qualcomm EDL mode. Lấy ví dụ, gói ứng dụng Android  có thể được lưu bằng lệnh `[[backup]]` để tạo thành một tệp. ADB cũng hỗ trợ bao gồm  Java Debug Wire Protocol.

Một số giao diện đồ họa cũng được cung cấp. Giao diện từ phần mền Android Device Monitor trong Android Studio có thể được sử dụng để truy xuất thông tin từ thiết bị Android.

## Lịch sử phát triển
Bộ công cụ phát triển phần mềm Android (SDK) được phát hành lần đầu tiên vào năm 2007. Kể từ năm 2017, Google đã cho phép tải xuống adb một cách riêng biệt từ SDK Android.

Vào năm 2015, Microsoft đã phát hành trình giả lập Android có thể kết nối với ứng dụng khách adb (adb client). Vào năm 2016 Android Studio 2.0  đã cải thiện hiệu suất gấp 5 lần để cài đặt ứng dụng và đẩy tệp qua adb. Để sử dụng Android Things dễ dàng hơn, , một trình bao bọc (wrapper) đã được tạo vào năm 2017 xung quanh các lệnh adb thủ công.  Đối với Android 11 vào năm 2020, Google đã thêm adb incremental installations. Cũng vào năm 2020, Wi-Fi adb đã được tích hợp vào Android Studio dành cho macOS.  Vào năm 2021, đối với Android 12, Lệnh `adb backup` đã bị giới hạn để việc sao lưu dữ liệu người dùng từ các ứng dụng được chọn tham gia bằng cách sử dụng cấu hình bản kê khai cho mỗi ứng dụng. Fuchsia sẽ tương thích ngược với adb. nó sẽ thay thế bằng fx và ffx.

## Thiết lập

### Máy tính chủ
Đối với Windows, SDK Android chứa tệp nhị phân adb.exe có thể được giải nén và cài đặt. How-To Geek khuyên bạn nên thêm thư mục chứa các tệp nhị phân vào biến môi trường PATH 

Trên Ubuntu, adb có thể được cài đặt cùng với `android-tools-adb` package. Đối với Debian, khuyến khích bạn cài gói `android-sdk-platform-tools-common` bên cạnh gói `adb`, cài đặt các quy tắc udev giúp bạn có thể chạy công cụ mà không cần quyền root. Với macOS và các họ hệ điều hành Linux, bạn có thể tải xuống các công cụ nền tảng và biến PATH có thể được sửa đổi trong bashrc.

### Thiết bị Android
Từ hệ điều hành Android 4.2.2 trở đi (API level 17),  một hộp thoại được hiển thị với dấu vân tay RSA mà người dùng cần phải chấp nhận. các máy tính khai thác cơ chế gỡ lỗi mà không có sự đồng ý của người dùng thiết bị. Bắt đầu từ Android 4.2, cài đặt dành cho nhà phát triển được ẩn theo mặc định. Nhấn bảy lần vào số bản dựng trong menu giới thiệu về điện thoại sẽ khiến tùy chọn nhà phát triển hiển thị ra cho người dùng.Sau đó bạn có thể bật gỡ lỗi adb trong cài đặt cho nhà phát triển. Một số nhà cung cấp Android có các quy trình khác nhau để kích hoạt nó. Ví dụ: Huawei yêu cầu nhập mã pin trước khi có thể bật adb.

Nếu Màn hình cảm ứng của thiết bị Android bị hỏng, bạn có thể kết nối chuột với thiết bị bằng USB On-The-Go và bật gỡ lỗi USB.

## Kiến trúc
Giao thức adb có thể được truyền qua USB hoặc qua Wi-Fi thông qua TCP. It uses a kiến trúc máy khách-máy chủ. Có hai giao thức khác nhau được sử dụng.  Đầu tiên là giữa máy khách và máy chủ và thứ hai là giữa máy chủ và daemon. Adb daemon được triển khai trong  C à nằm trong không gian người dùng Android. Daemon được hỗ trợ bởi  Android USB framework, `UsbDeviceManager` và `UsbDebuggingManager`.

### Máy khách ↔  giao thức máy chủ
Chế độ giao tiếp giữa máy khách và máy chủ là một TCP socket. Máy chủ lắng nghe trên một cổng mà máy khách phải gửi yêu cầu. Yêu cầu chứa trường ban đầu 4 byte trong ASCII và payload. Payload bắt đầu bằng từ máy chủ,để cho biết nó sẽ được gửi đến máy chủ. Sau đó, máy chủ có thể trả lời bằng OKAY hoặc FAIL để cho biết trạng thái, kết hợp với payload và độ dài tùy chọn.

### Máy chủ ↔ giao thức daemon
Các tin nhắn được gửi từ máy chủ bao gồm một tiêu đề dài 24 byte, với các trường sau:

* Lệnh
* Argument đầu tiên
* Argument thứ hai
* Độ dài của payload, 0 hoặc cao hơn
* CRC32 của payload đó
* Magic value, được tính thông qua lệnh XOR `0xFFFFFFFF`

## Bảo mật
Cho đến phiên bản Android 2.2, Android vẫn dễ bị khai thác *RageAgainstTheCage* . Adb daemon không kiểm tra giá trị trả về  Lời gọi hệ thống setuid khi mà từ bỏ đặc quyền. Khai thác tiến trình forks cho đến khi nó thất bại do cạn kiệt số nhận dạng quy trình. Khi mà daemon gặp sự cố và khởi động lại, nó không thể bắt đầu một quy trình mới với các đặc quyền bị mất và tiếp tục chạy với quyền root. adb cung cấp một root shell. Sau đó, adb đã cung cấp trình bao gốc. [25] Vào năm 2017, một lỗ hổng bảo mật đã được tiết lộ đã khai thác ADB để chiếm lấy modem tích hợp. Cuộc tấn công yêu cầu adb phải được kích hoạt và cấp quyền, mặc dù đã có sẵn một số cách giải quyết.

Nhiều dòng phần mềm độc hại khác nhau như ADB.Miner, Ares, IPStorm, Fbot and Trinity đã quét internet để tìm tính khả dụng công khai của giao diện adb và cài đặt phần mềm độc hại trên các thiết bị đó. adb cũng có thể dùng để gỡ Phần mềm độc hại, bằng cách khởi động vào chế độ safe mode và chạy dòng lệnh `adb uninstall`.

## Xem thêm

* Android recovery mode
* Fastboot

## Tài liệu tham khảo

## Liên kết ngoài
* 
* 
* 
* 
*