Es ist trivial!
Schauen Sie sich einfach den Quellcode von Kate und Kwrite an:
diff --git a/kate/main.cpp b/kwrite/main.cpp
In den ersten Codezeilen direkt am Anfang der "Haupt" -Funktion finden Sie:
/**
* 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 ist nicht anders, außer dies geschieht in libkdeinit5_dolphin.so.
Das Ausführen als root ist also trivial. Alles, was wir tun müssen, ist die Prüfung if uid = 0 zu überspringen.
Die Art und Weise, wie wir dies tun, ist das dauerhafte Patchen von Kate, Kwrite und Delphin.
Das erste, was wir tun, ist, den binären Inhalt in eine Textdatei zu kopieren:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Jetzt können Sie sich die Datei mit ansehen gedit ~/kate.txt
und wenn Sie nach getuid suchen, finden Sie etwas wie:
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>
Jetzt finden Sie auf der linken Seite die Speicheradresse. Nach dem Doppelpunkt (:) sehen Sie den binären Anweisungscode (hex) und rechts davon sehen Sie die Zerlegung dieses Codes (auch bekannt als was er bedeutet). .
Nun, sehen Sie, dort ruft es getuid auf, testet, ob das Null ist, und springt in die if-Anweisung, dh wenn der Rückgabewert gleich Null ist (je: jump if gleich).
Jetzt wollen wir nicht mehr in das Wenn springen, also entfernen wir einfach diesen Mist dort. Aber nur das Entfernen dieses Mistes würde die Adressen um 6 Bytes ändern und dabei alle relativen Sprünge im Programm und infolgedessen das Programm zunichte machen. Anstatt also ersetzen Sie einfach die gesamte Länge der Sprunganweisung mit NOP (kurz für N o Op menarbeit) Anweisungen, auch bekannt als 0x90 in Befehlscode / hex.
Sie müssen also jedes Sprungbyte dort durch 0x90 ersetzen, also dort, wo Sie es zuvor hatten
0f 84 e9 1e 00 00
du wirst haben
90 90 90 90 90 90
Dies kann einfach mit einem Hex-Editor erfolgen.
Also installieren wir eine:
sudo apt-get install wxhexeditor
Jetzt suchen Sie im Hex-Editor nach 0f 84 e9 1e 00 00 und ersetzen diese durch 90 90 90 90 90 90. Wenn es nur ein Vorkommen von 0f 84 e9 1e 00 00 gibt und dies der Fall ist, ist dies trivial einfach. Ändern Sie einfach die Bytes in hex in 90 90 90 90 90 90 und speichern Sie. Fertig. Kate oder kwrite werden jetzt geöffnet, egal ob Sie root sind oder nicht.
Wenn Sie dasselbe mit Delfinen tun, werden Sie feststellen, dass objdump -Crd /usr/bin/dolhin
eine sehr kurze Demontage auftritt.
Wenn Sie ausführen ldd /usr/bin/dolphin
, wird Delphin die gemeinsam genutzte Bibliothek libkdeinit5_dolphin.so laden
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Also machst du den objdump auf libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Öffnen Sie nun den objdump: gedit ~/libkdeinit5_dolphin.txt
Suchen Sie nach getuid und Sie werden sehen, dass eines der Suchergebnisse lautet:
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
Das ist großartig, sehen Sie, mehr Mist, genau wie bei Kate und Kwrite.
Öffnen /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
Sie nun in Ihrem Hex-Editor, suchen Sie danach 0f 84 58 1a 00 00
und ersetzen Sie ihn durch 90 90 90 90 90 90
.
Klicken Sie auf Speichern und fertig.
Dolphin läuft jetzt als root.
Hinweis: Es empfiehlt sich, eine Sicherungskopie der von Ihnen geänderten Dateien zu erstellen, nur für den Fall, dass Sie fertig sind.
Sie können auch einfach die Quelle von Kate, Kwrite und Delphin herunterladen, diesen Mist aus dem Quellcode entfernen, kompilieren und installieren. Aber da dem dummen cmake-System eine beschissene Mistvorlage für irgendeinen dummen Mist wie Symbole fehlt, wahrscheinlich weil der vom Repo gelieferte cmake zu alt ist, funktioniert dies nicht. Schade, wäre zu einfach gewesen, wenn es nur funktioniert hätte, nicht wahr?
Aber nur die ausführbaren Dateien wie beschrieben zu patchen ist schneller, also wen interessiert das schon?
Sie sehen, es ist nicht einfach, aber es ist trivial.
PS:
Jedes Mal, wenn Kate, Kwrite oder Delphin über apt aktualisiert werden, werden Ihre Änderungen überschrieben. Sie müssen sie erneut anwenden. Ich überlasse die Automatisierung des Patch-Prozesses Ihren mehr als fähigen Händen und Ihrer Programmiersprache von joice;)
Kann das in reiner Bash gemacht werden?
Wenn Sie vlc für denselben Mist patchen möchten, können Sie dies auch mit sed tun:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Fügen Sie diese sed-Anweisung einfach in ein Skript ein, damit Sie sie erneut anwenden können, falls dies jemals erforderlich sein sollte, wenn Sie offline sind und keinen Internetzugang haben.
Viel Spaß beim Hacken - mit Kate, Kwrite und Delphin - als Wurzel - während Sie etwas auf vlc sehen / hören.
PS2:
Die beschissenen Root-Checks gingen den Weg des Dodo in KDE v19.04.
Wer n Evolution sagte, war eine schlechte Sache.
Um voranzukommen - Prost!