जहां तक यूजर्स के प्रोग्राम का सवाल है, उन्हें फेक करना आसान है और किसी भी फाइल के बारे में सिर्फ कॉन्टेंट तैयार करना। उदाहरण के लिए, मान लीजिए कि सी प्रोग्राम /proc/cpuinfo
सीरियल नंबर को सत्यापित करने के लिए फ़ाइल का उपयोग कर रहा है । कार्यक्रम कॉपी-संरक्षित है और धारावाहिक से जुड़ा हुआ है, और मेरे पास स्रोत कोड नहीं है। हालाँकि, मैं अभी भी चला सकता हूँ strace program 2>&1 | grep cpuinfo
, जो कुछ इस तरह प्रकट करेगा:
open("/proc/cpuinfo", O_RDONLY) = 3
इस बिंदु पर, मैं cpuinfo.so
निम्नलिखित फ़ंक्शन के साथ एक छोटी सी लाइब्रेरी बना सकता हूं :
int open(const char *file, int flags) {
static int (*real_open)(const char *file, int flags);
if(!real_open) real_open = dlsym(RTLD_NEXT, "open");
if(!strcmp(file, "/proc/cpuinfo")) file = "/tmp/cpuinfo";
return real_open(file, flags);
}
जैसा कि आप देख सकते हैं, मैं जाँच कर रहा हूँ कि लाइब्रेरी का उपयोगकर्ता खोलने की कोशिश करता है या नहीं /proc/cpuinfo
, इस स्थिति में मैं उसके /tmp/cpuinfo
बजाय खुलता हूँ ।
तब मैं मूल कॉपी-संरक्षित प्रोग्राम को LD_PRELOAD=/path/to/cpuinfo.so program
चलाऊंगा, और यह /proc/cpuinfo
बाकी फाइलों के साथ सही तरीके से काम करते हुए, यह सोचकर मेरी नकली फाइल को पढ़ेगा ।
ध्यान दें कि यदि कॉपी-संरक्षित सॉफ़्टवेयर में कर्नेल ऑब्जेक्ट शामिल हैं, तो इसे मूर्ख बनाना बहुत कठिन होगा, क्योंकि यह सीधे हार्डवेयर तक पहुंच सकता है। हालांकि, इस तरह के सॉफ्टवेयर केवल कर्नेल के साथ ही काम करेंगे जिसके लिए इसे बनाया गया था, जिससे इसे वितरित करना काफी अव्यवहारिक हो गया।