Spousta věcí se opakuje furt pryč, jako čtení z klávesnice, čtení z disku, výstup na obrazovku ... a aby to nemusel psát každý všecko, tak se to většinou napíše jednou jako knihovna a ostatní programy už nemanipulují s registrama a hardware a neřeší filesystém a prostě zavolají open(filename, mode) a dostanou odkaz, pomocí kterého už rovnou čtou řetězce. Nebo zavolají knihovnu, která ten soubor přečte a upraví podle něj konfiguraci. Těhle vrstev je spousta, ale jejich implementace se na Linuxu a na Windows liší. Proto program přeložený pro jednu platformu s konkrétníma knihovnama chidí jen na té platformě s těma knihovnama.
Taky teda ty OS řeší, aby si programy navzájem nepřepisovaly paměť a jinak neškodily a aby uživatel nespouštěl co nemá a tak dál. (A v tom se liší výrazně.)
Na druhou stranu, když jdeš hlouběji a hlouběji, tak pod těma vrstvama vždycky někde běží nějaký strojový kód, který mluví přímo s řadičem disku přez jeho registry, který přímo čte data z klávesnice, co bylo zmáčknuto či puštěno a tak dál a tak dál. Protože CPU neumí nic jiného, než brát z paměti byty a podle toho, jaké to jsou strojové instrukce tak s nima něco dělat.
A je celkem jedno, jestli ty instrukce tam někdo nastrkal přímo, nebo pomocí symbolického assembleru, nebo pomocí Cčka, které se na ten asm přeloží a ten asm se přeloží na ty byty. Nebo jestli je nad tím ještě deset dalších vrstev a někdo to naklikal myší v nějakém prostředí. Vždycky to nakonec dojde k těm bytům strojového kódu, kterým jediným CPU rozumí.
Takže prostě bootkit/rootkit nepoužívá nadstavby a knihovny a OS, ale rovnou obsahuje ty instrukce pro CPU a ono je čte a provádí jako cokoli jiného.
A je celkem jedno, jestli ten bootkit/rootkit byl původně napsán v tom či onom, důležité je, že jeho výsledná přeložená podoba se neodkazuje na nic v systému (který tam ještě není načtený) a dělá si všechno sama a je spuštěna dřív, než systém pozapíná ochrany pro uživatelské programy, takže je (co se práv přístupu k HW týče) považována za součást bootování systému a není jím omezována v činnosti.
A pokud se od toho neočkává extra sofistikovaná čínnost (na kterou to může mít někde něco dalšího), tak samotná práce se hardware, bez blbostí jako lokalizace, nastavování motivů a animovaných pozadí a tak může být celkem (relativně) jednoduchá a malá.
Já si tady hrál s Arduinem, pomocí C a asembleru jsem zvládnul na holém železe (bez OS a jakékoli podpory) generovat VGA signál, číst a interpretovat PS/2 klávesnici a implementovat překladač a interpret vyššího jazyka (FORTH), který má kompletní přístup v veškerému HW a v podstatě i funguje jako primitivní OS, s tím, že jsem se vešel do 32kB kódu a 2kB RAM (protože na to Arduinu toho víc fyzicky ani není). https://github.com/githubgilhad/NanoHomeFORTH
Pro srovnání - tento můj příspěvek má zhruba 2.6 kB a samotná cache mojeho počítače má 512kB pro každé jádro. Čili systém s plným přístupem k HW a plnou kontrolou počítače může být směšně malý (a tudíž napsatelný i relativně pracnými způsoby, pokud tomu někdo tu práci dát chce).