mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-25 04:23:33 +00:00
388 lines
30 KiB
Markdown
388 lines
30 KiB
Markdown
|
# Reversing Tools & Basic Methods
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a> <strong>के साथ!</strong></summary>
|
||
|
|
||
|
HackTricks का समर्थन करने के अन्य तरीके:
|
||
|
|
||
|
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
|
||
|
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
||
|
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
|
||
|
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)\*\* पर फॉलो\*\* करें।
|
||
|
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
|
||
|
|
||
|
</details>
|
||
|
|
||
|
**Try Hard Security Group**
|
||
|
|
||
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/in/reversing/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||
|
|
||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||
|
|
||
|
***
|
||
|
|
||
|
## ImGui आधारित Reversing टूल्स
|
||
|
|
||
|
सॉफ़्टवेयर:
|
||
|
|
||
|
* ReverseKit: [https://github.com/zer0condition/ReverseKit](https://github.com/zer0condition/ReverseKit)
|
||
|
|
||
|
## Wasm डिकंपाइलर / Wat कंपाइलर
|
||
|
|
||
|
ऑनलाइन:
|
||
|
|
||
|
* [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) का उपयोग करें ताकि आप **wasm** (बाइनरी) से **wat** (स्पष्ट पाठ) में **डिकंपाइल** कर सकें
|
||
|
* [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) का उपयोग करें ताकि आप **wat** से **wasm** में **कंपाइल** कर सकें
|
||
|
* आप [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) का उपयोग भी कर सकते हैं डिकंपाइल करने के लिए
|
||
|
|
||
|
सॉफ़्टवेयर:
|
||
|
|
||
|
* [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
|
||
|
* [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
|
||
|
|
||
|
## .NET डिकंपाइलर
|
||
|
|
||
|
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||
|
|
||
|
dotPeek एक डिकंपाइलर है जो **पुस्तकालय** (.dll), **Windows मेटाडेटा फ़ाइल** (.winmd) और **एक्जीक्यूटेबल्स** (.exe) सहित कई प्रारूपों को **डिकंपाइल** और **जांचता है**। एक बार डिकंपाइल करने के बाद, एक असेम्बली को एक विजुअल स्टूडियो परियोजना (.csproj) के रूप में सहेजा जा सकता है।
|
||
|
|
||
|
यहाँ महत्व है कि यदि एक खो गई स्रोत कोड को पुरानी असेम्बली से पुनर्स्थापित करने की आवश्यकता होती है, तो यह कार्रवाई समय बचा सकती है। इसके अतिरिक्त, dotPeek डिकंपाइल कोड के माध्यम से हाथ में उपयुक्त नेविगेशन प्रदान करता है, जिससे यह **Xamarin एल्गोरिदम विश्लेषण** के लिए सबसे उत्तम टूलों में से एक बन जाता है।
|
||
|
|
||
|
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
|
||
|
|
||
|
एक व्यापक एड-इन मॉडल और एपीआई के साथ जो आपकी विशेष आवश्यकताओं को पूरा करने के लिए उपकरण को विस्तारित करता है, .NET रिफ्लेक्टर समय बचाता है और विकास को सरल बनाता है। चलिए इस उपकरण द्वारा प्रदान की जाने वाली पूरी पलटाव की सेवाओं की ओर एक नज़र डालते हैं:
|
||
|
|
||
|
* पुस्तकालय या कॉम्पोनेंट के माध्यम से डेटा कैसे फ्लो करता है का अंदाजा देता है
|
||
|
* .NET भाषाओं और फ़्रेमवर्क के अनुसरण और उपयोग का अंदाजा देता है
|
||
|
* उपयोग किए जाने वाले एपीआई और प्रौद्योगिकियों से अधिक प्राप्त करने के लिए अनदोक्यूमेंटेड और अनएक्सपोज़्ड फ़ंक्शनैलिटी खोजता है।
|
||
|
* विभिन्न एसेम्ब्लियों और विभिन्न एसेम्ब्लियों का पता लगाता है
|
||
|
* आपके कोड, थर्ड-पार्टी कॉम्पोनेंट्स और पुस्तकालयों में त्रुटियों के सटीक स्थान का पता लगाता है।
|
||
|
* आपके साथ काम करने वाले सभी .NET कोड के स्रोत में डीबग करता है।
|
||
|
|
||
|
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||
|
|
||
|
[ILSpy plugin for Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): आप इसे किसी भी ओएस में रख सकते हैं (आप इसे वीएसकोड से सीधे इंस्टॉल कर सकते हैं, गिट को डाउनलोड करने की आवश्यकता नहीं है। **एक्सटेंशन्स** पर क्लिक करें और **ILSpy** खोजें)।\
|
||
|
यदि आपको **डिकंपाइल**, **संशोधित** और फिर से **कंपाइल** करने की आवश्यकता है तो आप [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) या इसके सक्रिय रूप से रखरखावित फोर्क, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) का उपयोग कर सकते हैं। (**राइट क्लिक -> फ़ंक्शन के भीतर कुछ बदलने के लिए मॉडिफाई मेथड**).
|
||
|
|
||
|
### DNSpy Logging
|
||
|
|
||
|
**DNSpy में कुछ जानकारी एक फ़ाइल में लॉग करने** के लिए, आप इस स्निपेट का उपयोग कर सकते हैं:
|
||
|
|
||
|
```cs
|
||
|
using System.IO;
|
||
|
path = "C:\\inetpub\\temp\\MyTest2.txt";
|
||
|
File.AppendAllText(path, "Password: " + password + "\n");
|
||
|
```
|
||
|
|
||
|
### DNSpy डीबगिंग
|
||
|
|
||
|
कोड को DNSpy का उपयोग करके डीबग करने के लिए आपको करना होगा:
|
||
|
|
||
|
पहले, **डीबगिंग** से संबंधित **असेंबली गुण** बदलें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (278).png>)
|
||
|
|
||
|
```aspnet
|
||
|
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
|
||
|
```
|
||
|
|
||
|
To: के लिए:
|
||
|
|
||
|
```
|
||
|
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
|
||
|
DebuggableAttribute.DebuggingModes.DisableOptimizations |
|
||
|
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
|
||
|
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
|
||
|
```
|
||
|
|
||
|
और **कंपाइल** पर क्लिक करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (314) (1) (1).png>)
|
||
|
|
||
|
फिर नया फ़ाइल _**File >> Save module...**_ के माध्यम से सहेजें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (279).png>)
|
||
|
|
||
|
यह आवश्यक है क्योंकि यदि आप ऐसा नहीं करते हैं, तो **वर्तमान समय** पर कई **अनुकूलन** को कोड पर लागू किया जाएगा और यह संभावित है कि जब आप **डीबगिंग** कर रहे हों, तो किसी **ब्रेक-पॉइंट** पर कभी नहीं पहुंचा जाए या कुछ **चर** मौजूद न हों।
|
||
|
|
||
|
फिर, यदि आपका .NET एप्लिकेशन **IIS** द्वारा **चलाया** जा रहा है, तो आप इसे **पुनः आरंभ** कर सकते हैं:
|
||
|
|
||
|
```
|
||
|
iisreset /noforce
|
||
|
```
|
||
|
|
||
|
फिर, डीबगिंग शुरू करने के लिए आपको सभी खुली फ़ाइलें बंद करनी चाहिए और **Debug Tab** में जाकर **Attach to Process...** का चयन करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (280).png>)
|
||
|
|
||
|
फिर **w3wp.exe** का चयन करें ताकि **IIS सर्वर** से जुड़ सके और **attach** पर क्लिक करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (281).png>)
|
||
|
|
||
|
अब जब हम प्रक्रिया को डीबग कर रहे हैं, तो समय है कि इसे रोकें और सभी मॉड्यूल लोड करें। पहले _Debug >> Break All_ पर क्लिक करें और फिर _**Debug >> Windows >> Modules**_ पर क्लिक करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (286).png>)
|
||
|
|
||
|
![](<../../.gitbook/assets/image (283).png>)
|
||
|
|
||
|
**Modules** पर किसी भी मॉड्यूल पर क्लिक करें और **Open All Modules** का चयन करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (284).png>)
|
||
|
|
||
|
**Assembly Explorer** में किसी भी मॉड्यूल पर दायां क्लिक करें और **Sort Assemblies** पर क्लिक करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (285).png>)
|
||
|
|
||
|
## जावा डिकंपाइलर
|
||
|
|
||
|
[https://github.com/skylot/jadx](https://github.com/skylot/jadx)\
|
||
|
[https://github.com/java-decompiler/jd-gui/releases](https://github.com/java-decompiler/jd-gui/releases)
|
||
|
|
||
|
## DLLs की डीबगिंग
|
||
|
|
||
|
### IDA का उपयोग
|
||
|
|
||
|
* **rundll32 लोड करें** (64बिट C:\Windows\System32\rundll32.exe और 32 बिट C:\Windows\SysWOW64\rundll32.exe में)
|
||
|
* **Windbg** डीबगर का चयन करें
|
||
|
* "**Suspend on library load/unload**" का चयन करें
|
||
|
|
||
|
![](<../../.gitbook/assets/image (135).png>)
|
||
|
|
||
|
* निष्पादन के **पैरामीटर** को कॉन्फ़िगर करें और **DLL के पथ** और वह फ़ंक्शन डालें जिसे आप कॉल करना चाहते हैं:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (136).png>)
|
||
|
|
||
|
फिर, जब आप निष्पादन की डीबगिंग शुरू करते हैं, **हर DLL लोड होने पर निष्पादन रुक जाएगा**, फिर, जब rundll32 आपके DLL को लोड करेगा, निष्पादन रुक जाएगा।
|
||
|
|
||
|
लेकिन, जोड़े गए DLL के कोड तक कैसे पहुंचें? इस तरीके का उपयोग करके, मुझे नहीं पता कि कैसे।
|
||
|
|
||
|
### x64dbg/x32dbg का उपयोग
|
||
|
|
||
|
* **rundll32 लोड करें** (64बिट C:\Windows\System32\rundll32.exe और 32 बिट C:\Windows\SysWOW64\rundll32.exe में)
|
||
|
* **Command Line बदलें** ( _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 विंडो के **शीर्ष में** देख सकते हैं:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (137).png>)
|
||
|
|
||
|
फिर, जब आप उस dll में निष्पादन किया गया था, तो आप देख सकते हैं कि निष्पादन किस dll में हुआ था।
|
||
|
|
||
|
```bash
|
||
|
scdbg.exe -f shellcode # Get info
|
||
|
scdbg.exe -f shellcode -r #show analysis report at end of run
|
||
|
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
|
||
|
scdbg.exe -f shellcode -d #Dump decoded shellcode
|
||
|
scdbg.exe -f shellcode /findsc #Find offset where starts
|
||
|
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
|
||
|
```
|
||
|
|
||
|
scDbg के पास एक ग्राफिकल लॉन्चर भी है जहाँ आप चुनाव कर सकते हैं और शेलकोड को निष्पादित कर सकते हैं
|
||
|
|
||
|
![](<../../.gitbook/assets/image (398).png>)
|
||
|
|
||
|
**डंप बनाएं** विकल्प अंतिम शेलकोड को डंप करेगा अगर किसी भी परिवर्तन किया गया है शेलकोड को डायनामिक रूप से मेमोरी में (डिकोड शेलकोड डाउनलोड करने के लिए उपयोगी है)। **स्टार्ट ऑफसेट** एक विशिष्ट ऑफसेट पर शेलकोड को शुरू करने के लिए उपयोगी हो सकता है। **डीबग शेल** विकल्प शेलकोड को scDbg टर्मिनल का उपयोग करके डीबग करने के लिए उपयोगी है (हालांकि मैं इस विषय में पहले विवरणित किए गए किसी भी विकल्प को इस मामले के लिए बेहतर मानता हूँ क्योंकि आप Ida या x64dbg का उपयोग कर सकेंगे)।
|
||
|
|
||
|
### CyberChef का उपयोग करके डिसएसेंबलिंग
|
||
|
|
||
|
अपनी शेलकोड फ़ाइल को इनपुट के रूप में अपलोड करें और इसे डिकॉम्पाइल करने के लिए निम्नलिखित रेसिपी का उपयोग करें: [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
|
||
|
|
||
|
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
||
|
|
||
|
यह ऑबफस्केटर **सभी निर्देशिकाओं को `mov` के लिए संशोधित करता है** (हाँ, सचमुच कूल)। यह भी निष्पादन फ्लो को बदलने के लिए बाधाएँ उपयोग करता है। इसके काम करने के बारे में अधिक जानकारी के लिए:
|
||
|
|
||
|
* [https://www.youtube.com/watch?v=2VF\_wPkiBJY](https://www.youtube.com/watch?v=2VF\_wPkiBJY)
|
||
|
* [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf)
|
||
|
|
||
|
यदि आप भाग्यशाली हैं तो [demovfuscator](https://github.com/kirschju/demovfuscator) बाइनरी को डीऑफस्केट करेगा। इसमें कई आवश्यकताएँ हैं।
|
||
|
|
||
|
```
|
||
|
apt-get install libcapstone-dev
|
||
|
apt-get install libz3-dev
|
||
|
```
|
||
|
|
||
|
और [keystone को इंस्टॉल करें](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`)
|
||
|
|
||
|
यदि आप **CTF खेल रहे हैं, तो इस workaround का उपयोग करके फ्लैग को खोजना** बहुत उपयोगी हो सकता है: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||
|
|
||
|
## Rust
|
||
|
|
||
|
**एंट्री पॉइंट** खोजने के लिए `::main` जैसे फ़ंक्शन्स की खोज करें:
|
||
|
|
||
|
![](<../../.gitbook/assets/image (612).png>)
|
||
|
|
||
|
इस मामले में बाइनरी को एथेंटिकेटर कहा गया था, इसलिए यह काफी स्पष्ट है कि यह दिलचस्प मुख्य फ़ंक्शन है।\
|
||
|
**फ़ंक्शन्स** के **नाम** के पास होने पर, उन्हें **इंटरनेट** पर खोजें ताकि उनके **इनपुट** और **आउटपुट** के बारे में जान सकें।
|
||
|
|
||
|
## **Delphi**
|
||
|
|
||
|
Delphi संकलित बाइनरी के लिए आप [https://github.com/crypto2011/IDR](https://github.com/crypto2011/IDR) का उपयोग कर सकते हैं।
|
||
|
|
||
|
यदि आपको एक Delphi बाइनरी को रिवर्स करना हो, तो मैं आपको IDA प्लगइन [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi) का उपयोग करने की सलाह दूंगा।
|
||
|
|
||
|
बस **ATL+f7** (IDA में पायथन प्लगइन आयात करें) दबाएं और पायथन प्लगइन का चयन करें।
|
||
|
|
||
|
यह प्लगइन बाइनरी को निष्पादित करेगा और डीबगिंग की शुरुआत में फ़ंक्शन नामों को गतिशील रूप से हल करेगा। डीबगिंग शुरू करने के बाद फिर से स्टार्ट बटन (हरा वाला या f9) दबाएं और एक ब्रेकपॉइंट वास्तविक कोड की शुरुआत में हिट करेगा।
|
||
|
|
||
|
यह भी बहुत दिलचस्प है क्योंकि यदि आप ग्राफिक एप्लिकेशन में एक बटन दबाते हैं तो डीबगर उस बटन द्वारा निष्पादित फ़ंक्शन में रुक जाएगा।
|
||
|
|
||
|
## Golang
|
||
|
|
||
|
यदि आप एक Golang बाइनरी को रिवर्स करना हो, तो मैं आपको IDA प्लगइन [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper) का उपयोग करने की सलाह दूंगा।
|
||
|
|
||
|
बस **ATL+f7** (IDA में पायथन प्लगइन आयात करें) दबाएं और पायथन प्लगइन का चयन करें।
|
||
|
|
||
|
यह फ़ंक्शनों के नामों को हल करेगा।
|
||
|
|
||
|
## Compiled Python
|
||
|
|
||
|
इस पृष्ठ पर आप एक ELF/EXE python संकलित बाइनरी से पायथन कोड कैसे प्राप्त करें इसे देख सकते हैं:
|
||
|
|
||
|
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
|
||
|
[.pyc.md](../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
## GBA - Game Body Advance
|
||
|
|
||
|
यदि आपके पास एक GBA गेम का **बाइनरी** है तो आप उसे **एम्युलेट** और **डीबग** करने के लिए विभिन्न उपकरणों का उपयोग कर सकते हैं:
|
||
|
|
||
|
* [**no$gba**](https://problemkaputt.de/gba.htm) (_डीबग संस्करण डाउनलोड करें_) - इंटरफेस के साथ एक डीबगर शामिल है
|
||
|
* [**mgba** ](https://mgba.io)- एक CLI डीबगर शामिल है
|
||
|
* [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra प्लगइन
|
||
|
* [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra प्लगइन
|
||
|
|
||
|
[**no$gba**](https://problemkaputt.de/gba.htm) में, _**Options --> Emulation Setup --> Controls**_\*\* \*\* आप देख सकते हैं कि कैसे Game Boy Advance **buttons** दबाए जाते हैं
|
||
|
|
||
|
![](<../../.gitbook/assets/image (578).png>)
|
||
|
|
||
|
जब दबाए जाते हैं, हर **कुंजी का मूल्य** उसे पहचानने के लिए होता है:
|
||
|
|
||
|
```
|
||
|
A = 1
|
||
|
B = 2
|
||
|
SELECT = 4
|
||
|
START = 8
|
||
|
RIGHT = 16
|
||
|
LEFT = 32
|
||
|
UP = 64
|
||
|
DOWN = 128
|
||
|
R = 256
|
||
|
L = 256
|
||
|
```
|
||
|
|
||
|
इस प्रकार के कार्यक्रम में, दिलचस्प हिस्सा **कैसे प्रोग्राम उपयोगकर्ता इनपुट को व्यवस्थित करता है** यह होगा। पता **0x4000130** पर आपको आमतौर पर पाए जाने वाला फ़ंक्शन मिलेगा: **KEYINPUT**।
|
||
|
|
||
|
![](<../../.gitbook/assets/image (579).png>)
|
||
|
|
||
|
पिछली छवि में आप देख सकते हैं कि फ़ंक्शन को **FUN\_080015a8** से बुलाया गया है (पते: _0x080015fa_ और _0x080017ac_)।
|
||
|
|
||
|
उस फ़ंक्शन में, कुछ आरंभिक कार्य (किसी भी महत्व के बिना):
|
||
|
|
||
|
```c
|
||
|
void FUN_080015a8(void)
|
||
|
|
||
|
{
|
||
|
ushort uVar1;
|
||
|
undefined4 uVar2;
|
||
|
undefined4 uVar3;
|
||
|
ushort uVar4;
|
||
|
int iVar5;
|
||
|
ushort *puVar6;
|
||
|
undefined *local_2c;
|
||
|
|
||
|
DISPCNT = 0x1140;
|
||
|
FUN_08000a74();
|
||
|
FUN_08000ce4(1);
|
||
|
DISPCNT = 0x404;
|
||
|
FUN_08000dd0(&DAT_02009584,0x6000000,&DAT_030000dc);
|
||
|
FUN_08000354(&DAT_030000dc,0x3c);
|
||
|
uVar4 = DAT_030004d8;
|
||
|
```
|
||
|
|
||
|
यह कोड मिला है:
|
||
|
|
||
|
```c
|
||
|
do {
|
||
|
DAT_030004da = uVar4; //This is the last key pressed
|
||
|
DAT_030004d8 = KEYINPUT | 0xfc00;
|
||
|
puVar6 = &DAT_0200b03c;
|
||
|
uVar4 = DAT_030004d8;
|
||
|
do {
|
||
|
uVar2 = DAT_030004dc;
|
||
|
uVar1 = *puVar6;
|
||
|
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
|
||
|
```
|
||
|
|
||
|
आखिरी if **`uVar4`** की जांच कर रहा है कि यह **आखिरी कुंजी** में है और वर्तमान कुंजी में नहीं है, जिसे छोड़ दिया गया बटन कहा जाता है (वर्तमान कुंजी **`uVar1`** में संग्रहीत है)।
|
||
|
|
||
|
```c
|
||
|
if (uVar1 == 4) {
|
||
|
DAT_030000d4 = 0;
|
||
|
uVar3 = FUN_08001c24(DAT_030004dc);
|
||
|
FUN_08001868(uVar2,0,uVar3);
|
||
|
DAT_05000000 = 0x1483;
|
||
|
FUN_08001844(&DAT_0200ba18);
|
||
|
FUN_08001844(&DAT_0200ba20,&DAT_0200ba40);
|
||
|
DAT_030000d8 = 0;
|
||
|
uVar4 = DAT_030004d8;
|
||
|
}
|
||
|
else {
|
||
|
if (uVar1 == 8) {
|
||
|
if (DAT_030000d8 == 0xf3) {
|
||
|
DISPCNT = 0x404;
|
||
|
FUN_08000dd0(&DAT_02008aac,0x6000000,&DAT_030000dc);
|
||
|
FUN_08000354(&DAT_030000dc,0x3c);
|
||
|
uVar4 = DAT_030004d8;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if (DAT_030000d4 < 8) {
|
||
|
DAT_030000d4 = DAT_030000d4 + 1;
|
||
|
FUN_08000864();
|
||
|
if (uVar1 == 0x10) {
|
||
|
DAT_030000d8 = DAT_030000d8 + 0x3a;
|
||
|
```
|
||
|
|
||
|
पिछले कोड में आप देख सकते हैं कि हम **uVar1** (जहां **दबाए गए बटन का मान** है) को कुछ मानों के साथ तुलना कर रहे हैं:
|
||
|
|
||
|
* पहले, इसे **मान 4** (**SELECT** बटन) के साथ तुलना की गई है: इस चैलेंज में यह बटन स्क्रीन को साफ करता है
|
||
|
* फिर, इसे **मान 8** (**START** बटन) के साथ तुलना की गई है: इस चैलेंज में यह जांचता है कि क्या कोड फ्लैग प्राप्त करने के लिए वैध है।
|
||
|
* इस मामले में वेर **`DAT_030000d8`** को 0xf3 के साथ तुलना की गई है और अगर मान समान है तो कुछ कोड कार्यान्वित होता है।
|
||
|
* किसी भी अन्य मामलों में, कुछ cont (`DAT_030000d4`) की जांच की जाती है। यह एक cont है क्योंकि इसे कोड में प्रवेश करने के बाद एक जोड़ा जाता है।\
|
||
|
अगर 8 से कम कुछ है जो **जोड़ना** में शामिल है तो \*\*`DAT_030000d8` \*\* में मानों को जोड़ा जाता है (मूल रूप से इस वेरिएबल में दबाए गए कुंजियों के मानों को जोड़ता है जब तक cont 8 से कम है)।
|
||
|
|
||
|
तो, इस चैलेंज में, बटनों के मानों को जानकर, आपको **8 से छोटी लंबाई की एक कॉम्बिनेशन दबानी थी जिसका परिणामस्वरूप जोड़ 0xf3 होता है।**
|
||
|
|
||
|
**इस ट्यूटोरियल के लिए संदर्भ:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
|
||
|
|
||
|
## गेम बॉय
|
||
|
|
||
|
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
|
||
|
|
||
|
## कोर्सेस
|
||
|
|
||
|
* [https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering)
|
||
|
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (बाइनरी डीओबफस्केशन)
|
||
|
|
||
|
**ट्राई हार्ड सिक्योरिटी ग्रुप**
|
||
|
|
||
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/in/reversing/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||
|
|
||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> के साथ जीरो से हीरो तक AWS हैकिंग सीखें</summary>
|
||
|
|
||
|
हैकट्रिक्स का समर्थन करने के अन्य तरीके:
|
||
|
|
||
|
* यदि आप अपनी कंपनी की **विज्ञापनित करना चाहते हैं HackTricks** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
|
||
|
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
||
|
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
|
||
|
* **शामिल हों** 💬 [**डिस्कॉर्ड ग्रुप**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम ग्रुप**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)\*\* पर फॉलो\*\* करें।
|
||
|
* **हैकिंग ट्रिक्स साझा करें** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके।
|
||
|
|
||
|
</details>
|