2013-07-19 5 views
6

मैं book [rus] पढ़ रहा था (मुझे खेद है, मुझे इस समय एक अंग्रेजी संस्करण नहीं मिल रहा है) क्रिस कास्पर्स्की द्वारा लिखित सॉफ्टवेयर सुरक्षा के सिद्धांतों और तकनीकों को समझाते हुए।किसी विशेष सुरक्षा अनुकूलन की व्याख्या की आवश्यकता है

पुस्तक में एक उदाहरण है। यह कहा गया है कि कोड:

if (! IsValidUser()) 
{ 
    Message("Invalid user! Abroting..."); 
    Abort; 
} 

पूरी तरह से असुरक्षित है क्योंकि यह इस में अनुवाद किया जा रहा है:

 CALL IsValidUser 
     OR AX,AX 
     JZ continue 
     ^^^^^^^^^^^^^ 
     PUSH offset str_invalid_user 
     CALL Message 
     CALL Abort 
continue:    ; normal program execution 
     ........... 

इस प्रकार कार्यक्रम एक disassembler में सिर्फ एक बाइट बदलकर काट दिया जा सकता है। अगर हम JZ continue से JMP continue बदलते हैं तो चेक सही तरीके से नहीं किया जाएगा।

फिर क्रिस लिखते हैं:

सी में कार्यक्रम का सही संस्करण है:

IsValidUser(); 
if (!true) 
{ 
    Message("Invalid user! Aborting..."); 
    Abort; 
} 

इस संस्करण {...} खंड एक नियंत्रण मिलता है कभी नहीं होगा।

मुझे वास्तव में यह नहीं पता कि सही संस्करण को कैसे काम करना है। वह if-statement का उपयोग क्यों करता है जिसे कभी भी निष्पादित नहीं किया जाएगा इस प्रकार एक कंपाइलर द्वारा भी हटाया जा सकता है?

क्या यह एक टाइपो या त्रुटि है? या मुझे कुछ नहीं मिल रहा है?

+2

या तो एक टाइपो होना है, या पुस्तक बेकार है क्योंकि यह * unoptimized * कोड के बारे में बात कर रही है। –

+1

@ कोडीग्रे यह मैं था जो यह समझने में असफल रहा कि 'प्रोग्राम का सही संस्करण' वास्तव में क्या है। असल में यह एक त्वरित उदाहरण था कि कैसे कुछ कोड सुरक्षित लगता है वास्तव में असुरक्षित हो सकता है। वैसे भी आपके प्रोग्राम को हैक किए जाने वाले संभावित तरीकों को जानना हमेशा उपयोगी होता है। – Kolyunya

+1

"ठीक" जैसा कि "पैच के बाद जिस तरह से दिखता है ... –

उत्तर

7

यह आपकी गलती है, क्रिस नहीं। यह "उपयोगकर्ता सत्यापन कोड के सुरक्षित संस्करण" नहीं है, लेकिन इस कोड है कि सुधार इस पुस्तक से एक हैकर में रूसी

उद्धरण द्वारा शुरू के बाद प्राप्त होता है: языке Си исправленная

На программа будет выглядеть так:

Google अनुवाद:

सी भाषा संशोधित (या समझौता) कार्यक्रम इस तरह दिखेगा:

+0

धन्यवाद। अब मुझे मिल गया है। क्रिस ने लिखा है कि सी में कार्यक्रम का सही संस्करण है: ... और मैंने शब्द को गलत व्याख्या किया। corrected' ...मुझे लगता था कि 'सही' का अर्थ है 'सुरक्षित'। – Kolyunya

+0

* संपादित नहीं किया गया * Google अनुवाद का उपयोग केवल खराब प्रोग्रामर के लिए अंतिम उपाय के रूप में किया जा सकता है। – SChepurin

+0

@SChepurin। तुम सही हो। मेरा लक्ष्य यह दिखाना था कि कोल्युन्य पुस्तक के पाठ को ध्यान से नहीं पढ़ता है। यह केवल उनके लिए रूसी में एक किताब से उद्धरण था। मैंने Google अनुवाद को राजनीतिक शुद्धता में जोड़ा। मुझे लगता है कि यह सवाल और उत्तर किसी के लिए दिलचस्प नहीं है, बल्कि केवल कोल्युन्या है। खराब गुणवत्ता अनुवादक Google के लिए खेद है। – SergV

1

लेखक सी कि बिना शर्त कूद (JMP continue) का प्रतिनिधित्व करते हैं में "बराबर" कोड की तरह दिखाने के लिए मूल पासवर्ड के चेक की जगह चाहता था JZ continue के साथ। आप सही हैं कि इस कोड (सी में) का कोई मतलब नहीं है लेकिन यह केवल यह है कि हैकर ने क्या किया है इसका वर्णन करना है।

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