มันเป็นเรื่องเล็กน้อย!
เพียงแค่ดูซอร์สโค้ดของ 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;
}
โลมาไม่แตกต่างกันยกเว้นกรณีนี้เกิดขึ้นใน libkdeinit5_dolphin.so
ดังนั้นการทำงานในฐานะรูทนั้นเป็นเรื่องเล็กน้อยสิ่งที่เราต้องทำคือข้ามการตรวจสอบ if uid = 0
วิธีที่เราทำเช่นนี้คือโดย kate perma-patching, 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>
ตอนนี้ทางด้านซ้ายคุณจะพบที่อยู่หน่วยความจำหลังเครื่องหมายจุดคู่ (:) คุณจะเห็นรหัสคำสั่งเลขฐานสอง (ฐานสิบหก) และทางด้านขวาของที่คุณเห็นการถอดชิ้นส่วนของรหัสนั้น (aka ความหมาย) .
ทีนี้, คุณเห็น, มันเรียกว่า getuid, ทดสอบว่ามันเป็นศูนย์และกระโดดเข้าไปในคำสั่ง if, นั่นก็คือถ้าบอกว่าค่าส่งคืนเท่ากับศูนย์ (je: กระโดดถ้าเท่ากัน)
ตอนนี้เราไม่ต้องการกระโดดเข้าไปใน if ดังนั้นเราแค่เอาอึนั้นออกไป แต่เพียงแค่ลบอึนั้นจะเปลี่ยนที่อยู่ 6 bytes, trashing ใด ๆ ที่เกี่ยวข้องกระโดดในโปรแกรมในกระบวนการและเป็นผลให้โปรแกรม ดังนั้นคุณเพียงแค่แทนที่ความยาวทั้งหมดของคำสั่ง jump ด้วยคำสั่ง NOP (ย่อมาจากคำสั่งN o Op ation) หรือที่ 0x90 ในรหัสคำสั่ง / hex
ดังนั้นคุณต้องแทนที่การข้ามทุกไบต์ด้วย 0x90 เพื่อที่คุณเคยมี
0f 84 e9 1e 00 00
คุณจะต้อง
90 90 90 90 90 90
สิ่งนี้สามารถทำได้ง่ายๆด้วย hex-editor
ดังนั้นเราจึงติดตั้งหนึ่ง:
sudo apt-get install wxhexeditor
ตอนนี้ในโปรแกรมแก้ไข hex คุณค้นหา 0f 84 e9 1e 00 00 และแทนที่ด้วย 90 90 90 90 90 90 หากมีเหตุการณ์เดียวที่ 0f 84 e9 1e 00 00 และมีสิ่งนี้ง่ายมาก เพียงแค่เปลี่ยนไบต์เป็น hex 90 90 90 90 90 90 และบันทึก เสร็จ Kate หรือ kwrite จะเปิดขึ้นไม่ว่าคุณจะรูทหรือไม่ก็ตาม
ถ้าคุณทำเช่นเดียวกันกับโลมาคุณจะรู้ได้ว่า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
ในฐานสิบหกแก้ไขของคุณค้นหาและแทนที่ด้วย0f 84 58 1a 00 00
กดปุ่มบันทึกแล้วทำ90 90 90 90 90 90
ตอนนี้ปลาโลมาจะวิ่งเหมือนราก
หมายเหตุ: ขอแนะนำให้ทำสำเนาสำรองของไฟล์ที่คุณแก้ไขในกรณีที่คุณอัปเดต
นอกจากนี้คุณยังสามารถดาวน์โหลดซอร์สของ kate, kwrite และ dolphin ลบอึนั้นออกจากซอร์สโค้ดรวบรวมและติดตั้ง แต่เนื่องจากระบบ cmake ที่โง่หายไปบางเทมเพลตอึเส็งเคร็งสำหรับอึที่โง่เช่นไอคอนบางทีอาจเป็นเพราะ cmake ที่จัดหาโดย repo นั้นเก่าเกินไปมันไม่ทำงาน น่าเสียดายที่มันจะง่ายเกินไปถ้ามันใช้งานได้
แต่เพียงปะแก้ไฟล์เอ็กซีคิวต์ตามที่ฉันอธิบายไว้เร็วขึ้นดังนั้นใครจะสนใจล่ะ
คุณจะเห็นว่ามันไม่ตรงไปตรงมา แต่มันไม่สำคัญ
PS:
ตอนนี้ทุกเวลา kate, kwrite หรือปลาโลมามีการปรับปรุงผ่าน apt การเปลี่ยนแปลงของคุณจะถูกเขียนทับ คุณจะต้องสมัครใหม่ ฉันจะปล่อยให้กระบวนการแพทช์เป็นไปโดยอัตโนมัติในมือที่มีความสามารถมากกว่าของคุณและภาษาโปรแกรมของคุณด้วยความยินดี;)
สิ่งนี้สามารถทำได้ในทุบตีบริสุทธิ์?
นอกจากนี้หากคุณต้องการแพทช์ vlc สำหรับอึเดียวกันคุณสามารถทำได้ด้วย sed:
sed -i 's/geteuid/getppid/' /usr/bin/vlc
เพียงแค่ใส่คำสั่ง sed ที่เป็นสคริปต์เพื่อให้คุณสามารถนำไปใช้อีกครั้งถ้าคุณต้องการถ้าคุณออฟไลน์และไม่มีอินเทอร์เน็ต
แฮ็คมีความสุข - กับเคท, เขียนและปลาโลมา - เป็นราก - ในขณะที่ดู / ฟังบางสิ่งบางอย่างใน vlc
PS2:
การตรวจสอบเส็งเคร็งไปตามทางของ Dodo ใน KDE v19.04
ใครบอกว่าnวิวัฒนาการเป็นสิ่งที่ไม่ดี
เพื่อความก้าวหน้า - ไชโย!