Peki init_boot dan flashladığımız için ramdisk kullanıyor, orada okeyiz, yine çekirdek seviyesinde mi root olmuş oluyor?
Evet hocam. Daha önce dediğim gibi Google'ın yaptığı değişiklikler arasında Android'in belli parçalarını biribirinden bariz bir şekilde ayırmak ve telefonları genel bir taban yazılım üzerinde çalışabilir hale getirmek var. Telefon üreticilerinin de bunların üstüne kendi modifikasyonlarını yapıp kendi versiyonlarını ürettiklerinden bahsetmiştim. Bunu kernel seviyesinde sağlayan özellik, GKI kernellerinde gelen kernel modülü desteği. Telefon üreticileri telefonlarına uygun kernel modüllerini yazıp boot sırasında yükleyerek GKI kernelinin özelliklerini kernelin kendisini değiştirmeden ayarlayabiliyorlar. KernelSU da aynı mantıkla kendi modülünü ekleyip boot sırasında bunu kernel'e yükleyerek bize root erişimi veriyor.
Magisk'teki root süreci de kısaca şöyle: Magisk ile yamalanmış
init
, diğer bütün süreçlerden önce her türlü sistem erişimi açık olan bir magisk süreci başlatıyor. Root erişimine ihtiyacı olan uygulamalar bu süreç üzerinden root erişimi alıyor.
Modern işletim sistemleri genellikle çekirdek (kernel) ve kabuk (shell) diye iki kısma ayrılmaktadır. Kabuk kısmında çalışan süreçler bulunmakta ve bu süreçlerin genellikle erişim kısıtlamaları olmaktadır. Erişim kısıtlama seviyelerine göre birden fazla kabuk bulunabilir. Çekirdek kısmının donanıma doğrudan erişimi bulunmaktadır ve bu kısmın görevleri çalışan süreçlerin erişim izinlerini kontrol etmek, erişim izni olanları donanım üzerinde çalıştırmak, donanım kaynaklarını çalışan süreçlere uygun bir şekilde paylaştırmak ve aynı zamanda enerji kullanımını ayarlamak şeklinde sıralanabilir. Kabukta bulunan bir süreç bir komut çalıştıracağı zaman bu önce çekirdekte "yakalanır", çekirdekte sürecin erişim izinleri ve donanım kaynaklarının durumu kontrol edilir ve ona göre komut donanıma gönderilip çalıştırılır, reddedilir ya da daha sonra çalıştırılmak üzere bekletilir. Bu komutun çalışması bittiğinde sonuç çekirdeğe geri döner, çekirdek de bunu sürece geri gönderir. Bu düzeyde verilen root erişimli süreçler cihazın her tarafına diğer hiç bir şeyin haberi olmaksızın erişebilir. Bu sebeple KernelSU ya da APatch'ın varlığını algılamak, Magisk'in varlığını algılamaktan daha zordur.
Küçük bir not: Telefon üreticileri kendi telefonlarında yaptıkları bu tür değişiklikleri
vendor
kısmının içinde tutuyor, KernelSU gibi
ramdisk
'e gömmüyor.