5

लिस्टिंग 7.1 कास्केड वायरस की Decryptorएसपी (ढेर सूचक) विरोधी डिबग छल - 86

lea si, Start ; position to decrypt (dynamically set) 

mov  sp, 0682 ; length of encrypted body (1666 bytes) 

Decrypt: 
xor  [si],si ; decryption key/counter 1 
xor  [si],sp ; decryption key/counter 2 
inc  si ; increment one counter 
dec  sp ; decrement the other 
jnz  Decrypt ; loop until all bytes are decrypted 

Start: ; Encrypted/Decrypted Virus Body 

ध्यान दें कि यह decryptor antidebug सुविधाओं की है क्योंकि सपा (ढेर सूचक) रजिस्टर में से एक के रूप में प्रयोग किया जाता है डिक्रिप्शन कुंजी।

क्या कोई बता सकता है कि एसपी रजिस्टर का उपयोग क्यों एंटी-डीबग सुविधा की तरह काम कर रहा है? मुझे सही अगर मैं गलत हूँ, लेकिन मैं एक डिबगर चल बदल जाता ढेर लेआउट होने नहीं लगता कि ...

अग्रिम धन्यवाद

+0

संदिग्ध रूप से होमवर्क की तरह लगता है ... –

+0

महान सवाल! –

उत्तर

1

मेरे 86-फू जंग लगी है, लेकिन मैं सबसे ब्रेकप्वाइंट डिबगिंग को याद करने लगते हैं उपकरण सीपीयू में एक गलती ट्रिगर करके और पर्यवेक्षक प्रक्रिया के रूप में खुद को जोर देकर काम करते हैं - जो आपको एक नया ढेर, और एक संगत रूप से परिवर्तित स्टैक सूचक प्रदान करेगा। इस प्रकार, उस कोड के माध्यम से कदम उठाने से आपको sp का मूल्य मिलेगा जो कि उन प्रक्रियाओं से भिन्न होते हैं जो आमतौर पर प्रक्रिया को डीबगर द्वारा फंस नहीं पड़ती थीं।

0

अधिकांश डिबगर्स उम्मीद करते हैं कि [ई] एसपी मान्य हो और एक स्टैक क्षेत्र को इंगित करे। मुझे लगता है कि यह संभव है कि कुछ डीबगर्स क्रैश हो जाएं यदि एसपी वैध स्मृति को इंगित नहीं करता है, लेकिन मुझे किसी के बारे में पता नहीं है।

+1

परिभाषा के अनुसार, (ई) एसपी मान्य है। अधिकतर डिबगर्स यदि वे बुद्धिमान ढंग से डिज़ाइन किए गए हैं तो एप्लिकेशन प्रोग्राम द्वारा उपयोग की जाने वाली स्टैक स्पेस को ओवरराइज़ करने से बचने के लिए अपने * अपने * स्टैक क्षेत्र का उपयोग करें। मेरा जवाब देखें कि क्यों अपने स्वयं के ढेर का उपयोग इस डीबग को डीबग करने में सक्षम नहीं होगा। –

+0

आह, यह समझ में आता है। मैंने हस्तक्षेप करने वालों के बारे में नहीं सोचा था। –

2

यदि स्टैक सेगमेंट डेटा सेगमेंट के बराबर है (क्या यह .com या .exe वायरस है .com लगता है, क्योंकि डीएस पहले ही सीएस के बराबर है) तो स्टैक (डीबगर या यहां तक ​​कि इंटरप्ट) का कोई भी उपयोग संशोधित करेगा स्मृति जहां एसएस: [एसपी] इंगित कर रहा है, और यह वायरस बॉडी में कहीं भी इंगित करेगा (क्योंकि यह काउंटर के रूप में उपयोग किया जाता है)।

5

ब्रेकपॉइंट या इंटरप्ट लेने से "डेटा को स्टैक पर धक्का दें", जो उस क्षेत्र में डेटा बाइट को नुकसान पहुंचाएगा जो स्टैक पॉइंटर संदर्भों को नुकसान पहुंचाएगा। इस प्रकार, यदि आप डीबगर का उपयोग कर कोड में ब्रेकपॉइंट (आईएनटी एन) डालते हैं, तो डीबगिंग (ब्रेकपॉइंट का सामना करना) का आपका बहुत ही असर डेटा को नष्ट कर देगा जो यह कोड डिक्रिप्ट करने का प्रयास कर रहा है।

यदि कोई इंटरप्ट नहीं होता है तो यह कोड डॉस के तहत काम कर सकता है; शायद वे पहले इंटरप्ट को अक्षम कर सकते हैं। आप वास्तविक रूप से विंडोज या लिनक्स के तहत इसका उपयोग नहीं कर सकते (इसके 16 बिट कोड वैसे भी)।

+0

बस अपने उत्तर पर विस्तृत करने के लिए: "आईएनटी एन आम तौर पर एक दूर कॉल की तरह व्यवहार करता है सिवाय इसके कि झंडे रजिस्टर वापसी पते से पहले ढेर पर धकेल दिया जाता है। इंटरप्ट प्रक्रियाएं आईईआरटी निर्देश के माध्यम से लौटती हैं, जो झंडे को पॉप करती है और ढेर से पता वापस लौटाती है । " - http://pdos.csail.mit.edu/6.828/2008/readings/i386/INT.htm –

+0

यह पता चलता है कि यह चाल 32 बिट विंडोज़ पर ठीक है। – Joshua

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