# Android Debug Bridge
Android Debug Bridge (, kısaltma: ADB), Android tabanlı cihazlarda hata ayıklamak için kullanılan bir programlama aracıdır. Android cihazındaki arka plan programı, ana bilgisayardaki sunucuya USB veya TCP üzerinden son kullanıcı tarafından kullanılan istemciye bağlanan TCP üzerinden bağlanır. 2007'den beri Google tarafından Apache Lisansı altında açık kaynaklı yazılım olarak sunulan özellikler arasında bir kabuk ve yedekleme yapma imkanı bulunmaktadır. adb yazılımı; Windows, Linux ve macOS ile uyumludur. Botnet'ler ve RSA kimlik doğrulaması ve cihaz beyaz listeye alma gibi azaltıcı etkenlerin geliştirildiği diğer kötü amaçlı yazılımlar tarafından kötüye kullanılmıştır.


## Özellikler.
adb'nin özellikleri arasında ana bilgisayardan dosya kopyalama, uygulamaları yükleme, logcat çıktısını görüntüleme, bir Unix shell'e erişme ve Qualcomm EDL moduna yeniden başlatma sayılabilir. Örneğin, Android uygulamaları bir dosyaya backup komutuyla kaydedilebilir. Ayrıca Java Debug Wire Protocol için destek içerir.
Bazı grafik arayüzler kullanıma sunuldu. Android Studio'daki görsel Android Device Monitor, bir Android cihazından bilgi almak için kullanılabilir.


## Geliştirme geçmişi.
Android Yazılım Geliştirme Kiti (SDK) ilk olarak 2007'de piyasaya sürüldü. Google, 2017'den beri adb'yi Android SDK'dan ayrı olarak indirmeyi mümkün kıldı.
2015 yılında Microsoft, adb istemcisine bağlanabilen bir Android öykünücüsü yayınladı. 2016'da Android Studio 2.0 için uygulamaları yüklemek ve dosyaları adb aracılığıyla göndermek için 5 kat performans iyileştirmesi yapıldı. Android Things'in daha kolay kullanımı için 2017 yılında manuel adb komutları etrafında bir sarmalayıcı yapılmıştır. 2020'de Android 11 için Google, artımlı yüklemeler ekledi. 2020'de Wi-Fi adb, macOS için Android Studio'ya entegre edildi. Android 12 için 2021'de adb backup komutu, uygulamalardan kullanıcı verilerinin yedeklenmesinin uygulama başına manifesto yapılandırması kullanılarak etkinleştirilmesi için sınırlandırıldı. Fuchsia, adb ile geriye dönük uyumlu olacaktır. Fx ve ffx ile değiştirilecektir.


## Kurulum.
### Ana bilgisayar.
Windows için Android SDK, ayıklanıp yüklenebilen adb.exe ikili dosyasını içerir. How-To-Geek, ikili dosyaları içeren klasörü PATH ortam değişkenine eklemenizi önerir.
Ubuntu'da adb, android-tools-adb paketi ile kurulabilir. Debian için, aracı root izinleri olmadan çalıştırmayı mümkün kılan udev kurallarını yükleyen adb paketinin yanına android-sdk-platform-tools-common paketinin de yüklenmesi tavsiye edilmiştir. macOS ve diğer Linux dağıtımları için platform araçları indirilebilir ve PATH değişkeni bashrc içinde değiştirilebilir.


### Android cihazı.
Android 4.2.2 veya sonraki sürümlerde (API düzeyi 17), kullanıcının kabul etmesi gereken bir RSA parmak izi içeren bir iletişim kutusu gösterilir. Bu, aygıt kullanıcısının izni olmadan hata ayıklama mekanizmasından yararlanan bilgisayarlara karşı koruma sağlar. Android 4.2'den başlayarak, geliştirici ayarları varsayılan olarak gizlidir. Hakkında menüsünde yapı numarasına yedi kez basmak, bunları kullanıcıya görünür hale getirir. Bundan sonra, USB hata ayıklama seçeneği etkinleştirilebilir. Bazı Android telefonlarında bunu etkinleştirmek için farklı prosedürleri vardır. Örneğin, Huawei, adb'nin etkinleştirilebilmesi için bir pin kodunun girilmesini gerektirir.
Bir Android cihazın dokunmatik ekranı bozulursa, USB On-The-Go kullanarak cihaza bir fare bağlamak ve USB hata ayıklamasını etkinleştirmek mümkün olabilir.


## Mimari.
Adb protokolü, USB üzerinden veya Wi-Fi üzerinden TCP üzerinden taşınabilir. İstemci-sunucu mimarisini kullanır. Kullanılan iki farklı protokol vardır. Birincisi istemci ile sunucu arasında, ikincisi ise sunucu ile arka plan programı arasındadır. adb arka plan programı C'de uygulanır ve Android kullanıcı alanında bulunur. Daemon, Android USB çerçevesi, UsbDeviceManager ve UsbDebuggingManager tarafından kolaylaştırılır.


### İstemci ↔ sunucu protokolü.
İstemci ve sunucu arasındaki iletişim modu bir TCP soketidir. Sunucu, istemcinin istek göndermesi gereken bir bağlantı noktasını dinler. İstek, ASCII'de 4 baytlık bir başlangıç alanı ve bir yük içerir. Yük, sunucuya gönderilmesi gerektiğini belirtmek için ana bilgisayar kelimesiyle başlar. Sunucu daha sonra durumu belirtmek için TAMAM veya BAŞARISIZ olarak yanıt verebilir, isteğe bağlı bir yük ve uzunluk ile birlikte.


### Sunucu ↔ arka plan programı protokolü.
Sunucudan gönderilen mesajlar, aşağıdaki alanları içeren 24 bayt uzunluğunda bir başlıktan oluşur:
  - Command
  - First argument
  - Second argument
  - Length of the payload, 0 or higher
  - CRC32 of the data payload
  - Magic value, calculated through command XOR 0xFFFFFFFF


## Güvenlik.
Android 2.2'ye kadar Android, "RageAgainstTheCage" istismarına karşı savunmasızdı. adb arka plan programı, ayrıcalıkları düşürürken setuid sistem çağrısının dönüş değerini kontrol etmedi. İstismar, süreç tanımlayıcılarının tükenmesi nedeniyle başarısız olana kadar süreçleri çatallar. Arka plan programı çöktüğünde ve yeniden başladığında, bırakılan ayrıcalıklarla yeni bir işlem başlatamaz ve kök olarak çalışmaya devam eder. Sonra adb bir kök kabuk sağladı. 2017 yılında, yerleşik modemi devralmak için adb'den yararlanan bir güvenlik açığı ortaya çıktı. Bazı geçici çözümler mevcut olmasına rağmen saldırı, adb'nin önceden etkinleştirilmesini ve yetkilendirilmesini gerektiriyordu.
Miner, Ares, IPStorm, Fbot ve Trinity gibi çeşitli kötü amaçlı yazılım aileleri, adb arayüzünün herkese açık olup olmadığı konusunda interneti taradı ve bu cihazlara kötü amaçlı yazılım yükledi.
adb, güvenli modda önyükleme yaparak ve adb uninstall [PaketAdı] komutunu çalıştırarak kötü amaçlı yazılımları ve önyüklü gelen uygulamaları kaldırmak için de kullanılabilir.