É trivial!
Basta olhar para o código fonte de kate e kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
Nas primeiras linhas de código diretamente no início da função "principal", você 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;
}
O Dolphin não é diferente, exceto que isso acontece em libkdeinit5_dolphin.so.
Portanto, rodar como root é trivial, tudo o que precisamos fazer é pular a verificação if uid = 0.
A maneira como fazemos isso é através da aplicação permanente de patches kate, kwrite e golfinho.
Então, a primeira coisa que fazemos é despejar o conteúdo binário em um arquivo de texto:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Agora você pode olhar para o arquivo e gedit ~/kate.txt
, se procurar por 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>
Agora, no lado esquerdo, você encontra o endereço da memória, depois dos dois pontos (:), você verá o código de instruções binárias (hex) e, à direita, verá a desmontagem desse código (também conhecido como o que significa) .
Agora, veja bem, lá chama getuid, testa se esse é zero e pula para a instrução if, ou seja, se o valor de retorno é igual a zero (je: jump se igual).
Agora não queremos pular para o if, então apenas removemos essa porcaria lá. Mas apenas remover essa porcaria mudaria de endereço em 6 bytes, descartando quaisquer saltos relativos no programa no processo e, como conseqüência, no programa. Então, ao invés você apenas substituir todo o comprimento da instrução salto com NOP (abreviatura de N S Op peração) instruções, aka 0x90 na instrução de código / hex.
Então você precisa substituir cada byte de salto por 0x90, para onde você tinha anteriormente
0f 84 e9 1e 00 00
voce terá
90 90 90 90 90 90
Isso pode ser feito simplesmente com um editor hexadecimal.
Então, instalamos um:
sudo apt-get install wxhexeditor
Agora, no editor hexadecimal, procure 0f 84 e9 1e 00 00 e substitua por 90 90 90 90 90 90. Se houver apenas uma ocorrência de 0f 84 e9 1e 00 00, e houver, isso é trivialmente simples. Apenas altere os bytes em hexadecimal para 90 90 90 90 90 90 e salve. Acabado. Agora, o Kate ou o kwrite serão abertos, seja você root ou não.
se você fizer o mesmo com o golfinho, perceberá que objdump -Crd /usr/bin/dolhin
produz uma desmontagem muito curta.
se você executar ldd /usr/bin/dolphin
, você verá o dolphin carregar a biblioteca compartilhada libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Então você faz o objdump em libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Agora abra o objdump: gedit ~/libkdeinit5_dolphin.txt
Pesquise getuid e verá que um dos resultados da pesquisa é:
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
Isso é ótimo, veja bem, mais porcaria como em Kate e Kwrite.
Agora abra /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
no seu editor hexadecimal, procure 0f 84 58 1a 00 00
e substitua-o por 90 90 90 90 90 90
.
Clique em salvar e pronto.
O Dolphin agora roda como root.
Nota: É uma boa ideia fazer uma cópia de backup dos arquivos que você modifica, caso você se arrependa.
Além disso, você pode simplesmente baixar a fonte de kate, kwrite e dolphin, remover essa porcaria do código-fonte, compilar e instalar. Mas como o sistema cmake estúpido está faltando algum modelo de porcaria de porcaria, como ícones, provavelmente porque o cmake fornecido novamente é muito antigo, isso não funciona. Que pena, teria sido muito simples se funcionasse, não?
Mas apenas corrigir os executáveis como eu descrevi é mais rápido, então quem se importa de qualquer maneira.
Veja bem, não é simples, mas é trivial.
PS:
Agora, sempre que o kate, o kwrite ou o dolphin forem atualizados via apt, suas alterações serão substituídas. Você precisará reaplicá-los. Vou deixar automatizar o processo de correção nas suas mãos mais do que capazes e na sua linguagem de programação do joice;)
Isso pode ser feito em pura festa?
Além disso, se você deseja corrigir o vlc para a mesma porcaria, pode fazê-lo com o sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Basta colocar a declaração sed em um script, para que você possa se inscrever novamente, se precisar, se estiver offline e não tiver acesso à Internet.
Happy hacking - com kate, kwrite e dolphin - como root - enquanto assiste / ouve algo no vlc.
PS2:
As verificações de raiz ruins foram o caminho do Dodo no KDE v19.04.
Quem disse que n evolução era uma coisa ruim.
Para progredir - Saúde!