Ld-linux.so হ্যাকের সাথে বিকল্প libc ব্যবহার করা; ক্লিনার পদ্ধতি?


13

আমার খুব পুরানো গ্লিবসি সহ একটি উত্তরাধিকার ব্যবস্থা রয়েছে, যা আমরা পরীক্ষার / বৈধতার কাজের পর্বত ব্যতীত আপগ্রেড করতে পারি না।

আমার এখন সিস্টেমে আরও বেশ কয়েকটি নতুন প্রোগ্রাম (যেমন জাভা ১.7) চালানোর দরকার পড়েছে। আমি একটি ক্রট সমাধানের জন্য বেছে নিয়েছি, যেখানে আমি সমস্ত প্রয়োজনীয় লিবস প্যাকেজ করি এবং একটি ক্রুটে একটি পরিষেবা চালাই।

Chroot যদিও খুব সীমাবদ্ধ, এবং আমি বরং LD_LIBRARY_PATH দিয়ে সমস্যাটি সমাধান করার চেষ্টা করব। দুর্ভাগ্যক্রমে, আমি libc.so.6: cannot handle TLS dataযখন এটি চেষ্টা করি তখন আমি একটি ত্রুটি পাই।

দেখা যাচ্ছে আমার /lib/ld-linux.so.2পাশাপাশি ক্রুট থেকেও দরকার । এইটা কাজ করে:

LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program

তবে এর গ্রন্থাগারগুলি কোথা থেকে লোড করতে হবে তা নির্ধারণ করার জন্য javaআমার কৌতুকটি বানচাল করে /proc/self/cmdline, বাইনারিটির নাম 'বিন / জাভা' না রাখলে যা ব্যর্থ হয়। এছাড়াও জাভা শুরু করার সময় নিজেকে কার্যকর করে, আরও জটিল বিষয়গুলি।

শেষ খাদে এই কাজ করতে প্রয়াস, আমি একটি হেক্স এডিটর দিয়ে জাভা বাইনারি খুলে স্ট্রিং প্রতিস্থাপিত /lib/ld-linux.so.2সঙ্গে /home/chroot/ld.so(এবং গঠিত যে একটি সিমবলিক লিঙ্ক ld-linux.so.2), এবং এটা কাজ করে!

তবে আমি মনে করি সকলেই সম্মত হবেন যে প্রতিটি নতুন বাইনারিটির পথকে নীস্টাব্যবস্থার একটি পরম পথে পুনরায় লিখনের জন্য এটি একটি বিশাল ক্লডেজ।

কাস্টম ld-linux.so সহ কাস্টম লাইব্রেরি পাথ ব্যবহার করার জন্য কি কেউ ক্লিনার উপায় জানেন ?

উত্তর:


12

আপনি যখন আপনার হেক্স সম্পাদক হিসাবে আবিষ্কার করেছেন ততক্ষণে লোডার পাথটি বাইনারিতে সংকলিত হয়েছে। আপনি আসলে ভাগ্যবান হয়েছেন যে বাইনারি সম্পাদনা সরাসরি কাজ করেছিল কারণ উভয়ই /lib/ld-linux.so.2এবং /home/chroot/ld.soএকই দৈর্ঘ্য। এই স্ট্রিংগুলির দৈর্ঘ্য বাইনারিতেও থাকে এবং আপনি স্ট্রিংগুলি সরাসরি সংশোধন করেন তবে আপনি সূক্ষ্ম সমস্যা তৈরি করতে পারেন।

আপনি যদি পথে যেতে না পারেন তবে আপনার দোভাষীকে আপডেট করার জন্য প্যাচেলফের মতো কিছু জিনিস দেখে নেওয়া উচিত । এটি আপনাকে দ্রুত এবং নিরাপদে দোভাষী বদলে দিতে দেয়।


ভাগ্য ছিল না, আমি জানতাম যে আমার কোনও বাইট শিফট করার দরকার নেই ;-) তবে, প্যাচেলফটি দেখতে যা চাই ঠিক তেমন দেখাচ্ছে। আপেক্ষিক পথটি ব্যবহার করতে সক্ষম না হওয়া ছাড়াও, আমি যে LD_LIBRARY_PATH ব্যবহার করছি তার যত্নও নিতে পারে যাতে আমার কোনও মোড়কের দরকার পড়ে না। আমি এটি পরীক্ষার সুযোগ পাওয়ার সাথে সাথে উত্তরটির ক্রেডিট দেব।
ডেটালেস

1
এটি কাজ করে! এই সার্ভারে পুরানো- libc প্রোগ্রামগুলির সাথে নতুন-libc প্রোগ্রামগুলিকে মিশ্রিত করার জন্য এটি আমাকে একটি উত্তম পথ দেয় give ভবিষ্যতের পাঠকদের জন্য কমান্ডটি ছিল patchelf --set-interpreter $JAVA/lib/ld-linux.so.2 --set-rpath $JAVA/lib:$JAVA/lib/i386:$JAVA/lib/i386/jli $JAVA/bin/java, যেখানে A জাভা জেআরই-র ডিরেক্টরি, এবং যেখানে আমি সমস্ত নির্ভরশীল লাইব্রেরিগুলি সংগ্রহ করেছি এবং সেগুলি lib/জেআরই ডিরেক্টরিতে রেখেছি।
ডেটালেস

@ ড্যাটালেস ভাল আছেন আমার এখনও এই লিবিজভিএম.এস.কে কাজ করার জন্য এলডি_লিবিআরএআইপিএইচটি দরকার, কারণ লাইবস্টিডি ++। সুতরাং:: ভাগ করা অবজেক্ট ফাইলটি খুলতে পারে না: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই [রুট @ 97245bbe7cc1 টেনসরফ্লো-জাভা] #
আমোস

@ আমোসকে কিছুক্ষণ হয়ে গেছে, তবে আমার ক্ষেত্রে আমার আর আর এলডি_লিবারি_পথ দরকার হয়নি কারণ জাভা বাইনারি থেকে ডিফল্ট আসে। তবে, যে অংশটি আমি বলেছিলাম যে আমি ঘুরে গিয়েছিলাম এবং জাভা দ্বারা ব্যবহৃত সমস্ত লিবগুলি পেয়েছি এবং সেগুলি জাভা লিবিব ডির মধ্যে অনুলিপি করেছিলাম note আমি ldd $JAVA/bin/javaআইএসটি পেতাম। এছাড়াও রয়েছে বেশী libc কিছু গতিশীল আপনি libnss.so পছন্দ দরকার
dataless
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.