2016-02-09 6 views
5

मैं हाल ही में एक असेंबली के पूरे लोड के माध्यम से अपना रास्ता बदल रहा हूं ताकि यह पता चल सके कि कोई प्रोग्राम कुछ डेटा को कैसे डिक्रिप्ट कर रहा है। अब तक मैंने पहचान की है कि चतुर्थ निकाला गया है, कि चौथाई 16 बाइट लंबा है और डिक्रिप्शन विधि सिफर ब्लॉक चेनिंग का उपयोग करती है। नतीजतन मेरा मानना ​​है कि उपयोग की जाने वाली एन्क्रिप्शन विधि एईएस-128-सीबीसी है।Obfuscated एईएस डिक्रिप्शन असेंबली

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

add.w  r0, r12, #0x13 
str.w  r0, [lr, #0x44] 
tst.w  r0, #0xff 
mov  r0, r12 
it   eq 
eoreq  r0, r12, #0x75 

add.w  r1, r12, #0x5d 
str.w  r1, [sp, #0xf00] 
tst.w  r1, #0xff 
it   eq 
addeq  r0, #0x3b 

r12 एन्क्रिप्टेड डेटा, एक तर्क (r0) में पारित से लोड होता है इस प्रकार है:

mov  r4, r0 
add.w  lr, sp, #0x1000 
ldrb.w  r12, [r4] 

सबरूटीन में विधानसभा की सभी आदर्श रूप से है, कुछ भरपाई, एन्क्रिप्टेड डाटा को जोड़ा गया संग्रहीत, 0xff (हमेशा0xff) और फिर कुछ Oper के खिलाफ परीक्षण किया जाता है परिणामस्वरूप एओयन का प्रदर्शन किया जाता है, या तो XOR, OR, ADD या MOV किसी अन्य रजिस्टर को प्रभावित करता है (उदाहरण में r0)।

क्या यह आपके लिए एईएस-128 दिखता है और क्या आप सहमत हैं कि एन्क्रिप्शन जानबूझकर कुंजी को छिपाने के लिए obfuscated किया गया है? यदि ऐसा है तो यह कैसे obfuscated किया गया है और कुंजी खोजना संभव होगा?

अतिरिक्त जानकारी

Here's a link ब्लॉक सिफर एन्क्रिप्शन सबरूटीन के लिए पूर्ण एएसएम फाइल करने के लिए।

और this is a link सीबीसी का उपयोग करने वाले उपराउटिन में और उपरोक्त उपरोक्त को मुख्य प्रश्न में संदर्भित करता है।

+1

मुझे लगता है कि [टैग: रिवर्स-इंजीनियरिंग] [टैग: सुरक्षा] से अधिक लागू होता है लेकिन इसे वापस करने में संकोच न करें। हालांकि, हमें वास्तव में वास्तुकला टैग की आवश्यकता है। पीएस: मैं आमतौर पर डाउनवोट करने के लिए जल्दी हूं लेकिन यह मुझे नहीं था;) – Jester

+0

@ जेस्टर मेरे लिए अच्छा लगता है। आपने अपना नाम साफ़ कर दिया है: पी अगर यह ऑफ-विषय/व्यापक है तो मैं हमेशा इसे रिवर्स इंजीनियरिंग या सुरक्षा एसई में ले जा सकता हूं। – Joshua

+0

मुझे समझ में नहीं आया कि आपने यह निष्कर्ष निकाला है कि यह सीबीसी-एईएस है, मान लें कि यह मामला है। लेकिन एईएस का पूरा बिंदु यह है कि विधि ज्ञात होने पर भी कुंजी को तोड़ा नहीं जा सकता है। एईएस को obfuscation की जरूरत नहीं है। –

उत्तर

0

यह जांचना बेहद आसान है कि एईएस का उपयोग किया जा रहा है या नहीं।
एईएस/रिजेंडेल जादुई स्थिरांक की एक बड़ी तालिका का उपयोग करता है।
उन जादू संख्याओं के बिना एईएस काम नहीं कर सकता है।
आप आसानी से इन संख्याओं को किसी भी संदर्भ कार्यान्वयन से प्राप्त कर सकते हैं; यदि आवश्यक हो तो बड़े/छोटे एंडियन की क्षतिपूर्ति करना याद रखें (मैं हमेशा दोनों प्रकारों की जांच करता हूं)।

इसके अलावा क्रिप्ट XOR शिक्षा का एक बहुत भारी उपयोगकर्ता है, यह or का उपयोग नहीं करता है और यह इसके उपयोग नहीं करता।

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

आप रजिस्टरों में संख्याओं को धारण करते समय ऐसा नहीं कर सकते हैं।

जो मैं देख सकता हूं उससे सिर्फ विधानसभा को देखकर यह एईएस जैसा नहीं दिखता है।

टेस्ट कोड की समीक्षा केवल
शायद एईएस के लिए सबसे अच्छा परीक्षण, केवल कोड देख का उपयोग कर एईएस, यह init_key के संदर्भ कार्यान्वयन के खिलाफ तुलना करने के लिए है।एईएस गुप्त कुंजी को प्रारंभ करने के लिए विशेष कोड का उपयोग करता है ताकि इसका उपयोग एल्गोरिदम द्वारा किया जा सके।

आप यहाँ एईएस संदर्भ स्रोत कोड पा सकते हैं: https://tls.mbed.org/aes-source-code
(या बस के बारे में कहीं भी इंटरनेट पर अगर आप सेल्सियस के लिए किसी अन्य भाषा पसंद करते हैं)।

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