Это тривиально!
Просто посмотрите на исходный код kate и kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
В первых строках кода непосредственно в начале «основной» функции вы найдете:
/**
* 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 ничем не отличается, за исключением того, что это происходит в libkdeinit5_dolphin.so.
Так что запуск от имени root тривиален, все, что нам нужно сделать, это пропустить проверку if uid = 0.
То, как мы это делаем, - это исправление perma-patching kate, kwrite и dolphin.
Итак, первое, что мы делаем, это дамп двоичного содержимого в текстовый файл:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Теперь вы можете посмотреть файл с помощью gedit ~/kate.txt
, и если вы ищете getuid, вы найдете что-то вроде:
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>
Теперь, с левой стороны, вы найдете адрес памяти, после двоеточия (:) вы увидите двоичный код инструкции (шестнадцатеричный), а справа от него вы увидите разборку этого кода (то есть, что это значит) ,
Теперь, вы видите, там он вызывает getuid, проверяет, равен ли он нулю, и переходит в оператор if, то есть, если возвращаемое значение равно нулю (je: jump, если равно).
Теперь мы не хотим прыгать в if, поэтому просто удалим это дерьмо. Но простое удаление этого дерьма изменило бы адреса на 6 байтов, уничтожив любые относительные скачки в программе в процессе и, как следствие, в программе. Так что вместо того, чтобы просто заменить всю длину заявления прыжка с NOP (сокращенно N O Op чество) инструкции, ака 0x90 в инструкции кода / гекс.
Таким образом, вам нужно заменить каждый байт перехода на 0x90, где вы ранее имели
0f 84 e9 1e 00 00
у тебя будет
90 90 90 90 90 90
Это можно сделать просто с помощью hex-редактора.
Итак, мы устанавливаем один:
sudo apt-get install wxhexeditor
Теперь в шестнадцатеричном редакторе вы ищете 0f 84 e9 1e 00 00 и заменяете его на 90 90 90 90 90 90. Если есть только один случай 0f 84 e9 1e 00 00, и это так, то это тривиально просто. Просто измените байты в шестнадцатеричном виде на 90 90 90 90 90 90 и сохраните. Законченный. Kate или kwrite теперь будут открыты независимо от того, являетесь ли вы пользователем root или нет.
если вы сделаете то же самое с дельфином, вы поймете, что objdump -Crd /usr/bin/dolhin
производит очень короткую разборку.
если вы запустите ldd /usr/bin/dolphin
, вы увидите, что dolphin загружает общую библиотеку libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Итак, вы делаете objdump для libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Теперь откройте objdump: gedit ~/libkdeinit5_dolphin.txt
Выполните поиск getuid, и вы увидите, что один из результатов поиска:
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
Это замечательно, понимаешь, больше дерьма, как в kate и kwrite.
Теперь откройте /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
в вашем hex-редакторе, найдите 0f 84 58 1a 00 00
и замените его 90 90 90 90 90 90
.
Хит сохранить, и готово.
Дельфин теперь работает как корень.
Примечание. Хорошая идея - сделать резервную копию файлов, которые вы изменяете, на всякий случай.
Кроме того, вы можете просто загрузить исходный код kate, kwrite и dolphin, удалить это дерьмо из исходного кода, скомпилировать и установить. Но так как в тупой системе cmake отсутствует какой-то дерьмовый шаблон дерьма для некоторых глупых дерьмов, таких как значки, возможно, потому что поставляемый репозиторием cmake слишком стар, это не работает. Жаль, было бы слишком просто, если бы это просто сработало, не так ли?
Но просто исправление исполняемых файлов, как я описал, происходит быстрее, так что кому все равно.
Видите ли, это не просто, но тривиально.
PS:
теперь, каждый раз, когда kate, kwrite или dolphin обновляются через apt, ваши изменения будут перезаписаны. Вам нужно будет повторно применить их. Я оставлю автоматизацию процесса патча в ваших более чем способных руках, и ваш язык программирования joice;)
Можно ли это сделать в чистом виде?
Также, если вы хотите исправить vlc для того же дерьма, вы можете сделать это с помощью sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Просто поместите это sed-выражение в скрипт, чтобы вы могли повторно подать заявку, если вам когда-либо понадобится, если вы не в сети и не имеете доступа в Интернет.
Удачного взлома - с kate, kwrite и dolphin - с правами root - во время просмотра / прослушивания чего-либо на vlc.
PS2:
дерьмовые проверки корня пошли по пути Dodo в KDE v19.04.
Кто сказал, что русская эволюция была плохой вещью.
Для прогресса - ура!