115 lines
5.8 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
# Vodič za dekompilaciju Wasm i kompilaciju Wat
U oblasti **WebAssembly**, alati za **dekompilaciju** i **kompilaciju** su neophodni za programere. Ovaj vodič uvodi neke online resurse i softver za rukovanje **Wasm (WebAssembly binarni)** i **Wat (WebAssembly tekst)** datotekama.
## Online alati
- Za **dekompilaciju** Wasm u Wat, alat dostupan na [Wabt's wasm2wat demo](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) je koristan.
- Za **kompilaciju** Wat nazad u Wasm, [Wabt's wat2wasm demo](https://webassembly.github.io/wabt/demo/wat2wasm/) služi toj svrsi.
- Druga opcija za dekompilaciju može se naći na [web-wasmdec](https://wwwg.github.io/web-wasmdec/).
## Softverska rešenja
- Za robusnije rešenje, [JEB by PNF Software](https://www.pnfsoftware.com/jeb/demo) nudi opsežne funkcije.
- Open-source projekat [wasmdec](https://github.com/wwwg/wasmdec) je takođe dostupan za zadatke dekompilacije.
# Resursi za dekompilaciju .Net
Dekompilacija .Net biblioteka može se ostvariti pomoću alata kao što su:
- [ILSpy](https://github.com/icsharpcode/ILSpy), koji takođe nudi [plugin za Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode), omogućavajući korišćenje na više platformi.
- Za zadatke koji uključuju **dekompilaciju**, **modifikaciju** i **rekompilaciju**, [dnSpy](https://github.com/0xd4d/dnSpy/releases) se toplo preporučuje. **Desni klik** na metodu i izbor **Modify Method** omogućava promene u kodu.
- [JetBrains' dotPeek](https://www.jetbrains.com/es-es/decompiler/) je još jedna alternativa za dekompilaciju .Net biblioteka.
## Unapređenje debagovanja i logovanja sa DNSpy
### DNSpy logovanje
Da biste logovali informacije u datoteku koristeći DNSpy, uključite sledeći .Net kod:
%%%cpp
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");
%%%
### DNSpy debagovanje
Za efikasno debagovanje sa DNSpy, preporučuje se niz koraka za podešavanje **atributa biblioteke** za debagovanje, osiguravajući da su optimizacije koje bi mogle ometati debagovanje onemogućene. Ovaj proces uključuje promenu `DebuggableAttribute` podešavanja, rekonstrukciju biblioteke i čuvanje izmena.
Pored toga, da biste debagovali .Net aplikaciju koju pokreće **IIS**, izvršavanje `iisreset /noforce` ponovo pokreće IIS. Da biste priključili DNSpy na IIS proces za debagovanje, vodič savetuje da izaberete **w3wp.exe** proces unutar DNSpy i započnete sesiju debagovanja.
Za sveobuhvatan pregled učitanih modula tokom debagovanja, preporučuje se pristup **Modules** prozoru u DNSpy, nakon čega se otvaraju svi moduli i sortiraju biblioteke radi lakše navigacije i debagovanja.
Ovaj vodič obuhvata suštinu WebAssembly i .Net dekompilacije, nudeći put za programere da lako navigiraju ovim zadacima.
## **Java dekompilator**
Za dekompilaciju Java bajtkoda, ovi alati mogu biti veoma korisni:
- [jadx](https://github.com/skylot/jadx)
- [JD-GUI](https://github.com/java-decompiler/jd-gui/releases)
## **Debagovanje DLL-ova**
### Korišćenje IDA
- **Rundll32** se učitava iz specifičnih putanja za 64-bitne i 32-bitne verzije.
- **Windbg** se bira kao debager sa opcijom da se pauzira pri učitavanju/izlazku biblioteke omogućenom.
- Parametri izvršenja uključuju putanju DLL-a i naziv funkcije. Ova postavka zaustavlja izvršenje pri svakom učitavanju DLL-a.
### Korišćenje x64dbg/x32dbg
- Slično IDA, **rundll32** se učitava sa izmenama komandne linije kako bi se odredili DLL i funkcija.
- Podešavanja se prilagođavaju da se prekine na ulazu DLL-a, omogućavajući postavljanje tačke prekida na željenoj tački ulaza DLL-a.
### Slike
- Tačke zaustavljanja izvršenja i konfiguracije su ilustrovane kroz snimke ekrana.
## **ARM & MIPS**
- Za emulaciju, [arm_now](https://github.com/nongiach/arm_now) je koristan resurs.
## **Shellcodes**
### Tehnike debagovanja
- **Blobrunner** i **jmp2it** su alati za alokaciju shellcode-a u memoriji i debagovanje sa Idom ili x64dbg.
- Blobrunner [izdanja](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)
- jmp2it [kompilovana verzija](https://github.com/adamkramer/jmp2it/releases/)
- **Cutter** nudi emulaciju i inspekciju shellcode-a zasnovanu na GUI-u, ističući razlike u rukovanju shellcode-om kao datotekom naspram direktnog shellcode-a.
### Deobfuskacija i analiza
- **scdbg** pruža uvide u funkcije shellcode-a i mogućnosti deobfuskacije.
%%%bash
scdbg.exe -f shellcode # Osnovne informacije
scdbg.exe -f shellcode -r # Izveštaj o analizi
scdbg.exe -f shellcode -i -r # Interaktivne petlje
scdbg.exe -f shellcode -d # Dump-ovanje dekodiranog shellcode-a
scdbg.exe -f shellcode /findsc # Pronađi start offset
scdbg.exe -f shellcode /foff 0x0000004D # Izvrši od offset-a
%%%
- **CyberChef** za disasembleranje shellcode-a: [CyberChef recept](https://gchq.github.io/CyberChef/#recipe=To_Hex%28'Space',0%29Disassemble_x86%28'32','Full%20x86%20architecture',16,0,true,true%29)
## **Movfuscator**
- Obfuskator koji zamenjuje sve instrukcije sa `mov`.
- Korisni resursi uključuju [YouTube objašnjenje](https://www.youtube.com/watch?v=2VF_wPkiBJY) i [PDF prezentacije](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf).
- **demovfuscator** može da obrne obfuskaciju movfuscatora, zahtevajući zavisnosti kao što su `libcapstone-dev` i `libz3-dev`, i instaliranje [keystone](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md).
## **Delphi**
- Za Delphi binarne datoteke, [IDR](https://github.com/crypto2011/IDR) se preporučuje.
# Kursevi
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) \(Binary deobfuscation\)
{{#include ../../banners/hacktricks-training.md}}