Es trivial!
Solo mira el código fuente de kate y kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
En las primeras líneas de código directamente al comienzo de la función "principal", encontrará:
/**
* 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 no es diferente, excepto que esto sucede en libkdeinit5_dolphin.so.
Entonces, ejecutar como root es trivial, todo lo que debemos hacer es omitir la comprobación if uid = 0
La forma en que hacemos esto es mediante parches permanentes de kate, kwrite y dolphin.
Entonces, lo primero que hacemos es volcar el contenido binario en un archivo de texto:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Ahora puede mirar el archivo con gedit ~/kate.txt
, y si busca getuid, encontrará algo como:
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>
Ahora, en el lado izquierdo, encontrará la dirección de memoria, después de los dos puntos (:) verá el código de instrucciones binarias (hexadecimal) y a la derecha de eso, verá el desensamblaje de ese código (también conocido como lo que significa) .
Ahora, ya ves, allí llama a getuid, prueba si eso es cero y salta a la instrucción if, es decir si el valor de retorno es igual a cero (je: jump if equal).
Ahora no queremos saltar al if, así que simplemente eliminamos esa basura allí. Pero solo eliminar esa basura cambiaría las direcciones en 6 bytes, destruyendo cualquier salto relativo en el programa en el proceso y, como consecuencia, el programa. Así que en lugar que acaba de sustituir toda la longitud de la instrucción de salto con NOP (abreviatura de N o Op ración) instrucciones, también conocido como 0x90 en el código de instrucción / hex.
Por lo tanto, debe reemplazar cada byte de salto allí con 0x90, así que donde tenía anteriormente
0f 84 e9 1e 00 00
usted tendrá
90 90 90 90 90 90
Esto se puede hacer simplemente con un editor hexadecimal.
Entonces instalamos uno:
sudo apt-get install wxhexeditor
Ahora en el editor hexadecimal, busca 0f 84 e9 1e 00 00, y reemplaza eso con 90 90 90 90 90 90. Si solo hay una ocurrencia de 0f 84 e9 1e 00 00, y la hay, entonces esto es trivialmente simple. Simplemente cambie los bytes en hexadecimal a 90 90 90 90 90 90 y guarde. Terminado. Kate o kwrite ahora se abrirán, ya sea que seas root o no.
Si haces lo mismo con Dolphin, te darás cuenta de que objdump -Crd /usr/bin/dolhin
produce un desmontaje muy corto.
si corre ldd /usr/bin/dolphin
, verá que dolphin carga la biblioteca compartida libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Entonces haces el objdump en libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Ahora abra el objdump: gedit ~/libkdeinit5_dolphin.txt
Busque getuid y verá que uno de los resultados de búsqueda es:
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
Esto es genial, ya ves, más basura como en Kate y Kwrite.
Ahora ábralo /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
en su editor hexadecimal, búsquelo 0f 84 58 1a 00 00
y reemplácelo con 90 90 90 90 90 90
.
Presiona guardar, y listo.
Dolphin ahora se ejecuta como root.
Nota: es una buena idea hacer una copia de seguridad de los archivos que modifique, en caso de que se arruine.
Además, puede descargar la fuente de kate, kwrite y dolphin, eliminar esa basura del código fuente, compilar e instalar. Pero dado que al estúpido sistema cmake le falta alguna plantilla de basura para algunos estúpidos, como iconos, probablemente porque el cmake suministrado por el repositorio es demasiado viejo, esto no funciona. Lástima, hubiera sido demasiado simple si simplemente funcionara, ¿no?
Pero solo parchear los ejecutables como describí es más rápido, así que a quién le importa de todos modos.
Usted ve, no es sencillo, pero es trivial.
PD:
Ahora, cada vez que kate, kwrite o dolphin se actualicen a través de apt, sus cambios se sobrescribirán. Tendrá que volver a aplicarlos. Dejaré automatizar el proceso de parche en tus manos más que capaces, y tu lenguaje de programación joice;)
¿Se puede hacer esto en puro golpe?
Además, si desea parchear vlc para la misma basura, puede hacerlo con sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Simplemente ponga esa declaración sed en un script, para que pueda volver a aplicar, si alguna vez lo necesita, si está desconectado y no tiene acceso a Internet.
Hackeo feliz - con kate, kwrite y dolphin - como root - mientras mira / escucha algo en vlc.
PS2:
Las comprobaciones de raíz malísimas siguieron el camino del Dodo en KDE v19.04.
¿Quién ha dicho n evolución fue una mala cosa.
Para progresar - ¡Salud!