C'est trivial!
Regardez simplement le code source de kate et kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
Dans les premières lignes de code directement au début de la fonction "principale", vous trouverez:
/**
* 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 n'est pas différent, sauf que cela se produit dans libkdeinit5_dolphin.so.
Donc, exécuter en tant que root est trivial, tout ce que nous devons faire est de sauter la vérification if uid = 0.
Pour ce faire, nous utilisons le patchage permanent de kate, kwrite et dolphin.
Donc, la première chose que nous faisons, c'est de vider le contenu binaire dans un fichier texte:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Vous pouvez maintenant regarder le fichier avec gedit ~/kate.txt
, et si vous recherchez getuid, vous trouverez quelque chose comme:
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>
Maintenant, sur le côté gauche, vous trouvez l'adresse mémoire, après les deux points (:) vous verrez le code d'instruction binaire (hex) et à droite, vous voyez le démontage de ce code (aka ce que cela signifie) .
Maintenant, vous voyez, là il appelle getuid, teste si c'est zéro et saute dans l'instruction if, c'est-à-dire si la valeur de retour est égale à zéro (je: jump si égal).
Maintenant, nous ne voulons pas sauter dans le si, nous supprimons simplement cette merde là-bas. Mais simplement supprimer cette merde changerait les adresses de 6 octets, supprimant tous les sauts relatifs dans le programme dans le processus et, par conséquent, le programme. Donc, à la place, vous remplacez simplement toute la longueur de l'instruction de saut par NOP (abréviation de N o Op eration), également appelées 0x90 dans le code d'instruction / hex.
Vous devez donc remplacer chaque octet de saut par 0x90, donc là où vous aviez précédemment
0f 84 e9 1e 00 00
Tu vas avoir
90 90 90 90 90 90
Cela peut être fait simplement avec un éditeur hexadécimal.
Nous en installons donc un:
sudo apt-get install wxhexeditor
Maintenant, dans l'éditeur hexadécimal, vous recherchez 0f 84 e9 1e 00 00, et vous le remplacez par 90 90 90 90 90 90. S'il n'y a qu'une seule occurrence de 0f 84 e9 1e 00 00, et il y en a un, alors c'est très simple. Modifiez simplement les octets hexadécimaux en 90 90 90 90 90 90 et enregistrez. Fini. Kate ou kwrite s'ouvriront maintenant, que vous soyez root ou non.
si vous faites de même avec les dauphins, vous vous rendrez compte qu'il objdump -Crd /usr/bin/dolhin
produit un démontage très court.
si vous exécutez ldd /usr/bin/dolphin
, vous verrez que dolphin charge la bibliothèque partagée libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Vous faites donc l'objdump sur libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Ouvrez maintenant l'objdump: gedit ~/libkdeinit5_dolphin.txt
Recherchez getuid, et vous verrez que l'un des résultats de la recherche est:
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
C'est génial, vous voyez, plus de merde comme dans kate et kwrite.
Maintenant ouvrez-le /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
dans votre éditeur hexadécimal, recherchez-le 0f 84 58 1a 00 00
et remplacez-le par 90 90 90 90 90 90
.
Appuyez sur Enregistrer, et c'est fait.
Dolphin s'exécute maintenant en tant que root.
Remarque: Bonne idée de faire une copie de sauvegarde des fichiers que vous modifiez, au cas où vous f *** up.
En outre, vous pouvez simplement télécharger la source de kate, kwrite et dolphin, supprimer cette merde du code source, compiler et installer. Mais comme le système stupide de cmake manque un modèle de merde pour des conneries stupides telles que des icônes, probablement parce que le cmake fourni par le dépôt est trop ancien, cela ne fonctionne pas. Dommage, ça aurait été trop simple si ça avait marché, non?
Mais simplement patcher les exécutables comme je l'ai décrit est plus rapide, alors peu importe.
Vous voyez, ce n'est pas simple, mais c'est trivial.
PS:
Maintenant, chaque fois que kate, kwrite ou dolphin sont mis à jour via apt, vos modifications seront écrasées. Vous devrez les réappliquer. Je vais laisser l'automatisation du processus de patch entre vos mains plus que capables et votre langage de programmation de joice;)
Cela peut-il être fait en pure bash?
De plus, si vous voulez patcher vlc pour la même merde, vous pouvez le faire avec sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Il suffit de mettre cette instruction sed dans un script, afin que vous puissiez réappliquer, si vous en avez besoin si vous êtes hors ligne et n'avez pas accès à Internet.
Piratage heureux - avec kate, kwrite et dauphin - en tant que root - tout en regardant / écoutant quelque chose sur vlc.
PS2:
Les vérifications de racines de merde ont suivi le chemin du Dodo dans KDE v19.04.
Qui a dit n l' évolution était une mauvaise chose.
Pour progresser - Santé!