È banale!
Guarda il codice sorgente di kate e kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
Nelle prime righe di codice direttamente all'inizio della funzione "principale", troverai:
/**
* Check whether we are running as root
**/
if (getuid() == 0) // uid = user id = 0 ==> means if you are user 0 (aka root)
{
std::cout << "Executing Kate as root is not possible. To edit files as root use:" << std::endl;
std::cout << "SUDO_EDITOR=kate sudoedit <file>" << std::endl;
return 0;
}
Dolphin non è diverso, tranne questo accade in libkdeinit5_dolphin.so.
Quindi correre come root è banale, tutto ciò che dobbiamo fare è saltare il controllo if uid = 0.
Il modo in cui lo facciamo, è perma-patching kate, kwrite e delfino.
Quindi, la prima cosa che facciamo è scaricare il contenuto binario in un file di testo:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Ora puoi guardare il file con gedit ~/kate.txt
e se cerchi getuid, troverai qualcosa del tipo:
2a985: 31 c0 xor %eax,%eax
2a987: 89 bc 24 dc 00 00 00 mov %edi,0xdc(%rsp)
2a98e: e8 ed ce ff ff callq 27880 <getuid@plt>
2a993: 85 c0 test %eax,%eax
2a995: 0f 84 e9 1e 00 00 je 2c884 <__cxa_finalize@plt+0x1f5c>
Ora, sul lato sinistro, trovi l'indirizzo di memoria, dopo i due punti (:) vedrai il codice di istruzione binario (esadecimale) ea destra di quello, vedi lo smontaggio di quel codice (noto anche come significa) .
Ora, vedi, lì chiama getuid, verifica se questo è zero e passa all'istruzione if, vale a dire se il valore restituito è uguale a zero (je: salta se uguale).
Ora non vogliamo saltare nel if, quindi rimuoviamo solo quella merda lì. Ma solo rimuovere quella schifezza cambierebbe gli indirizzi di 6 byte, eliminando eventuali salti relativi nel programma nel processo e, di conseguenza, il programma. Quindi, invece, basta sostituire l'intera lunghezza dell'istruzione jump con le istruzioni NOP (abbreviazione di N o Op eration), ovvero 0x90 in codice istruzione / hex.
Quindi è necessario sostituire ogni byte di salto lì con 0x90, quindi in precedenza
0f 84 e9 1e 00 00
tu avrai
90 90 90 90 90 90
Questo può essere fatto semplicemente con un editor esadecimale.
Quindi ne installiamo uno:
sudo apt-get install wxhexeditor
Ora nell'editor esadecimale, cerchi 0f 84 e9 1e 00 00 e lo sostituisci con 90 90 90 90 90 90 90. Se c'è solo una ricorrenza di 0f 84 e9 1e 00 00, e c'è, allora è banalmente semplice. Basta cambiare i byte in esadecimale in 90 90 90 90 90 90 90 e salvare. Finito. Kate o Kwrite ora si apriranno, che tu sia root o meno.
se fai lo stesso con i delfini, ti renderai conto che objdump -Crd /usr/bin/dolhin
produce uno smontaggio molto breve.
se corri ldd /usr/bin/dolphin
, vedrai che dolphin carica la libreria condivisa libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Quindi fai objdump su libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Ora apri l'objdump: gedit ~/libkdeinit5_dolphin.txt
Cerca getuid e vedrai che uno dei risultati della ricerca è:
41f95: 31 c0 xor %eax,%eax
41f97: 89 7c 24 5c mov %edi,0x5c(%rsp)
41f9b: e8 50 b6 ff ff callq 3d5f0 <getuid@plt>
41fa0: 85 c0 test %eax,%eax
41fa2: 0f 84 58 1a 00 00 je 43a00 <kdemain@@Base+0x1a90>
41fa8: 48 8d 84 24 a0 00 00 lea 0xa0(%rsp),%rax
Questo è fantastico, vedi, più schifezze proprio come in Kate e Kwrite.
Ora apri /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
nel tuo editor esadecimale, cercalo 0f 84 58 1a 00 00
e sostituiscilo con 90 90 90 90 90 90
.
Hit salva, e fatto.
Dolphin ora funziona come root.
Nota: è una buona idea fare una copia di backup dei file modificati, nel caso in cui si risolva il problema.
Inoltre, puoi semplicemente scaricare il sorgente di kate, kwrite e delfino, rimuovere quella merda dal codice sorgente, compilare e installare. Ma poiché allo stupido sistema cmake mancano alcuni modelli di schifezze schifose per alcune stupide schifezze come le icone, probabilmente perché il cmake fornito dal repo è troppo vecchio, questo non funziona. Peccato, sarebbe stato troppo semplice se avesse funzionato, no.
Ma solo patchare gli eseguibili come ho descritto è più veloce, quindi chi se ne frega comunque.
Vedi, non è semplice, ma è banale.
PS:
Ora, ogni volta che kate, kwrite o dolphin vengono aggiornati tramite apt, le tue modifiche verranno sovrascritte. Dovrai riapplicarli. Lascerò automatizzare il processo di patch nelle tue mani più che capaci, e il tuo linguaggio di programmazione di joice;)
Questo può essere fatto in puro bash?
Inoltre, se vuoi patch vlc per la stessa schifezza, puoi farlo con sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Basta inserire quella dichiarazione sed in uno script, in modo da poter applicare nuovamente, se mai è necessario, se si è offline e non si ha accesso a Internet.
Happy hacking - con kate, kwrite e delfini - come root - mentre guardi / ascolti qualcosa su vlc.
PS2:
I controlli di root scadenti sono andati come Dodo in KDE v19.04.
Chi ha detto che n evoluzione è stata una brutta cosa.
Per progredire - Saluti!