Mobil Cihazların Dahili WiFi'sinde Yamalama İşlemleri


0.1 UYARILAR:

*Bu işlemler için, masaüstü bilgisayarınız ve Linux işletim sistemlerinden biri olan Ubuntu'nun 64 bit sürümü başlatılması önerilir.

*En az tahminî 100 GB boş alan gereklidir.

*İşlemin uygulanacağı cihazınızda bootloader kilidi (ön yükleme kilidi) açık ve root erişimi olmalıdır.

*Yamaları uygulamak, cihazınızda birçok sorunlara neden olabilir. Lütfen başlamadan önce tüm verilerinizi yedekleyiniz ve işlemleri dikkatle yapın. Tüm Sorumluluk, Burada Anlatılan İşlemleri Uygulayana Aittir.

*İşlemin Uygulanacağı Mobil Cihazınızın Hangi WiFi Chipsetini (3.1.1 başlığına bakınız) ve Kaç Bit İşlemciyi Kullandığını Bilmeniz Gerek. Bunun İçin Google Play Store'da DevCheck Adlı Uygulamaya Bakabilirsiniz.



1.0 Tanım:

WiFi ağ kartı, bilgisayar ortamında kendine has sistemi yani çevreyi oluşturur. Bu sistemin iki ana başlıkları; donanım ve yazılımdır. Bizim ince eleyip sık dokumamız; yazılım kısmı üzerinde olacaktır.


Bu makale sizlere; WiFi ağının özel yönlerini, WiFi'nin sistem dosyalarına (wlan firmware) yama uygulanmasını, yamaların çalışma mantığını ve WiFi sistemine sahip çoğu mobil cihazlarla kablosuz ağlara saldırı olabileceği dolayısıyla küçük de olsa mobil cihazları hafife almamayıp kablosuz yayın yapan modeminizi savunmaya teşviğini arz etmeyi amaçlamaktadır.


1.1 Terimler:

* internal: Dahili.

* external: Harici.

* monitor / monitor mode: Ağ Kartını Dinleme Moduna Alma.

* patch: Herhangi Bir Yazılım veya Donanıma Özel Ayrıcalıklar Uygulamak / yamalamak.

* chipset: Ağ Kartlarının Model Numarası.

*kernel: İşletim Sistemi Çekirdeği/Beyni.

*config: Ön Tanımlı Bilgi Yığınları.

*firmware: Fabrika Çıkışlı Yazılım Dosyaları.

*RAM: Random Access Memory Yani Cihazın Belleği.

*ROM: Read Only Memory Adı Üstünde Sadece Okunan Bellektir; Yani Cihazın İşletim Sistemini Temsil Eder.

* wlan0: Dahili Ağın Monitor Modu.

* wlan1: Çıkarılabilir Ağın Monitor Modu.

* wlan(n): N'inci Ağın Monitor Modu.




2.0 Yamalamaya Giriş:

Öncelikle kullandığımız cihazın üreticisini öğrenmemiz gerek. Genel olarak iki adet yaygın üretici vardır, bunlar; Qualcomm ve Broadcom.

2.1 Qualcomm Yaması:

Özellikle yeni nesil mobil cihazlarda Qualcomm adaptörleri bulunuyor.
AirCrack şirketinin çalışanlarından "kimocoder" rumuzlu mühendis, Qualcomm chipsetlere has yama geliştirdi.
Hadi hep beraber inceleyelim:

Kod:
From 306e2bde24167a843ac0e9db55e64a5e272c9718 Mon Sep 17 00:00:00 2001 (yamanın birleşim kodu ve tarihi)
From: =?UTF-8?q?Christian=20Bremv=C3=A5g?= (yamanın geliştirici bilgisi)
Date: Thu, 26 Mar 2020 02:34:43 +0100 (GitHub'da paylaşma tarihi)
Subject: [PATCH] Enable support for adapter monitor mode by default (yama bilgisi ( konu: [yama] varsayılan olarak monitor modu desteği aktifleştirmesi) )

--- (yama uygulamasının ön bilgileri)
drivers/staging/qcacld- 3.0/configs/default_defconfig | 2 +- (kernelde belirtilen yerde yer alan yapılan değişiklerin tanımı.)
1 file changed, 1 insertion(+), 1 deletion(-) (değişikliğin net verisi ( 1 dosya üzerinde 1 ekleme (+), 1 silme(-) )
diff --git a/drivers/staging/qcacld-3.0/configs/default_defconfig b/drivers/staging/qcacld-3.0/configs/default_defconfig (Yamanın yaptığı değişikliği, GitHub üzerinden paylaşma)
index 8e7f42665cee..9918575a94d0 100644 ( Bu değişikliğin GitHub'daki hareketliliği)
--- a/drivers/staging/qcacld-3.0/configs/default_defconfig
+++ b/drivers/staging/qcacld-3.0/configs/default_defconfig (Bundan sonraki komutlardan; bir diğer ana komut öncesine kadar olan komuta kadar yapılan değişiklikler, sadece belirtilen dosyada olacak)
@@ -561,7 +561,7 @@ CONFIG_CONVERGED_TDLS_ENABLE := y (Yukarıdaki yeşil renkteki komutta belirtilen dosya üzerine, bu veri eklenir) (burada kernele yeni bir özellik kazandırılıyor)
CONFIG_WLAN_CONV_SPECTRAL_ENABLE := y
CONFIG_WLAN_SPECTRAL_ENABLE := y
CONFIG_WMI_CMD_STRINGS := y
-CONFIG_FEATURE_MONITOR_MODE_SUPPORT := n
+CONFIG_FEATURE_MONITOR_MODE_SUPPORT := y (Burada önceden "n" yani hayır olarak tanımlı olan monitor modu özelliği, "y" yani evet olarak yamalanıyor.)
CONFIG_DESC_DUP_DETECT_DEBUG := n
CONFIG_DEBUG_RX_RING_BUFFER := n
CONFIG_WLAN_FEATURE_TWT := y

2.1.1 Qualcomm Chipsetlere Monitör Yaması Uygulamak:

Bu yamayı uygulamak için, öncelikle cihazınızın kernelinin kaynak dosyasını indirmeniz gerek.
İndirme işlemi için, cihazınızın üreticisinin web sitesine girin ve kaynak bölüme bakın, örneğin;

Samsung: https://opensource.samsung.com/uploa...1=mobile_phone

Sony:
https://developer.sony.com/develop/o...ource-archives

Google'da CihazMarkası Kernel Source yazarak bulabilirsiniz.

İndirdiğiniz kernel kaynağını arşivden çıkarın ve içine girin:

Kod:
cd KernelKlasörünüz
Yamayı indirin ve uygulayın:
Kod:
wget https://github.com/kimocoder/qualcom...tor_mode.patch
Kod:
patch -p1 < enable_monitor_mode.patch
Burada patch succesfull çıktısı olmalı, aksi takdirde cihazınızla uyumsuzluk olmuştur.

2.1.2 Kerneli Derlemek:

Yamalanan kernel, derlenip cihazınıza flaşlanmalıdır. Bunun için bazı paketleri indirmek gerek. Önce inşa için gerekli ön paketi yükleyelim:

Kod:
sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2 lib32z1 lib32ncurses5 lib32bz2-1.0 android-tools-adb android-tools-fastboot
Mobil Cihazınız ARM işlemciliyse:

Kod:
git clone https://android.googlesource.com/pla.../arm-eabi-4.8/
Mobil Cihazınız ARM64 işlemciliyse:

Kod:
git clone https://android.googlesource.com/pla...x-android-4.9/
Bu indirdiğimiz toolchain paketi, kernel inşası için gereklidir.

Kod:
cd indirdiğimiz toolchain klasörü
Mobil Cihazınız ARM İşlemciliyse:

Kod:
export CROSS_COMPILE=$(pwd)/bin/arm-eabi-
Mobil Cihazınız ARM64 İşlemciliyse:

Kod:
export CROSS_COMPILE=$(pwd)/bin/aarch64-linux-android-
komutuyla toolchainimiz sisteme tanıtılır.

Kod:
cd ../
Mobil Cihazınız ARM64 İşlemciliyse::

Kod:
export ARCH=arm64 && export SUBARCH=arm64
Mobil Cihazınız ARM İşlemciliyse:

Kod:
export ARCH=arm && export SUBARCH=arm
Şimdi ise defconfig yani ön tanımlı veri yığınlarını bulmalısınız. Bu dosya, cihazınızın kod adı_defconfig şeklinde adlandırılmıştır.
Bu dosya 64 bit mobil cihazınız için
arch/arm64/configs/ klasöründe yer alır. Hangisinin sizin cihazınıza uygun olduğunu bulmak için, Google'a cihazınızın adı codename şeklinde aratıp bulabilirsiniz.
Burada bulduğunuz mobil cihazınızın kod adını tamamen kopyalayın veya ezberleyin ve şu komutları girin:

Kod:
make clean
Kod:
make mrproper
Kod:
make kopyaladığınız defconfig dosyası
Kod:
make -j4
(bilgisayarınızdaki 4 adet çekirdek, bu inşa işleminde kullanılır)

Ve inşa işlemi başladı.

Derleme bittiğinde, en alttaki yazı gibi çıktı alınmalı;

32 Bit:



64 Bit:




2.1.3 Mevcut Kernelin Yedeğini Almak:


Şimdi cihazımızın mevcut kernelinin yedeğini alalım. (kernel yükleme sonrası cihazınız açılmazsa, buna ihtiyacınız var) (kurtarma için 4.1.1 başlığına bakınız) Bunun için önce cihazınızın açın ve ara kabloyla bilgisayara bağlayın ve:

Kod:
adb shell
Kod:
mount -o remount,rw /system
Kod:
dd if=/dev/block/bootdevice/by-name/boot of=boot.img
Kod:
adb pull /boot.img
Bu komut, boot.img adlı cihazımızda yüklü gelen kerneli temsil ediyor. if; InputFile seçilen yani dahili dosya, of ise; OutFile yani çıktı dosyasını yani bu kernelin nereye yedekleneceğini belirtiyor.



2.1.4 Derlenen Kerneli Cihazınıza Yüklemek


İnşası tamamlanan kernelimiz, çıktıdan da görüleceği üzere; arch/arm64/configs/ veya arch/arm/boot/ klasöründe yer almaktadır. Şimdi Android Image Kitchen adında bir araçla cihazınızdan aldığınız stock kernel yani boot.img (adını ori.img yapın ki yamalanmış kernelle karışmasın) dosyasının içindeki bir dosyayı, yeni derlediğiniz kernelle değiştireceğiz.

Şimdi masaüstüne gidelim ve orada terminal açıp bu komutları girelim;

Kod:
git clone https://github.com/osm0sis/Android-Image-Kitchen -b AIK-Linux aik
Bu komut, Android Image Kitchen'ı masaüstünüzde aik adındaki klasöre indirecektir.
Şimdi inşa edilen kernelimiz eğer mobil cihazınız 64 bitse Image.gz-dtb adında arch/arm64/configs/ klasöründen kopyalayın ve aik klasörüne yapıştırın; eğer 32 bitse zImage adında arch/arm/boot/ klasöründen aik klasörüne atın.
Bunun yanında mobil cihazınızdan çektiğiniz stock kerneli (boot.img) de buraya atın.




Şimdi yeni terminal açalım ve:

Kod:
sudo ./unpackimg.sh orijinal kernelinizin ismi
komutunu girerek, orijinal yani fabrika sürümü olan kernelinizin içindekilerini çıkarın.



Şimdi bu komutu girin:

Kod:
ls split_img


orijinal kernelin içerisindeki bu dosyanın adını, inşa ettiğimiz kernelle değişin.




Yani son görüntü, böyle olmalı:




Kod:
rm split_img/ori.img-zImage
Kod:
mv ori.img-zImage /split img
Kod:
./repackimg.sh
Ve yeni kernel hazır:





Cihazınızı açın ve bilgisayara ara kabloyla bağlayın:

Kod:
adb reboot bootloader
Kod:
fastboot flash boot image-new.img
Kod:
fastboot reboot
Eğer cihaz başarıyla açılırsa, kernel çalışıyor demektir.


2.1.5 Monitör Modunu Test Etmek:

Google Play Store'dan terminal emülatörü indirin ve bu komutları girin:

Kod:
echo "4" > /sys/module/wlan/parameters/con_mode
Kod:
airodump-ng wlan0
Ve sonuç:




Monitor modunu kapatmak için:

Kod:
ip link set wlan0 down
Kod:
echo "0" > /sys/module/wlan/parameters/con_mode
Kod:
ip link set wlan0 up

3.1.1 Broadcom Chipsetlere Monitör Yaması Uygulamak:

Broadcom chipsete sahip cihazlar, Qualcomm gibi fabrika çıkışı şekilde monitor modunu desteklemediğinden dolayı, yamalanmış olan firmware'yi manuel olarak stock fw'yle değişmemiz gerek. Chipsetinizi öğrenmek için:

https://store.nethunter.com/en/packa...seemoo.nexmon/

bu linkten NexMon adlı apk'yı kurun ve root yetkisini verin.

Ardından, sol taraftaki firmwareye girin:



Firmwareye girdikten sonra, dosya yöneticinize girin ve wifi firmwaresini, /vendor'e kopyalayin

:


Dahili depolamaya örneğin /vendor'e kopyaladıktan sonra, NexMon'da select firmware 'ye basın ve /vendor'e kopyaladığınız firmwareyi seçin:







Evet uygulama fw chipi tanıdı ve kopyaladığımız chipi, /vendor'den silelim (dikkat: sadece kopyaladığınızı silin, eğer normal sistem tarafından sizde bu fw nerede yer alıyorsa, oradakini de silerseniz, wifiniz çalışmaz)


Şimdi ise bcm chipimize uyan yamaları uygulayalım; ama önce gerekli paketleri kuralım:

Yamalama için cihazınızda TWRP Recovery olması, işinizi daha da kolaylaştıracaktır.
Bazı önemli paketleri indirelim:

Kod:
sudo apt-get install git gawk qpdf adb flex bison
Kod:
sudo dpkg --add-architecture i386
Kod:
sudo apt-get update && apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Kod:
git clone https://github.com/seemoo-lab/nexmon.git
Kod:
cd nexmon
Kod:
source setup_env.sh
Kod:
make
Evet bu komut, C diliyle yazılmış dosyaları çalıştırılabilir hâle getirir.


Mesela bcm4339 chipseti için:


Kod:
cd patches/bcm4339/6_37_34_43/nexmon/
Kod:
make
make ile derleme bittiği zaman, mobil cihazınızda wifide hiçbir ağa bağlı olmayın ve cihazınızı ara kablo ile bilgisayara bağlayın. Şimdi;

Yedek işlemi:

Kod:
make backup-firmware
Yamalanmış firmwareyi yükleme işlemi:

Kod:
make install-firmware
Ve yamalama işlemi tamamdır.


Şimdi yamalanmış wlan0 firmware, cihazınıza kuruldu ve eğer wifinizde sorun oluştuysa yani açılamıyorsa:

Kod:
make install-backup
komutu ile fabrika sürümü yani stock firmwareyi geri yükleme işlemi yapılır.

Şimdi ise AirCrack-ng paketlerini mobil cihazınıza kurmak için Android NDK 11c'yi kurmanız gerek:

https://developer.android.com/ndk/do...older_releases

Bu linkten 11c'yi bulun ve linux olanı indirin:



İndirdikten sonra bu zip dosyasını sağ tık yapıp çıkartın. Zipten çıkan klasöre sağ tıklayıp özelliklerden dosya yolunu kopyalayın ve sonra terminal açın ve bu komutları girin:

Kod:
export NDK_ROOT= kopyaladığınız ndk yolu
Kod:
export PATH=$NDK_ROOT:$PATH
Burada NDK yolumuzu, terminale tanıttık ve yine bu terminal üzerinden NexMon klasöründeki utilities klasörüne girin ve mobil cihazınızı bilgisayara ara kabloyla bağlayın:


Kod:
make
Kod:
make install
bu komut, bulunduğunuz utilities klasöründeki tüm paketleri mobil cihazınıza kuracaktır.

Şimdi mobil cihazınıza Google Play Store'dan Terminal emülatörünü ve BusyBox'u yükleyin. BusyBox uygulamasına girip root erişimini verin ve yükleme yolunu /system/xbin ve /system/bin yoluna yükle diyin.(install)

Şimdi ise yine mobil cihazınızdan terminal uygulamasına girin ve bu komutları girin:

Kod:
nexutil -m2
Bu komut, monitor modunu etkinleştirir.

Mobil cihazınız 32 bitse:

Kod:
export LD_PRELOAD=/system/lib/l i b nexmon.so
Mobil cihazınız 64 bitse:

Kod:
export LD_PRELOAD=/system/lib64/l i b nexmon.so
Kod:
airodump-ng wlan0
Ve işlem bu kadar.

Airodump Çıktısı:





4.1.1 Kurtarma Modu:

Evet yedeğini aldığımız stock kerneli bilgisayarımıza almıştık ve inşa ettiğimiz kerneli yükledikten sonra cihazınız açılmazsa, yeni terminal açın ve hemen almış olduğunuz yedeği geri yükleyelim:

Kod:
adb reboot bootloader
Kod:
fastboot flash boot boot.img
Bu komut, önceki stock yani fabrika kernelini geri yükler ve cihaz açılır.