Reversing Tools & Basic Methods
Try Hard Security Group
ImGui आधारित Reversing टूल्स
सॉफ़्टवेयर:
ReverseKit: https://github.com/zer0condition/ReverseKit
Wasm डिकंपाइलर / Wat कंपाइलर
ऑनलाइन:
https://webassembly.github.io/wabt/demo/wasm2wat/index.html का उपयोग करें डिकंपाइल करने के लिए wasm (बाइनरी) से wat (स्पष्ट पाठ) तक
https://webassembly.github.io/wabt/demo/wat2wasm/ का उपयोग करें कंपाइल करने के लिए wat से wasm तक
आप https://wwwg.github.io/web-wasmdec/ का उपयोग भी कर सकते हैं डिकंपाइल करने के लिए
सॉफ़्टवेयर:
.NET डिकंपाइलर
dotPeek एक डिकंपाइलर है जो लाइब्रेरी (.dll), Windows मेटाडेटा फ़ाइलs (.winmd), और एक्जीक्यूटेबल्स (.exe) सहित कई प्रारूपों को डिकंपाइल और जांचता है। एक बार डिकंपाइल कर दिया जाए, एक असेम्बली को एक विजुअल स्टूडियो प्रोजेक्ट (.csproj) के रूप में सहेजा जा सकता है।
यहाँ महत्व है कि यदि किसी खो गए स्रोत कोड की पुनर्स्थापना एक पुराने असेम्बली से की जाती है, तो यह कार्रवाई समय बचा सकती है। इसके अतिरिक्त, dotPeek डिकंपाइल कोड के माध्यम से हाथ में उपयुक्त नेविगेशन प्रदान करता है, जिससे यह Xamarin एल्गोरिदम विश्लेषण के लिए सबसे उत्तम उपकरणों में से एक बन जाता है।
एक व्यापक एड-इन मॉडल और एपीआई के साथ जो आपकी विशेष आवश्यकताओं को पूरा करने के लिए उपकरण को विस्तारित करता है, .NET रिफ्लेक्टर समय बचाता है और विकास को सरल बनाता है। चलिए इस उपकरण द्वारा प्रदान की जाने वाली पूरी पलटाव की सेवाओं की ओर एक नज़र डालें:
एक पुस्तकालय या कॉम्पोनेंट के माध्यम से डेटा कैसे फ्लो करता है, इसका अंदाजा लगाता है
.NET भाषाओं और फ़्रेमवर्क के अंमलन और उपयोग का अंदाजा लगाता है
उपयोग किए जाने वाले एपीआई और प्रौद्योगिकियों से अधिक प्राप्त करने के लिए अनदोक्यूमेंटेड और अनएक्सपोज़्ड फ़ंक्शनैलिटी प्रदान करता है।
डिपेंडेंसीज़ और विभिन्न असेम्बलियों को खोजता है
आपके कोड, थर्ड-पार्टी कॉम्पोनेंट्स, और पुस्तकालयों में त्रुटियों के सटीक स्थान का पता लगाता है।
आपके साथ काम करने वाले सभी .NET कोड के स्रोत में डीबग करता है।
ILSpy plugin for Visual Studio Code: आप इसे किसी भी ओएस में रख सकते हैं (आप इसे वीएसकोड से सीधे इंस्टॉल कर सकते हैं, गिट को डाउनलोड करने की आवश्यकता नहीं है। एक्सटेंशन्स पर क्लिक करें और ILSpy खोजें)। यदि आपको डिकंपाइल, संशोधित और फिर से कंपाइल करने की आवश्यकता है तो आप dnSpy या इसके सक्रिय रूप से रखरखावित फोर्क, dnSpyEx का उपयोग कर सकते हैं। (राइट क्लिक -> फ़ंक्शन के भीतर कुछ बदलने के लिए मॉडिफाई मेथड).
DNSpy Logging
किसी **फ़ाइल में कुछ जानकारी लॉग करने के लिए DNSpy का उपयोग करने के लिए आप इस स्निपेट का उपयोग कर सकते हैं:
DNSpy डीबगिंग
कोड को DNSpy का उपयोग करके डीबग करने के लिए आपको करना होगा:
पहले, डीबगिंग से संबंधित असेंबली गुण बदलें:
बुनियादी उपकरण और विधियाँ
यह विषय रिवर्सिंग के बुनियादी उपकरण और विधियों पर है।
और कंपाइल पर क्लिक करें:
फिर नया फ़ाइल File >> Save module... के माध्यम से सहेजें:
यह आवश्यक है क्योंकि यदि आप ऐसा नहीं करते हैं, तो रनटाइम पर कई ऑप्टिमाइजेशन को कोड पर लागू किया जाएगा और यह संभावना है कि जब आप डीबगिंग कर रहे हों, तो ब्रेक-पॉइंट कभी हिट नहीं होता या कुछ वेरिएबल्स मौजूद नहीं होते हों।
फिर, यदि आपका .NET एप्लिकेशन IIS द्वारा चलाया जा रहा है तो आप इसे रीस्टार्ट कर सकते हैं:
फिर, डीबगिंग शुरू करने के लिए आपको सभी खुली फ़ाइलें बंद करनी चाहिए और डीबग टैब में जाकर प्रक्रिया में जुड़ने के लिए चुनें:
फिर w3wp.exe को चुनें ताकि IIS सर्वर से जुड़ सके और जुड़ें पर क्लिक करें:
अब जब हम प्रक्रिया को डीबग कर रहे हैं, तो समय है कि इसे रोकें और सभी मॉड्यूल लोड करें। पहले Debug >> Break All पर क्लिक करें और फिर Debug >> Windows >> Modules पर क्लिक करें:
मॉड्यूल पर किसी भी मॉड्यूल पर क्लिक करें और सभी मॉड्यूल खोलें का चयन करें:
असेम्बली एक्सप्लोरर में किसी भी मॉड्यूल पर दायाँ क्लिक करें और असेम्ब्लीज को क्रमित करें पर क्लिक करें:
जावा डीकंपाइलर
https://github.com/skylot/jadx https://github.com/java-decompiler/jd-gui/releases
DLLs की डीबगिंग
IDA का उपयोग
rundll32 लोड करें (64 बिट C:\Windows\System32\rundll32.exe और 32 बिट C:\Windows\SysWOW64\rundll32.exe में)
Windbg डीबगर का चयन करें
"लाइब्रेरी लोड/अनलोड पर सस्पेंड करें" का चयन करें
निष्पादन के पैरामीटर को कॉन्फ़िगर करें और DLL के पथ और वह फ़ंक्शन डालें जिसे आप कॉल करना चाहते हैं:
फिर, जब आप डीबगिंग शुरू करते हैं, हर DLL लोड होने पर निष्पादन रुक जाएगा, फिर, जब rundll32 आपके DLL को लोड करेगा, निष्पादन रुक जाएगा।
लेकिन, जिस DLL को लोड किया गया था, उसके कोड तक कैसे पहुंच सकते हैं? इस तरीके का उपयोग करके, मुझे नहीं पता कि यह कैसे किया जाए।
x64dbg/x32dbg का उपयोग
rundll32 लोड करें (64 बिट C:\Windows\System32\rundll32.exe और 32 बिट C:\Windows\SysWOW64\rundll32.exe में)
कमांड लाइन बदलें ( File --> Change Command Line ) और dll का पथ और वह फ़ंक्शन सेट करें जिसे आप कॉल करना चाहते हैं, उदाहरण के लिए: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\14.ridii_2.dll",DLLMain
Options --> Settings बदलें और "DLL Entry" का चयन करें।
फिर निष्पादन शुरू करें, डीबगर हर dll मेन में रुकेगा, किसी समय आपको अपने dll के dll Entry में रुकना होगा। वहां से, जहां आप ब्रेकपॉइंट लगाना चाहते हैं, वहां खोजें।
ध्यान दें कि जब विन64dbg में किसी कारण से निष्पादन होता है, तो आप देख सकते हैं कि आप किस कोड में हैं विन64dbg विंडो के शीर्ष में देख सकते हैं:
फिर, जब आप उस dll में निष्पादन हुआ है जिसे आप डीबग करना चाहते हैं, तो इसे देख सकते हैं।
scDbg के पास एक ग्राफिकल लॉन्चर भी है जहाँ आप चुन सकते हैं जो विकल्प आप चाहते हैं और शेलकोड को निष्पादित कर सकते हैं
डंप बनाएं विकल्प अगर किसी भी परिवर्तन किया जाता है शेलकोड को डायनामिक रूप से मेमोरी में (डिकोड शेलकोड डाउनलोड करने के लिए उपयोगी) तो अंतिम शेलकोड को डंप करेगा। स्टार्ट ऑफसेट एक विशेष ऑफसेट पर शेलकोड को शुरू करने के लिए उपयोगी हो सकता है। डीबग शेल विकल्प शेलकोड को scDbg टर्मिनल का उपयोग करके डीबग करने के लिए उपयोगी है (हालांकि मैं सोचता हूँ कि इस विषय में पहले विवरणित किए गए किसी भी विकल्प का उपयोग बेहतर होगा क्योंकि आप Ida या x64dbg का उपयोग कर सकेंगे)।
CyberChef का उपयोग करके डिसएसेम्बलिंग
अपनी शेलकोड फ़ाइल को इनपुट के रूप में अपलोड करें और इसे डिकॉम्पाइल करने के लिए निम्नलिखित रेसिपी का उपयोग करें: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)
यह ऑबफस्केटर सभी निर्देशिकाओं को mov
के लिए संशोधित करता है (हाँ, सचमुच कूल)। यह भी निर्वाहन फ्लो को बदलने के लिए बाधाएँ उपयोग करता है। इसके काम करने के बारे में अधिक जानकारी के लिए:
यदि आप भाग्यशाली हैं तो demovfuscator बाइनरी को डीऑफस्केट करेगा। इसमें कई आवश्यकताएँ हैं
और कीस्टोन इंस्टॉल करें (apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install
)
यदि आप CTF खेल रहे हैं, तो यह उपाय फ्लैग पाने के लिए बहुत उपयोगी हो सकता है: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
Rust
एंट्री पॉइंट खोजने के लिए ::main
जैसे फ़ंक्शन्स खोजें:
इस मामले में बाइनरी को एथेंटिकेटर कहा गया था, इसलिए यह काफी स्पष्ट है कि यह दिलचस्प मुख्य फ़ंक्शन है। फ़ंक्शन्स के नाम के पास होने पर, उन्हें इंटरनेट पर खोजें ताकि उनके इनपुट और आउटपुट के बारे में जान सकें।
Delphi
Delphi संकलित बाइनरी के लिए आप https://github.com/crypto2011/IDR का उपयोग कर सकते हैं।
यदि आपको एक Delphi बाइनरी को रिवर्स करना है तो मैं आपको यह सुझाव दूंगा कि आप IDA प्लगइन https://github.com/Coldzer0/IDA-For-Delphi का उपयोग करें।
बस ATL+f7 दबाएं (IDA में पायथन प्लगइन आयात करें) और पायथन प्लगइन का चयन करें।
यह प्लगइन बाइनरी को निष्पादित करेगा और डीबगिंग की शुरुआत में फ़ंक्शन नामों को गतिशील रूप से हल करेगा। डीबगिंग शुरू करने के बाद फिर से स्टार्ट बटन (हरा वाला या f9) दबाएं और एक ब्रेकपॉइंट वास्तविक कोड की शुरुआत में हिट करेगा।
यह भी बहुत दिलचस्प है क्योंकि यदि आप ग्राफ़िक एप्लिकेशन में एक बटन दबाते हैं तो डीबगर उस बटन द्वारा निष्पादित फ़ंक्शन में रुक जाएगा।
Golang
यदि आपको एक Golang बाइनरी को रिवर्स करना है तो मैं आपको IDA प्लगइन https://github.com/sibears/IDAGolangHelper का उपयोग करने की सलाह दूंगा।
बस ATL+f7 दबाएं (IDA में पायथन प्लगइन आयात करें) और पायथन प्लगइन का चयन करें।
इससे फ़ंक्शनों के नाम हल हो जाएंगे।
संकलित Python
इस पृष्ठ पर आप एक ELF/EXE Python संकलित बाइनरी से पायथन कोड कैसे प्राप्त करें इसे देख सकते हैं:
pageDecompile compiled python binaries (exe, elf) - Retreive from .pycGBA - गेम बॉडी एडवांस
यदि आपके पास एक GBA गेम का बाइनरी है तो आप उसे इम्युलेट और डीबग करने के लिए विभिन्न उपकरणों का उपयोग कर सकते हैं:
no$gba (डीबग संस्करण डाउनलोड करें) - एक डीबगर सहित
mgba - एक CLI डीबगर सहित
gba-ghidra-loader - गिडरा प्लगइन
GhidraGBA - गिडरा प्लगइन
no$gba में विकल्प --> इम्युलेशन सेटअप --> नियंत्रण** ** आप देख सकते हैं कि कैसे गेम बॉय एडवांस बटन्स दबाए जाते हैं
जब दबाया जाता है, प्रत्येक कुंजी का मूल्य उसे पहचानने के लिए होता है:
इस प्रकार के कार्यक्रम में, दिलचस्प हिस्सा कार्यक्रम उपयोगकर्ता इनपुट को कैसे व्यवहार करता है पर होगा। पते 0x4000130 पर आपको आमतौर पर पाए जाने वाले फ़ंक्शन मिलेगा: KEYINPUT।
पिछली छवि में आप देख सकते हैं कि फ़ंक्शन FUN_080015a8 से कॉल किया जाता है (पते: 0x080015fa और 0x080017ac)।
उस फ़ंक्शन में, कुछ आरंभिक ऑपरेशन के बाद (किसी भी महत्व के बिना):
यह कोड मिला है:
आखिरी if uVar4
की जांच कर रहा है कि क्या वह आखिरी कुंजी में है और वर्तमान कुंजी में नहीं है, जिसे छोड़ दिया जाता है (वर्तमान कुंजी uVar1
में संग्रहीत है)।
पिछले कोड में आप देख सकते हैं कि हम uVar1 (जहां दबाए गए बटन का मान है) को कुछ मानों के साथ तुलना कर रहे हैं:
पहले, इसे मान 4 (SELECT बटन) के साथ तुलना की जा रही है: इस चैलेंज में यह बटन स्क्रीन को साफ करता है
फिर, इसे मान 8 (START बटन) के साथ तुलना की जा रही है: इस चैलेंज में यह जांचता है कि क्या कोड झंडा प्राप्त करने के लिए वैध है।
इस मामले में वैर
DAT_030000d8
को 0xf3 के साथ तुलना की जा रही है और अगर मान समान है तो कुछ कोड कार्यान्वित होता है।किसी भी अन्य मामले में, कुछ cont (
DAT_030000d4
) की जांच की जाती है। यह एक cont है क्योंकि इसे कोड में प्रवेश करने के बाद 1 जोड़ दिया जाता है। अगर 8 से कम कुछ ऐसा है जिसमें मानों को जोड़ना शामिल है **DAT_030000d8
** (मुख्य रूप से इस चरण में दबाए गए कुंजियों के मानों को इस चरण में जोड़ता है जब तक cont 8 से कम है)।
तो, इस चैलेंज में, बटनों के मानों को जानकर, आपको 8 से छोटी लंबाई वाली एक संयोजन दबाना था जिसका परिणामस्वरूप जोड़ 0xf3 हो।
इस ट्यूटोरियल के लिए संदर्भ: https://exp.codes/Nostalgia/
गेम बॉय
कोर्सेस
https://github.com/malrev/ABD (बाइनरी डीओबफस्केशन)
ट्राई हार्ड सिक्योरिटी ग्रुप
Last updated