2010-08-04 17 views
5

कुछ समय पहले, मैंने अपने स्कूल के लिए कुछ बैश स्क्रिप्ट लिखी थीं। मैंने सोचा कि यह 'रक्षा' करने के लिए बहुत चालाक होगा, इसलिए मैंने उन्हें shc के साथ बाइनरी फ़ाइल में संकलित किया। कुछ हफ्ते बाद, मैंने असम्बद्ध स्क्रिप्ट खो दी और अब मेरे पास केवल मेरी बाइनरी बाकी है।संकलित बैश स्क्रिप्ट से सादा पाठ स्क्रिप्ट पुनर्प्राप्त करें

क्या shc उत्पन्न बाइनरी से स्क्रिप्ट को पुनर्प्राप्त करने का कोई तरीका है? मैंने shc के स्रोत कोड में कोई भाग्य के साथ बाइनरी को अपनाने का तरीका खोजने के लिए देखा।

+4

उम्मीद है कि आप अपना सबक सीखें और संस्करण नियंत्रण प्रणाली का उपयोग शुरू करें! (गिट एक महान है) – Daenyth

उत्तर

48

अपनी स्क्रिप्ट संकलित करने के लिए उन्हें रक्षा नहीं करता shc का उपयोग करते हुए लिखा है है। आपको इस तरह से अधिक सुरक्षा नहीं मिलती है। Shc संकलित बाइनरी डिक्रिप्ट्स और स्क्रिप्ट शुरू होने पर स्क्रिप्ट को स्मृति में लोड करता है। तब आप बाइनरी शुरू करने के ठीक बाद, बस इसे segfault और coredump से अपनी स्क्रिप्ट पुनर्प्राप्त कर सकते हैं।

#! /bin/bash 
echo "starting script and doing stuff" 
sleep 1 
echo "finished doing stuff" 

shc के साथ संकलित करें:

shc -f test.sh 

पृष्ठभूमि प्रक्रिया के रूप में यह शुरू के बाद उसे तुरंत SEGFAULT:

./test.sh.x& (sleep 0.2 && kill -SIGSEGV $!) 

यह एक छोटा सा उदाहरण test.sh नामित स्क्रिप्ट है

नींद 0.2 मूल स्क्रिप्ट शुरू करने और डिक्रिप्ट करने के लिए बाइनरी पर्याप्त समय देगा। परिवर्तनीय $! आखिरी पृष्ठभूमि प्रक्रिया की पिड शुरू हुई है, इसलिए हम आसानी से सेगमेंटेशन गलती सिग्नल एसआईजीएसईजीवी (मार -11 $ के रूप में!) के साथ इसे आसानी से मार सकते हैं।

[1] + segmentation fault (core dumped) ./test.sh.x 

अब हम मूल स्क्रिप्ट के लिए डंप खोज सकते हैं:

cat core | strings 

हम पाइप तार करने के लिए डंपफाइल में डेटा है, जो तब हमें फ़ाइल में सभी मुद्रण योग्य पात्रों दिखाएगा और हम कर सकते हैं अब कचरा के बीच मूल स्क्रिप्ट देखें: स्क्रिप्ट बहुत बड़ी है

... 
4.0.37(2)-release 
BASH_VERSINFO 
BASH_VERSINFO 
release 
i686-pc-linux-gnu 
BASH_EXECUTION_STRING 
BASH_EXECUTION_STRING 
          #! /bin/bash 
echo "starting script and doing stuff" 
sleep 1 
echo "finished doing stuff" 
1000 
EUID 
EUID 
1000 
... 

हैं, तो हो सकता है आप ulimit साथ कोर फ़ाइल आकार को समायोजित करने के लिए है। बहुत आसान, है ना?

+0

अगर मैं कर सकता तो मैं इसे एक से अधिक बार वोट दूंगा। बहुत बढ़िया जवाब! –

1

बस एक अनुमान .. उदाहरण के लिए आप सिस्टम कॉल रिकॉर्ड कर सकते हैं उदाहरण के लिए स्ट्रेस या कुछ समान है और फिर कम से कम बुनियादी कार्यक्षमता को पुनर्स्थापित करने का प्रयास करें।

या, आप shc (http://www.datsi.fi.upm.es/~frosal/sources/shc.html) के लेखक से पूछ सकते हैं।

पुनश्च

अफवाह कि किसी deshc (http://www.linuxjournal.com/article/8256)

3

इसे आसान रखें! :)

shc उत्पन्न बाइनरी से वापस स्क्रिप्ट को पुनर्प्राप्त करने के लिए बस मूल sh सिस्टम निष्पादन योग्य की प्रतिलिपि सहेजें, फिर बिल्ली को निष्पादन योग्य नाम बदलें और shc जेनरेट बाइनरी चलाएं :) तो आप डिक्रिप्टेड स्रोत देखेंगे कंसोल में खोल स्क्रिप्ट।

+1

कृपया सिस्टम sh को बदलने के साथ सावधान रहें, बहुत कुछ गलत हो सकता है ... आप इसे क्रोट पर्यावरण में करना चाहते हैं –

+0

क्या आप इसे और अधिक विस्तृत कर सकते हैं – mebjas

-1

एसएनसी उपकरण के साथ एन्क्रिप्टेड * .sh.x एन्क्रिप्टेड फ़ाइल को पुनर्प्राप्त करने के लिए एक स्वचालित स्क्रिप्ट UnSHc github here पर जारी की गई है।

UnSHc किसी भी एसएचसी एन्क्रिप्टेड * .sh.x स्क्रिप्ट के एन्क्रिप्शन को उलट करने के लिए एक उपकरण है। यह स्वचालित रूप से इसे उलटकर * .sh.x में एम्बेड किए गए सभी क्रिप्टोग्राफिक डेटा के ऑटो-निष्कर्षण पर आधारित है। इन क्रिप्टोग्राफिक डेटा (एन्क्रिप्शन पर प्रयुक्त) के साथ, टूल सादे टेक्स्ट में आरंभिक * .sh फ़ाइल को पुन: उत्पन्न करता है।

UnSHc उपयोग कैसे करें:

[[email protected]:~/unshc]$ ./unshc.sh -h 
_ _  _____ _ _ 
| | | | /___| | | | 
| | | |_ __ \ `--.| |_| | ___ 
| | | | '_ \ `--. \ _ |/ __| 
| |_| | | | /\__//| | | (__ 
\___/|_| |_\____/\_| |_/\___| 

--- UnSHc - The shc decrypter. 
--- Version: 0.6 
------------------------------ 
UnSHc is used to decrypt script encrypted with SHc 
Original idea from Luiz Octavio Duarte (LOD) 
Updated and modernized by Yann CAM 
- SHc : [http://www.datsi.fi.upm.es/~frosal/] 
- UnSHc : [https://www.asafety.fr/unshc-the-shc-decrypter/] 
------------------------------ 

[*] Usage : ./unshc.sh [OPTIONS] <file.sh.x> 
     -h | --help       : print this help message 
     -a OFFSET | --arc4 OFFSET   : specify the arc4() offset arbitrarily (without 0x prefix) 
     -d DUMPFILE | --dumpfile DUMPFILE : provide an object dump file (objdump -D script.sh.x > DUMPFILE) 
     -s STRFILE | --stringfile STRFILE : provide a string dump file (objdump -s script.sh.x > STRFILE) 
     -o OUTFILE | --outputfile OUTFILE : indicate the output file name 

[*] e.g : 
     ./unshc.sh script.sh.x 
     ./unshc.sh script.sh.x -o script_decrypted.sh 
     ./unshc.sh script.sh.x -a 400f9b 
     ./unshc.sh script.sh.x -d /tmp/dumpfile -s /tmp/strfile 
     ./unshc.sh script.sh.x -a 400f9b -d /tmp/dumpfile -s /tmp/strfile -o script_decrypted.sh 

प्रदर्शन विडियो here देखा जा सकता है (में अंग्रेजी और फ्रेंच)।

+3

संभावित समाधान का एक लिंक हमेशा स्वागत है, लेकिन कृपया [संदर्भ जोड़ें लिंक के आस-पास] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं और-really-good-answers/8259#8259) तो आपके साथी उपयोगकर्ताओं के पास कुछ होगा विचार करें कि यह क्या है और यह क्यों है। यदि लक्षित साइट पहुंच योग्य नहीं है या स्थायी रूप से ऑफलाइन हो जाती है, तो हमेशा एक महत्वपूर्ण लिंक के सबसे प्रासंगिक भाग को उद्धृत करें। ध्यान दें कि * किसी बाहरी साइट के लिंक से शायद ही अधिक * होने का एक संभावित कारण है [क्यों और कैसे कुछ उत्तरों हटा दिए गए हैं?] (Http://stackoverflow.com/help/deleted-answers)। –

+0

यह मानते हुए कि यह केवल अंग्रेज़ी है, केवल फ्रेंच में उपलब्ध जानकारी का एक लिंक अनुचित लगता है। –

संबंधित मुद्दे