
IDA 2016 प्लगइन प्रतियोगिता विजेता! प्रतीकात्मक निष्पादन बस एक क्लिक दूर!
पोन्से (उच्चारण [ 'poN θe ] पॉन-दे) एक IDA Pro प्लगइन है जो उपयोगकर्ताओं को बाइनरी पर आसान और सहज तरीके से टेंट विश्लेषण और सिंबॉलिक निष्पादन करने की क्षमता प्रदान करता है। पोन्से के साथ, आप अत्याधुनिक सिंबॉलिक निष्पादन की सारी शक्ति से एक क्लिक दूर हैं। पूरी तरह से C/C++ में लिखा गया।
सिंबॉलिक निष्पादन सुरक्षा समुदाय में कोई नई अवधारणा नहीं है। यह कई वर्षों से मौजूद है, लेकिन 2015 के आसपास ही Triton और Angr जैसी ओपन सोर्स परियोजनाएँ इस आवश्यकता को पूरा करने के लिए बनाई गईं। इन परियोजनाओं की उपलब्धता के बावजूद, अंतिम उपयोगकर्ताओं को अक्सर स्वयं विशिष्ट उपयोग के मामलों को लागू करना पड़ता है।
हमने पोन्से बनाकर इन आवश्यकताओं को संबोधित किया, जो एक IDA प्लगइन है जो रिवर्स इंजीनियरों के लिए सबसे अधिक उपयोग किए जाने वाले डिस्सेम्बलर/डीबगर में सिंबॉलिक निष्पादन और टेंट विश्लेषण लागू करता है।
पोन्से किसी भी IDA संस्करण >= 7.0 में x86 और x64 बाइनरी दोनों के साथ काम करता है। प्लगइन स्थापित करना उतना ही सरल है जितना कि नवीनतम बिल्ड से उपयुक्त फ़ाइलों को अपने IDA इंस्टॉलेशन डायरेक्टरी में plugins\ फ़ोल्डर में कॉपी करना।
सुनिश्चित करें कि आप अपने IDA संस्करण के लिए संकलित पोन्से बाइनरी का उपयोग कर रहे हैं ताकि कोई असंगति न हो।
पोन्से विंडोज, लिनक्स और OSX पर मूल रूप से काम करता है!
प्लगइन स्वचालित रूप से चलेगा, पहली बार चलने पर आपको प्रारंभिक कॉन्फ़िगरेशन के माध्यम से मार्गदर्शन करेगा। कॉन्फ़िगरेशन एक कॉन्फ़िगरेशन फ़ाइल में सहेजा जाएगा, इसलिए आपको कॉन्फ़िग विंडो के बारे में फिर से चिंता करने की आवश्यकता नहीं होगी।
निम्नलिखित gif में हम स्वचालित टेंटिंग का उपयोग देख सकते हैं और कैसे हम एक शर्त को नकार सकते हैं और इसे डीबगिंग के दौरान मेमोरी में इंजेक्ट कर सकते हैं:
argv को सिंबॉलिज़ करने का विकल्प सेट करते हैं।elite मिलती है जो मेमोरी में इंजेक्ट की गई है और इस प्रकार Win कोड तक पहुँचते हैं।क्रैकमी का स्रोत कोड यहाँ पाया जा सकता है।

इस उदाहरण में हम cmake के साथ टेंटिंग इंजन का उपयोग देख सकते हैं। हम:
fread() द्वारा फ़ाइल से पढ़े गए बफर को टेंट करते हैं।
अगले उदाहरण में हम स्नैपशॉट इंजन का उपयोग कर रहे हैं:
fread() द्वारा फ़ाइल से पढ़े गए बफर को टेंट करते हैं।
उदाहरण का स्रोत कोड यहाँ पाया जा सकता है।
इस अनुभाग में हम विभिन्न पोन्से विकल्पों के साथ-साथ कीबोर्ड शॉर्टकट सूचीबद्ध करेंगे:













पोन्से अर्थ, टेंट विश्लेषण और सिंबॉलिक निष्पादन प्रदान करने के लिए Triton फ्रेमवर्क पर निर्भर करता है। Triton एक शानदार ओपन सोर्स प्रोजेक्ट है जो Quarkslab द्वारा प्रायोजित है और मुख्य रूप से Jonathan Salwan द्वारा बनाए रखा जाता है, जिसमें एक समृद्ध लाइब्रेरी है। हम Jonathan के Triton के काम को धन्यवाद देना और समर्थन करना चाहते हैं। आप कमाल हैं! :)
पोन्से v0.3 से हमने बिल्ड संकलन प्रक्रिया को CMake का उपयोग करने के लिए स्थानांतरित कर दिया है। ऐसा करके हम लिनक्स, विंडोज और OSX के लिए कॉन्फ़िगरेशन और बिल्ड के तरीके को एकीकृत करते हैं। अब हम सिंबॉलिक या टेंट निर्देशों के बारे में स्यूडोकोड पर प्रतिक्रिया प्रदान करने का समर्थन करते हैं। इस सुविधा के काम करने के लिए आपको अपने IDA SDK इन्क्लूड फ़ोल्डर में hexrays.hpp जोड़ना होगा। hexrays.hpp आपके IDA इंस्टॉलेशन पथ पर plugins/hexrays_sdk/ में पाया जा सकता है। यदि आपने hex-rays decompiler नहीं खरीदा है, तब भी आप -DBUILD_HEXRAYS_SUPPORT=OFF का उपयोग करके Ponce का निर्माण कर सकते हैं। हम अपने CI वातावरण के रूप में Github actions का उपयोग करते हैं। यदि आप समझना चाहते हैं कि बिल्डिंग प्रक्रिया कैसे होती है, तो एक्शन फ़ाइलें देखें।
Juan Ponce de León (1474 – जुलाई 1521) एक स्पेनिश खोजकर्ता और विजेता थे। उन्होंने संयुक्त राज्य अमेरिका में फ्लोरिडा की खोज की। IDA प्लगइन आपको बाइनरी में विभिन्न पथों की खोज, अन्वेषण और उम्मीद है कि विजय प्राप्त करने में मदद करेगा।
हाँ, आप पोन्से का उपयोग विंडोज के लिए IDA में मूल रूप से कर सकते हैं या दूरस्थ रूप से लिनक्स या OS X मशीन से जुड़कर इसका उपयोग कर सकते हैं। अगले पोन्से संस्करण में हम लिनक्स और OS X IDA संस्करणों के लिए मूल रूप से पोन्से का समर्थन करेंगे।
हमारे परीक्षणों में हम प्रति सेकंड 3000 निर्देशों को संसाधित करने तक पहुँचते हैं। हम गति बढ़ाने के लिए IDA द्वारा प्रदान किए गए PIN ट्रेसर का उपयोग करने की योजना बना रहे हैं।
एक मुद्दा खोलें, हम इसे ASAP हल करेंगे ;)
ज़रूर! कृपया पुल रिक्वेस्ट करें और खुले मुद्दों पर काम करें। हम आपको मदद के लिए बीयर में भुगतान करेंगे ;)
कॉन्कॉलिक निष्पादन और पोन्से में कुछ समस्याएँ हैं:
सिंबॉलिक मेमोरी लोड/राइट: जब मेमोरी मान पढ़ने के लिए उपयोग किया जाने वाला इंडेक्स सिंबॉलिक होता है जैसे x = aray[symbolic_index], तो कुछ समस्याएँ उत्पन्न हो सकती हैं जो टेंट/सिंबॉलिज़्ड उपयोगकर्ता नियंत्रित इनपुट के ट्रैक के नुकसान का कारण बन सकती हैं।
Triton फ्लोटिंग पॉइंट निर्देशों के साथ बहुत अच्छी तरह से काम नहीं करता है।
कॉन्कॉलिक निष्पादन केवल निष्पादित निर्देशों का विश्लेषण करता है। इसका मतलब है कि सिंबॉलिक ट्रैकिंग निम्नलिखित जैसे मामलों में खो जाती है:
int check(char myinput) // Input is symbolic/tainted
{
int flag = 0;
if (myinput == 'A') //This condition is symbolic/tainted
flag = 1
else
flag =- 1;
return flag; // flag is not symbolic/tainted!
}