Thật tầm thường!
Chỉ cần nhìn vào mã nguồn của kate và kwrite:
diff --git a/kate/main.cpp b/kwrite/main.cpp
Trong các dòng mã đầu tiên trực tiếp khi bắt đầu chức năng "chính", bạn sẽ tìm thấy:
/**
* 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;
}
Cá heo không khác, ngoại trừ điều này xảy ra trong libkdeinit5_dolphin.so.
Vì vậy, chạy như root là tầm thường, tất cả những gì chúng ta cần làm là bỏ qua kiểm tra if uid = 0.
Cách chúng tôi làm điều này là bằng cách chắp vá kate, kwrite và cá heo.
Vì vậy, điều đầu tiên chúng ta làm là bỏ nội dung nhị phân vào tệp văn bản:
objdump -Crd /usr/bin/kate >> ~/kate.txt
objdump -Crd /usr/bin/kwrite >> ~/kwrite.txt
Bây giờ bạn có thể xem tệp với gedit ~/kate.txt
và nếu bạn tìm kiếm getuid, bạn sẽ tìm thấy một cái gì đó như:
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>
Bây giờ, ở phía bên trái, bạn tìm thấy địa chỉ bộ nhớ, sau dấu hai chấm (:) bạn sẽ thấy mã lệnh nhị phân (hex) và ở bên phải, bạn thấy sự phân tách của mã đó (còn gọi là ý nghĩa của nó) .
Bây giờ, bạn thấy, ở đó nó gọi getuid, kiểm tra nếu đó bằng 0 và nhảy vào câu lệnh if, nghĩa là nếu giá trị trả về bằng 0 (je: jump if bằng).
Bây giờ chúng tôi không muốn nhảy vào nếu, vì vậy chúng tôi chỉ cần loại bỏ những thứ nhảm nhí đó. Nhưng chỉ cần loại bỏ crap đó sẽ thay đổi địa chỉ 6 byte, bỏ qua bất kỳ bước nhảy tương đối nào trong chương trình trong quá trình và kết quả là chương trình. Vì vậy, thay vào đó, bạn chỉ cần thay thế toàn bộ chiều dài của câu lệnh nhảy bằng các hướng dẫn NOP (viết tắt của N o Op eration), còn gọi là 0x90 trong mã lệnh / hex.
Vì vậy, bạn cần thay thế mọi byte nhảy ở đó bằng 0x90 để trước đây bạn đã có
0f 84 e9 1e 00 00
bạn sẽ có
90 90 90 90 90 90
Điều này có thể được thực hiện đơn giản với một trình soạn thảo hex.
Vì vậy, chúng tôi cài đặt một:
sudo apt-get install wxhexeditor
Bây giờ trong trình chỉnh sửa hex, bạn tìm kiếm 0f 84 e9 1e 00 00 và thay thế bằng 90 90 90 90 90 90. Nếu chỉ có một lần xuất hiện là 0f 84 e9 1e 00 00, và điều này thật đơn giản. Chỉ cần thay đổi các byte trong hex thành 90 90 90 90 90 90 và lưu lại. Đã kết thúc. Kate hoặc kwrite bây giờ sẽ mở, cho dù bạn đã root hay chưa.
nếu bạn làm tương tự với cá heo, bạn sẽ nhận objdump -Crd /usr/bin/dolhin
ra việc tháo gỡ rất ngắn.
nếu bạn chạy ldd /usr/bin/dolphin
, bạn sẽ thấy cá heo tải thư viện chia sẻ libkdeinit5_dolphin.so
linux-vdso.so.1 (0x00007ffc2fdf0000) libkdeinit5_dolphin.so => /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so (0x00007fb54e76c000)
Vì vậy, bạn thực hiện objdump trên libkdeinit5_dolphin.so:
objdump -Crd /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so >> ~/libkdeinit5_dolphin.txt
Bây giờ hãy mở objdump: gedit ~/libkdeinit5_dolphin.txt
Tìm kiếm getuid và bạn sẽ thấy rằng một trong những kết quả tìm kiếm là:
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
Điều này thật tuyệt, bạn thấy đấy, nhiều thứ tào lao giống như trong kate và kwrite.
Bây giờ hãy mở /usr/lib/x86_64-linux-gnu/libkdeinit5_dolphin.so
trong trình soạn thảo hex của bạn, tìm kiếm 0f 84 58 1a 00 00
và thay thế nó bằng 90 90 90 90 90 90
.
Nhấn lưu, và thực hiện.
Cá heo bây giờ chạy như root.
Lưu ý: Ý tưởng tốt để tạo một bản sao lưu của các tệp bạn sửa đổi, chỉ trong trường hợp bạn tìm thấy.
Ngoài ra, bạn chỉ có thể tải xuống nguồn của kate, kwrite và cá heo, loại bỏ crap đó khỏi mã nguồn, biên dịch và cài đặt. Nhưng vì hệ thống cmake ngu ngốc đang thiếu một số mẫu nhảm nhí cho một số thứ ngu ngốc như biểu tượng, có lẽ vì cmake được cung cấp repo quá cũ, nên điều này không hoạt động. Quá tệ, sẽ quá đơn giản nếu nó chỉ hoạt động, phải không.
Nhưng chỉ cần vá các tệp thực thi như tôi mô tả là nhanh hơn, vì vậy ai quan tâm chứ.
Bạn thấy đấy, nó không đơn giản, nhưng nó tầm thường.
PS:
Bây giờ, bất cứ khi nào kate, kwrite hoặc cá heo được cập nhật thông qua apt, những thay đổi của bạn sẽ được ghi đè. Bạn sẽ cần phải áp dụng lại chúng. Tôi sẽ tự động hóa quá trình vá lỗi trong tay nhiều hơn khả năng của mình và ngôn ngữ lập trình của bạn rất vui;)
Điều này có thể được thực hiện trong bash tinh khiết?
Ngoài ra, nếu bạn muốn vá vlc cho cùng một crap, bạn có thể làm điều đó với sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
Chỉ cần đặt câu lệnh sed đó vào một tập lệnh, để bạn có thể áp dụng lại, nếu bạn cần nếu bạn ngoại tuyến và không có quyền truy cập internet.
Hack vui vẻ - với kate, kwrite và cá heo - là root - trong khi xem / nghe một cái gì đó trên vlc.
PS2:
Các kiểm tra gốc nhảm nhí đã đi theo cách của Dodo trong KDE v19.04.
Ai nói n tiến hóa là một điều xấu.
Để tiến bộ - Chúc mừng!