众所周知,最近几年kate不让用root运行了,原因很sb,死板的德国佬认为会造成安全问题
kate自带的提权保存功能不适合/root/.bashrc或/tmp/root-created-600-file这种文件不可读的情况
SUDO_EDITOR=kate sudoedit不适合/tmp/root-created-600-file这种目录可写但文件不可读的情况
本质上是kate源码里边检查getuid是否为0,为0就拒绝运行
可以自己编译一个kate源码级破解,也可以二进制破解
源码在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;
}
下面是二进制破解方法:
1、使用objdump -Crd /usr/bin/kate>kate.s反编译kate
2、打开kate.s,并搜索getuid,找到下面两种代码之一:
jne情形,分短编码75 xx和长编码0F 85 xx xx xx xx:
7fce: e8 5d f8 ff ff call 7830 <getuid@plt>7fd3: 85 c0 test %eax,%eax7fd5: 75 28 jne 7fff <__cxa_finalize@plt+0x9f>
je情形,也分短编码74 xx和长编码0F 84 xx xx xx xx:
2a98e: e8 ed ce ff ff callq 27880 <getuid@plt>2a993: 85 c0 test %eax,%eax2a995: 0f 84 e9 1e 00 00 je 2c884 <__cxa_finalize@plt+0x1f5c>
3、使用任意十六进制编辑器(如okteta(kde)、hexer(终端)等)以root权限编辑/usr/bin/kate,找到对应的二进制代码,对于上面几种情况进行不同修改:
- jne,短编码75 xx(jne rel8),改为EB xx(jmp rel8)
- jne,长编码0F 85 xx xx xx xx(jne rel32),90 E9 xx xx xx xx(nop; jmp rel32,x86相对跳转相对的是下一条指令,所以应向后对齐)
- je,短编码74 xx(je rel8),改为90 90(nop; nop)
- jne,长编码0F 84 xx xx xx xx(je rel32),改为90 90 90 90 90 90(nop; nop; nop; nop; nop; nop)