debugging - क्या Windows.exe को "decompile" करना संभव है? या कम से कम विधानसभा देखें?




winapi assembly (10)

मेरे एक दोस्त ने फेसबुक से कुछ मैलवेयर डाउनलोड किए, और मैं यह जानकर उत्सुक हूं कि यह स्वयं को संक्रमित किए बिना क्या करता है। मुझे पता है कि आप वास्तव में एक .exe को संकुचित नहीं कर सकते हैं, लेकिन क्या मैं कम से कम इसे असेंबली में देख सकता हूं या डीबगर संलग्न कर सकता हूं?

यह कहने के लिए संपादित करें कि यह एक .NET निष्पादन योग्य नहीं है, कोई सीएलआई हेडर नहीं है।


psoul का उत्कृष्ट पोस्ट आपके प्रश्न का उत्तर देता है, इसलिए मैं अपने अच्छे काम को दोहराना नहीं चाहूंगा, लेकिन मुझे लगता है कि यह समझाने में मदद करेगा कि यह एक बार पूरी तरह मान्य क्यों है लेकिन यह भी मूर्खतापूर्ण सवाल है। आखिरकार, यह सीखने का एक स्थान है, है ना?

आधुनिक कंप्यूटर प्रोग्राम रूपांतरणों की एक श्रृंखला के माध्यम से उत्पादित होते हैं, जो टेक्स्ट निर्देशों के मानव-पठनीय निकाय (जिसे "स्रोत कोड" कहा जाता है) के इनपुट से शुरू होता है और निर्देशों के कंप्यूटर-पठनीय निकाय (जिसे वैकल्पिक रूप से "बाइनरी" या "मशीन कहा जाता है) के साथ समाप्त होता है। कोड ")।

जिस तरह से कंप्यूटर मशीन कोड निर्देशों का एक सेट चलाता है वह अंततः बहुत ही सरल है। प्रत्येक कार्यकर्ता एक प्रोसेसर ले सकता है (उदाहरण के लिए, स्मृति से पढ़ा, दो मान जोड़ें) को संख्यात्मक कोड द्वारा दर्शाया जाता है। अगर मैंने आपको बताया कि नंबर 1 का मतलब है चिल्लाती है और नंबर 2 का मतलब है, और फिर उन पर 1 या 2 के साथ कार्ड रखे जाते हैं, तो आप चिल्लाते हैं या तदनुसार चिल्लाते हैं, मैं अनिवार्य रूप से उसी कंप्यूटर का उपयोग कर रहा हूं जो कंप्यूटर उपयोग करता है संचालित करने के लिए।

एक बाइनरी फ़ाइल केवल उन कोडों का एक सेट होता है (आमतौर पर "ओप कोड" कहते हैं) और जानकारी ("तर्क") जो ओप कोड कार्य करती है।

अब, असेंबली भाषा एक कंप्यूटर भाषा है जहां भाषा में प्रत्येक कमांड शब्द प्रोसेसर पर बिल्कुल एक ओप-कोड का प्रतिनिधित्व करता है। एक असेंबली भाषा कमांड और प्रोसेसर ओप-कोड के बीच प्रत्यक्ष 1: 1 अनुवाद होता है। यही कारण है कि एक x386 प्रोसेसर के लिए कोडिंग असेंबली एआरएम प्रोसेसर के लिए कोडिंग असेंबली से अलग है।

डिस्सेप्लर बस यह है: एक प्रोग्राम बाइनरी (मशीन कोड) के माध्यम से पढ़ता है, ओप-कोड को उनके समकक्ष असेंबली भाषा कमांड के साथ बदलता है, और परिणाम को टेक्स्ट फ़ाइल के रूप में आउटपुट करता है। इसे समझना महत्वपूर्ण है; यदि आपका कंप्यूटर द्विआधारी पढ़ सकता है, तो आप अपने हाथ (ick) में या एक डिस्सेबलर के माध्यम से मैन्युअल रूप से ओप-कोड तालिका के साथ बाइनरी भी पढ़ सकते हैं।

Disassemblers के पास कुछ नई चालें हैं और सभी, लेकिन यह समझना महत्वपूर्ण है कि एक डिस्सेबलर आखिरकार एक खोज है और तंत्र को प्रतिस्थापित करता है। यही कारण है कि कोई ईयूएलए जो इसे मना करता है अंत में गर्म हवा उड़ रहा है। आप एक बार कंप्यूटर डेटा प्रोग्राम पढ़ने की अनुमति नहीं दे सकते हैं और प्रोग्राम डेटा को पढ़ने वाले कंप्यूटर को भी रोक सकते हैं।

(मुझे गलत मत समझो, ऐसा करने का प्रयास किया गया है। वे गीत फ़ाइलों पर डीआरएम के साथ-साथ काम करते हैं।)

हालांकि, disassembly दृष्टिकोण के लिए चेतावनी हैं। परिवर्तनीय नाम मौजूद नहीं हैं; ऐसी चीज आपके सीपीयू में मौजूद नहीं है। लाइब्रेरी कॉल नरक के रूप में उलझन में हैं और अक्सर आगे की बाइनरी को अलग करने की आवश्यकता होती है। और असेंबली कड़ी मेहनत के रूप में कठिन है।

अधिकांश पेशेवर प्रोग्रामर सिरदर्द के बिना असेंबली भाषा नहीं बैठ सकते हैं और पढ़ सकते हैं। एक शौकिया के लिए यह होने वाला नहीं है।

वैसे भी, यह कुछ हद तक चमकदार ओवर स्पष्टीकरण है, लेकिन मुझे उम्मीद है कि यह मदद करता है। हर कोई मेरे हिस्से पर किसी भी गलतफहमी को सही करने के लिए स्वतंत्र महसूस कर सकता है; इसे बीते एक अर्सा हो गया है। ;)


आप जो चाहते हैं वह एक प्रकार का सॉफ़्टवेयर है जिसे "डिस्सेबलर" कहा जाता है।

त्वरित Google यह पैदा करता है: http://www.geocities.com/~sangcho/disasm.html


आपको असेंबली में कुछ जानकारी मिल सकती है, लेकिन मुझे लगता है कि करने के लिए सबसे आसान काम वर्चुअल मशीन को आग लगाना है और देखें कि यह क्या करता है। सुनिश्चित करें कि आपके पास कोई खुला शेयर या ऐसा कुछ भी नहीं है जिससे वह कूद सके;)


एक डीबगर के साथ आप कार्यक्रम असेंबली के माध्यम से interactively कदम उठा सकते हैं।
एक डिस्सेबलर के साथ, आप प्रोग्राम असेंबली को अधिक विस्तार से देख सकते हैं।
एक डिकंपेलर के साथ, आप एक प्रोग्राम को आंशिक स्रोत कोड में बदल सकते हैं, यह मानते हुए कि आपको यह पता था कि यह क्या लिखा गया था (जिसे आप PEiD जैसे मुफ्त टूल के साथ ढूंढ सकते हैं - यदि प्रोग्राम पैक किया गया है, तो आपको इसे पहले अनपैक करना होगा या यदि आप कहीं भी पीईडी नहीं पा रहे हैं तो Detect-it-Easy । डीआईई में वर्तमान में जिथब पर एक मजबूत डेवलपर समुदाय है)।

डिबगर:

  • OllyDbg , मुफ़्त, एक बढ़िया 32-बिट डीबगर, जिसके लिए आप इसे अधिक उपयोगी बनाने के लिए कई उपयोगकर्ता द्वारा बनाए गए प्लगइन और स्क्रिप्ट ढूंढ सकते हैं।
  • WinDbg , मुफ़्त, माइक्रोसॉफ्ट द्वारा एक काफी सक्षम डीबगर। WinDbg विंडोज इंटर्नल्स को देखने के लिए विशेष रूप से उपयोगी है, क्योंकि यह अन्य डिबगर्स की तुलना में डेटा संरचनाओं के बारे में अधिक जानता है।
  • SoftICE , दोस्तों के लिए SoftICE । 2006 में वाणिज्यिक और विकास बंद हो गया। सॉफ़्टिस एक कट्टर उपकरण है जो ऑपरेटिंग सिस्टम के नीचे चलता है (और जब पूरे सिस्टम को लागू किया जाता है)। सॉफ़्टिस का उपयोग अभी भी कई पेशेवरों द्वारा किया जाता है, हालांकि कुछ हार्डवेयर (या सॉफ़्टवेयर - यानी यह Vista या NVIDIA gfx कार्ड पर काम नहीं करेगा) पर काम करना मुश्किल हो सकता है।

disassemblers:

  • आईडीए प्रो (वाणिज्यिक) - लाइन डिस्सेबलर / डीबगर का शीर्ष। अधिकांश पेशेवरों द्वारा उपयोग किया जाता है, जैसे कि मैलवेयर विश्लेषकों आदि। हालांकि कुछ रुपये की लागत है (वहां मुफ्त संस्करण मौजूद है, लेकिन यह काफी सीमित है)
  • W32Dasm (फ्री) - थोड़ा सा दिनांकित लेकिन काम पूरा हो जाता है। मेरा मानना ​​है कि W32Dasm इन दिनों त्याग दिया गया है, और कुछ उपयोगकर्ता द्वारा निर्मित हैक्स कुछ बहुत ही उपयोगी कार्यक्षमता जोड़ने के लिए हैं। आपको सर्वश्रेष्ठ संस्करण खोजने के लिए चारों ओर देखना होगा।

decompilers:

  • विजुअल बेसिक: वीबी डीकंपलर , वाणिज्यिक, कुछ हद तक पहचानने योग्य बाइटकोड उत्पन्न करता है।
  • डेल्फी: DeDe , फ्री, अच्छी गुणवत्ता वाले स्रोत कोड का उत्पादन करता है।
  • सी: HexRays , वाणिज्यिक, एक ही कंपनी द्वारा आईडीए प्रो के लिए एक प्लगइन। बहुत अच्छे परिणाम पैदा करता है लेकिन एक बड़ी हिरन खर्च करता है, और किसी को भी बेचा नहीं जाएगा (या तो मैं सुनता हूं)।
  • .NET (सी #): dotPeek , फ्री, डिकंपाइल .NET 1.0-4.5 असेंबली सी #। .dll, .exe, .zip, .vsix, .nupkg, और .winmd फ़ाइलों के लिए समर्थन।

कुछ संबंधित टूल्स जो आप जो भी कर रहे हैं, वे हो सकते हैं संसाधन संसाधन जैसे ResourceHacker (फ्री) और हेक्स वर्कशॉप (वाणिज्यिक) जैसे अच्छे हेक्स संपादक हैं।

इसके अतिरिक्त, यदि आप मैलवेयर विश्लेषण कर रहे हैं (या SICE का उपयोग करें) , तो मैं पूरी तरह से वर्चुअल मशीन, अर्थात् वीएमवेयर वर्कस्टेशन के अंदर सबकुछ चलाने का सुझाव देता हूं। एसआईसीई के मामले में, यह आपके वास्तविक सिस्टम को बीएसओडी से सुरक्षित रखेगा, और मैलवेयर के मामले में, यह आपके वास्तविक सिस्टम को लक्षित कार्यक्रम से सुरक्षित रखेगा। आप here वीएमवेयर के साथ मैलवेयर विश्लेषण के बारे में पढ़ सकते हैं।

व्यक्तिगत रूप से, मैं ओली, विन डीबीजी और डब्ल्यू 32 डीasm, और कुछ छोटे उपयोगिता उपकरण के साथ रोल करता हूं।

साथ ही, याद रखें कि अन्य लोगों के सॉफ़्टवेयर को अलग करना या डिबग करना आमतौर पर कम से कम ईयूएलए के खिलाफ है :)


खुशखबरी। आईडीए प्रो वास्तव में अपने पुराने संस्करणों के लिए वास्तव में मुफ्त है: http://www.hex-rays.com/idapro/idadownfreeware.htm


निश्चित रूप से, आईडीए प्रो पर एक नज़र डालें। वे एक eval संस्करण की पेशकश करते हैं ताकि आप इसे आजमा सकते हैं।


यदि आप प्रोग्राम को चलाने के लिए यह देखना चाहते हैं कि यह आपके कंप्यूटर को संक्रमित किए बिना क्या करता है, तो वर्चुअल मशीन जैसे वीएमवेयर या माइक्रोसॉफ्ट वीपीसी , या प्रोग्राम जो सैंडबॉक्सआईई जैसे प्रोग्राम को सैंडबॉक्स कर सकता है


यदि आप यह पता लगाने की कोशिश कर रहे हैं कि मैलवेयर क्या करता है, तो इसे मुफ्त टूल प्रोसेस मॉनिटर जैसे कुछ के तहत चलाने में बहुत आसान हो सकता है, जो फाइल सिस्टम, रजिस्ट्री, बंदरगाहों आदि तक पहुंचने का प्रयास करता है, जब भी रिपोर्ट करेगा ...

साथ ही, मुफ्त VMWare सर्वर जैसी वर्चुअल मशीन का उपयोग इस तरह के काम के लिए बहुत उपयोगी है। आप एक "साफ" छवि बना सकते हैं, और फिर जब भी आप मैलवेयर चलाते हैं तो उस पर वापस जाएं।


Boomerang भी जांच के लायक हो सकता है।






decompiling