निष्पादन योग्य वापस C स्रोत कोड में कनवर्ट करें


14

दुर्भाग्य से मैंने अपना सोर्स कोड खो दिया है और मेरे पास सिर्फ आउटपुट फाइल है जो linux में gcc के साथ बनाई गई है और मेरे पास अब अपने पीसी की कोई पहुंच नहीं है। आउटपुट फाइल को source file (linux के नीचे c) में बदलने का कोई तरीका है?


आप जो चाहते हैं, उसे डीकॉम्पिलेटर कहा जाता है। आपको इस उत्तर के साथ कुछ मदद मिल सकती है: stackoverflow.com/questions/193896/whats-a-good-c-decompiler
Eric Renouf

डिकम्पाइलर मॉड्यूल के साथ आईडीए प्रो एकमात्र व्यावहारिक समाधान है जो वास्तव में बड़े निष्पादकों के साथ काम करता है।
fpmurphy

@ fpmurphy1 आपको हॉपर मिला है, जो आईडीए प्रो की गुणवत्ता में तुलनीय है और कौन सा लाइसेंस कीमत का एक अंश है।
रुई एफ रिबेरो

@ fpmurphy1 मैं अभी तक अवास्ट द्वारा उत्पन्न कोड की गुणवत्ता को देखने में कामयाब नहीं हुआ ... जो इंटेल 32-बिट प्लेटफार्मों का अब और उपयोग करता है? इसके अलावा मैंने दशकों से विंटेल का इस्तेमाल नहीं किया है। देखें unix.stackexchange.com/questions/418354/… कीमत में अंतर हालांकि काफी महत्वपूर्ण है, लेकिन हेक्स-किरणें / आईडीए प्रो एक व्यक्तिगत लाइसेंस के लिए 1500USD से शुरू होता है, जो 5000USD या ऊपर AFAIK के लिए वाणिज्यिक लाइसेंस के लिए कुछ जबरन मूल्यों के लिए है, हॉपर 100USD है एक एकल उपयोगकर्ता के लिए, और एक कंप्यूटर के लिए 130।
रुई एफ रिबेरो

@RuiFRibeiro। बहुत सारे मालवेयर का एक नरक जिसकी मैं जांच करता हूं वह अभी भी 32-बिट है।
fpmurphy

जवाबों:


25

तो आपके पास एक गाय थी, लेकिन आपने अनजाने में इसे हैमबर्गर में बदल दिया, और अब आप अपनी गाय वापस चाहते हैं।

क्षमा करें, यह सिर्फ उस तरह से काम नहीं करता है।

बस अपने बैकअप से स्रोत फ़ाइल को पुनर्स्थापित करें।

आह, आपके पास बैकअप नहीं था। दुर्भाग्य से, ब्रह्मांड आपको इसके लिए अवकाश नहीं देता है।

आप बाइनरी को विघटित कर सकते हैं । वह आपको अपना स्रोत कोड नहीं देगा, लेकिन यह आपको उसी व्यवहार के साथ कुछ स्रोत कोड देगा। जब तक यह डिबग बाइनरी नहीं होता तब तक आपको चर नाम नहीं मिलेंगे। जब तक आप अनुकूलन के बिना संकलित नहीं हो जाते, आपको ठीक वही तर्क नहीं मिलेगा। जाहिर है, आपको टिप्पणियां नहीं मिलेंगी।

मैंने कुछ कार्यक्रमों को विघटित करने के लिए बूमरैंग का उपयोग किया है , और परिणाम मशीन कोड की तुलना में अधिक पठनीय था। मुझे नहीं पता कि यह सबसे अच्छा उपकरण है या नहीं। वैसे भी, चमत्कार की उम्मीद मत करो।


1
बुमेरांग बल्कि साफ दिखता है; शर्म करो प्रलेखन संदर्भ gcc -O4 के बाद से कि बिल्कुल कुछ भी नहीं (परे -O3) अगर स्मृति मुझे सही काम करता है। बेशक आपका आखिरी वाक्य आपके पहले पाँच वाक्यों के साथ-साथ बेहद वैध है। यह कहना बाकी सब वैध नहीं है, क्योंकि आप नियमित रूप से समर्थन के महत्व के बारे में बहुत मजबूत बिंदु बना रहे हैं। +1
पीरफ्तान

6

रिवर्स इंजीनियरिंग में कई उपकरण एक निष्पादन योग्य हैं।

  1. कमांड "फ़ाइल" जो पहले पैरामीटर के रूप में फ़ाइल पथ लेता है ताकि आप निर्धारित कर सकें (ज्यादातर मामलों में) आपके पास किस प्रकार का निष्पादन योग्य है।
  2. Disassemblers जो दिखाते हैं कि निष्पादन योग्य क्या करता है, लेकिन उन लोगों के लिए पढ़ना मुश्किल है जो उस विशिष्ट वास्तुकला पर असेंबली कोड नहीं लिखते हैं या डिससैम्पी के साथ अनुभव करते हैं।
  3. बूमरैंग, हेक्स-किरण, और स्नोमैन जैसे डेकोम्पाइलर कुछ अधिक पठनीयता प्रदान कर सकते हैं लेकिन वे वास्तविक चर नामों या मूल कार्यक्रम के सिंटैक्स को पुनर्प्राप्त नहीं करते हैं और वे 100% विश्वसनीय नहीं हैं, खासकर उन मामलों में जहां अभियंताओं ने निष्पादन के साथ परीक्षण किया। इन पैकेजों और आगे सुरक्षा को बाधित करने की कोशिश की।
  4. डेटा प्रवाह आरेख या टेबल। मैं इसे करने के लिए कोई मुफ्त टूल नहीं जानता, लेकिन असेंबली आउटपुट के टेक्स्ट पार्सर (जिसे sed या पर्ल में लिखा जा सकता है) के शीर्ष पर एक पायथन या बैश स्क्रिप्ट सहायक हो सकती है।
  5. पेंसिल और कागज, यह विश्वास करो या न करो, प्रवाह और विचारों के लिए।

ज्यादातर मामलों में मैंने देखा है, कोड को स्क्रैच से फिर से लिखने की जरूरत है, एक असेंबली भाषा प्रोग्राम के रूप में बनाए रखा गया है, या पुराने संस्करण में परिवर्तन अनुरोधों को फिर से लागू करके पुनर्गठित किया गया है।


1
# 1: सच है, हालांकि इसके दोष भी हैं। # 3: मुझे लगता है कि वे वाणिज्यिक हैं? मैं सिर्फ अकादमिक रूप से उत्सुक हूं (मेरे पास निरर्थक बैकअप हैं इसलिए उस प्रकार की कोई आवश्यकता नहीं है)। # 4: cflow (हालांकि जो स्रोत का उपयोग करता है वहां कुछ हैं जो बाइनरी पर काम करते हैं - निश्चित रूप से कुछ केट के साथ) दिमाग में आता है। वहाँ कुछ और हैं, जो आप के बाद पर निर्भर करता है। जैसा कि मुझे लगता है कि मैं उस प्रकार की चीज़ों के लिए ग्राफिकल आउटपुट की ज़रूरत नहीं है या आवश्यकता नहीं है (मैं इसे वास्तव में अधिक विचलित करूंगा)। # 5: बहुत सच है। आप यहां पाठ फ़ाइल का उपयोग भी कर सकते हैं, निश्चित रूप से।
प्रिएत्तन

3

आप जो करना चाहते हैं उसे "डिकंपाइलिंग" कहा जाता है। वहाँ कई डिकंपाइलर हैं और उन सभी को यहाँ कवर करना व्यावहारिक नहीं है।

हालांकि, एक सामान्य टिप्पणी के रूप में: सी स्रोत से निष्पादन योग्य मशीन कोड में रूपांतरण हानिपूर्ण है। उदाहरण के लिए:

  • टिप्पणियाँ अपरिवर्तनीय रूप से खो जाती हैं
  • चर नाम छूट गए
  • कभी-कभी लूप को प्रदर्शन के लिए अनियंत्रित किया जाता है
  • कार्यों को फिर से व्यवस्थित किया जा सकता है

कोड को लिखित रूप में संकलित किया जाना दुर्लभ है। इन दिनों अधिकांश कंपाइलर इसे अनुकूलित करने के लिए आपके कोड को काफी बदल देंगे। इसलिए जब आप विघटित हो जाते हैं, तो कंपाइलर केवल अनुमान लगा सकता है कि स्रोत कोड कैसा दिखता होगा, यह जानने का कोई तरीका नहीं है कि आपका कोड क्या था, क्योंकि वह चला गया है। यदि डिकंपाइलर अच्छा है, तो आपको प्राप्त कोड कम से कम एक समतुल्य निष्पादन योग्य में वापस संकलित किया जाएगा, और फिर आप इसे पठनीय बनाने के लिए धीरे-धीरे इसे फिर से शुरू करना शुरू कर सकते हैं। लेकिन सबसे अधिक संभावना है कि डीकॉम्पेलर बिल्कुल अपठनीय स्पेगेटी कोड का उत्पादन करेगा, और इसे समझने के लिए एक बड़ा सिरदर्द होगा। कभी-कभी, यह खरोंच से कार्यक्रम को फिर से लिखने के लिए कम काम हो सकता है ।


टिप्पणियों के विषय पर मैंने हाल ही में कुछ देखा है - और मुझे इस बारे में कोई जानकारी नहीं है कि क्या यह टिप्पणियों को एक डिकंपाइलर द्वारा पढ़ने की अनुमति देगा या न ही मुझे उम्मीद है कि डिकंपाइलर इस प्रकार की चीज़ की तलाश में भी होंगे - यह: -सी टिप्पणियों को मत भूलना। सभी टिप्पणियां आउटपुट फ़ाइल के माध्यम से पारित हो जाती हैं, संसाधित निर्देशों में टिप्पणियों को छोड़कर, जो निर्देश के साथ हटा दी जाती हैं। यह साइड-इफेक्ट्स के साथ-साथ -CC विकल्प पर भी प्रकाश डालता है (यह gcc के लिए है, हालांकि संभवतः cpp के बजाय)। ऐसा नहीं है कि मैं उम्मीद करता हूं कि यह ओपी पर लागू होगा, लेकिन शायद कुछ के लिए ब्याज की।
प्रिएत्तन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.