Reversing Tools & Basic Methods
Try Hard Security Group
Alati za Reversing bazirani na ImGui-u
Softver:
ReverseKit: https://github.com/zer0condition/ReverseKit
Wasm dekompajler / Wat kompajler
Online:
Koristite https://webassembly.github.io/wabt/demo/wasm2wat/index.html za dekompajliranje iz wasm (binarno) u wat (čisti tekst)
Koristite https://webassembly.github.io/wabt/demo/wat2wasm/ za kompajliranje iz wat u wasm
takođe možete probati da koristite https://wwwg.github.io/web-wasmdec/ za dekompajliranje
Softver:
.NET dekompajler
dotPeek je dekompajler koji dekompajlira i analizira više formata, uključujući biblioteke (.dll), Windows metapodatke (.winmd) i izvršne datoteke (.exe). Nakon dekompajliranja, skup može biti sačuvan kao Visual Studio projekat (.csproj).
Prednost ovde je da ako izgubljeni izvorni kod zahteva obnovu iz zastarele skupštine, ovaj postupak može uštedeti vreme. Nadalje, dotPeek pruža korisnu navigaciju kroz dekompajlirani kod, čineći ga jednim od savršenih alata za Xamarin analizu algoritma.
Sa sveobuhvatnim modelom dodataka i API-jem koji proširuje alat da odgovara vašim tačnim potrebama, .NET Reflector štedi vreme i pojednostavljuje razvoj. Pogledajmo mnoštvo usluga za reverzno inženjerstvo koje ovaj alat pruža:
Pruža uvid u to kako podaci prolaze kroz biblioteku ili komponentu
Pruža uvid u implementaciju i upotrebu .NET jezika i okvira
Pronalazi nedokumentovanu i neizloženu funkcionalnost kako bi se dobilo više iz API-ja i tehnologija koje se koriste.
Pronalazi zavisnosti i različite skupove
Pronalazi tačnu lokaciju grešaka u vašem kodu, komponentama trećih strana i bibliotekama.
Debaguje izvor sveg .NET koda sa kojim radite.
ILSpy dodatak za Visual Studio Code: Možete ga imati na bilo kom OS-u (možete ga instalirati direktno iz VSCode-a, nije potrebno preuzimanje sa gita. Kliknite na Extensions i pretražite ILSpy). Ako trebate dekompajlirati, izmeniti i ponovo kompajlirati možete koristiti dnSpy ili aktivno održanu verziju, dnSpyEx. (Desni klik -> Izmeni metod da promenite nešto unutar funkcije).
DNSpy Logging
Da biste omogućili DNSpy-u da beleži neke informacije u datoteku, možete koristiti ovaj odlomak:
DNSpy Debugiranje
Da biste debagovali kod koristeći DNSpy, trebate:
Prvo, promenite Atribute skupštine koji se odnose na debugiranje:
Do:
I kliknite na compile:
Zatim sačuvajte novu datoteku preko File >> Save module...:
Ovo je neophodno jer ako to ne uradite, u runtime-u će biti primenjeno nekoliko optimizacija na kod i moguće je da prilikom debugiranja neće biti dostignuta tačka prekida ili neke promenljive neće postojati.
Zatim, ako se vaša .NET aplikacija pokreće putem IIS-a, možete je restartovati sa:
Zatim, kako biste započeli sa debagovanjem, trebalo bi da zatvorite sve otvorene datoteke i unutar Debug taba izaberete Attach to Process...:
Zatim izaberite w3wp.exe da se povežete sa IIS serverom i kliknite na attach:
Sada kada debagujemo proces, vreme je da ga zaustavimo i učitamo sve module. Prvo kliknite na Debug >> Break All a zatim kliknite na Debug >> Windows >> Modules:
Kliknite na bilo koji modul u Modules i izaberite Open All Modules:
Desni klik na bilo koji modul u Assembly Exploreru i kliknite na Sort Assemblies:
Java dekompajler
https://github.com/skylot/jadx https://github.com/java-decompiler/jd-gui/releases
Debagovanje DLL-ova
Korišćenje IDA
Učitajte rundll32 (64-bitni u C:\Windows\System32\rundll32.exe i 32-bitni u C:\Windows\SysWOW64\rundll32.exe)
Izaberite Windbg debager
Izaberite "Suspend on library load/unload"
Konfigurišite parametre izvršenja postavljajući putanju do DLL-a i funkciju koju želite pozvati:
Zatim, kada započnete sa debagovanjem, izvršenje će biti zaustavljeno kada se svaki DLL učita, zatim, kada rundll32 učita vaš DLL, izvršenje će biti zaustavljeno.
Ali, kako možete pristupiti kodu DLL-a koji je učitan? Korišćenjem ovog metoda, ne znam kako.
Korišćenje x64dbg/x32dbg
Učitajte rundll32 (64-bitni u C:\Windows\System32\rundll32.exe i 32-bitni u C:\Windows\SysWOW64\rundll32.exe)
Promenite Command Line ( File --> Change Command Line ) i postavite putanju do dll-a i funkciju koju želite pozvati, na primer: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\14.ridii_2.dll",DLLMain
Promenite Options --> Settings i izaberite "DLL Entry".
Zatim pokrenite izvršenje, debager će se zaustaviti na svakom dll main, u nekom trenutku ćete zastati u dll Entry vašeg dll-a. Odande, jednostavno tražite tačke gde želite postaviti prekid.
Primetite da kada je izvršenje zaustavljeno iz bilo kog razloga u win64dbg-u možete videti u kojem kodu se nalazite gledajući u vrhu prozora win64dbg:
Zatim, gledajući ovo, možete videti kada je izvršenje zaustavljeno u dll-u koji želite da debagujete.
GUI aplikacije / Video igre
Cheat Engine je koristan program za pronalaženje gde su važne vrednosti sačuvane unutar memorije pokrenute igre i njihovo menjanje. Više informacija u:
pageCheat EnginePiNCE je alat za obrnuti inženjering za GNU Project Debugger (GDB), fokusiran na igre. Međutim, može se koristiti za bilo kakve aktivnosti vezane za obrnuti inženjering
Decompiler Explorer je web interfejs za nekoliko dekompajlera. Ovaj web servis vam omogućava da uporedite izlaz različitih dekompajlera na malim izvršnim datotekama.
ARM & MIPS
Shellkodovi
Debagovanje shellkoda sa blobrunnerom
Blobrunner će dodeliti shellkod unutar prostora memorije, pokazati vam adresu memorije gde je shellkod dodeljen i zaustaviti izvršenje. Zatim, treba da povežete debager (Ida ili x64dbg) sa procesom i postavite prekid na označenu adresu memorije i nastavite izvršenje. Na ovaj način ćete debagovati shellkod.
Stranica sa izdanjima na githubu sadrži zipove sa kompilovanim izdanjima: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5 Možete pronaći malo izmenjenu verziju Blobrunnera na sledećem linku. Da biste je kompajlirali, jednostavno napravite C/C++ projekat u Visual Studio Code-u, kopirajte i nalepite kod i izgradite.
pageBlobrunnerDebagovanje shellkoda sa jmp2it
jmp2it je vrlo sličan blobrunneru. On će dodeliti shellkod unutar prostora memorije i pokrenuti večnu petlju. Zatim treba da povežete debager sa procesom, pokrenete, sačekate 2-5 sekundi i pritisnete stop i naći ćete se unutar večne petlje. Skočite na sledeću instrukciju večne petlje jer će biti poziv shellkodu, i na kraju ćete se naći kako izvršavate shellkod.
Možete preuzeti kompilovanu verziju jmp2it sa stranice sa izdanjima.
Debagovanje shellkoda korišćenjem Cuttera
Cutter je GUI za radare. Korišćenjem Cuttera možete emulirati shellkod i dinamički ga pregledati.
Imajte na umu da Cutter omogućava "Otvori datoteku" i "Otvori shellkod". U mom slučaju, kada sam otvorio shellkod kao datoteku, ispravno je dekompajliran, ali kada sam ga otvorio kao shellkod, nije:
Da biste započeli emulaciju na mestu gde želite, postavite prekidnu tačku tamo i izgleda da će Cutter automatski pokrenuti emulaciju od tamo:
Možete videti stek na primer unutar heksadecimalnog prikaza:
Dekodiranje shellkoda i dobijanje izvršenih funkcija
Treba da probate scdbg. Reći će vam stvari poput koje funkcije shellkod koristi i da li se shellkod dekodira u memoriji.
scDbg takođe ima grafički pokretač gde možete izabrati opcije koje želite i izvršiti shellcode
Opcija Create Dump će izbaciti konačni shellcode ako je bilo kakva promena urađena na shellcode-u dinamički u memoriji (korisno za preuzimanje dekodiranog shellcode-a). Start offset može biti koristan da se shellcode pokrene na određenom offsetu. Opcija Debug Shell je korisna za debugovanje shellcode-a koristeći scDbg terminal (međutim, smatram da su bilo koje od opcija objašnjenih ranije bolje za ovu svrhu jer ćete moći koristiti Ida ili x64dbg).
Disasembliranje korišćenjem CyberChefa
Otpremite svoj fajl sa shellcode-om kao ulaz i koristite sledeći recept za dekompilaciju: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)
Ovaj obfuscator modifikuje sve instrukcije za mov
(da, zaista kul). Takođe koristi prekide da promeni tok izvršavanja. Za više informacija o tome kako funkcioniše:
Ako imate sreće, demovfuscator će deobfuskovati binarni fajl. Ima nekoliko zavisnosti
I instaliraj keystone (apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install
)
Ako igrate CTF, ovaj trik za pronalaženje zastave može biti veoma koristan: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
Rust
Da biste pronašli ulaznu tačku, pretražite funkcije po ::main
kao u:
U ovom slučaju, binarni fajl se zvao authenticator, pa je prilično očigledno da je ovo interesantna glavna funkcija. Imajući ime funkcija koje se pozivaju, pretražite ih na Internetu da biste saznali o njihovim ulazima i izlazima.
Delphi
Za Delphi kompilovane binarne fajlove možete koristiti https://github.com/crypto2011/IDR
Ako morate da rešite Delphi binarni fajl, predlažem vam da koristite IDA dodatak https://github.com/Coldzer0/IDA-For-Delphi
Samo pritisnite ATL+f7 (uvoz python dodatka u IDA) i izaberite python dodatak.
Ovaj dodatak će izvršiti binarni fajl i dinamički rešiti imena funkcija na početku debagovanja. Nakon početka debagovanja ponovo pritisnite dugme Start (zelena strelica ili f9) i prekidna tačka će biti postavljena na početku stvarnog koda.
Takođe je veoma interesantno jer ako pritisnete dugme u grafičkoj aplikaciji, debager će se zaustaviti u funkciji koju izvršava to dugme.
Golang
Ako morate da rešite Golang binarni fajl, predlažem vam da koristite IDA dodatak https://github.com/sibears/IDAGolangHelper
Samo pritisnite ATL+f7 (uvoz python dodatka u IDA) i izaberite python dodatak.
Ovo će rešiti imena funkcija.
Kompajlirani Python
Na ovoj stranici možete pronaći kako da dobijete python kod iz ELF/EXE python kompilovanog binarnog fajla:
pageDecompile compiled python binaries (exe, elf) - Retreive from .pycGBA - Game Body Advance
Ako dobijete binarni fajl GBA igre, možete koristiti različite alate za emulaciju i debugovanje:
no$gba (Preuzmite debug verziju) - Sadrži debager sa interfejsom
mgba - Sadrži CLI debager
gba-ghidra-loader - Ghidra dodatak
GhidraGBA - Ghidra dodatak
U no$gba, u Options --> Emulation Setup --> Controls** ** možete videti kako da pritisnete Game Boy Advance dugmiće
Kada se pritisne, svaki taster ima vrednost koja ga identifikuje:
Dakle, u ovakvom programu, interesantan deo će biti kako program tretira korisnički unos. Na adresi 0x4000130 ćete pronaći često korišćenu funkciju: KEYINPUT.
Na prethodnoj slici možete videti da se funkcija poziva iz FUN_080015a8 (adrese: 0x080015fa i 0x080017ac).
U toj funkciji, nakon nekih inicijalnih operacija (bez ikakvog značaja):
Pronađen je ovaj kod:
Poslednji if proverava da li je uVar4
u poslednjim ključevima i nije trenutni ključ, takođe nazvan puštanje dugmeta (trenutni ključ je smešten u uVar1
).
U prethodnom kodu možete videti da upoređujemo uVar1 (mesto gde je vrednost pritisnutog dugmeta) sa nekim vrednostima:
Prvo se upoređuje sa vrednošću 4 (dugme SELECT): U izazovu ovo dugme čisti ekran
Zatim se upoređuje sa vrednošću 8 (dugme START): U izazovu se proverava da li je kod validan za dobijanje zastave.
U ovom slučaju se varijabla
DAT_030000d8
upoređuje sa 0xf3 i ako je vrednost ista, izvršava se određeni kod.U svim ostalim slučajevima se proverava neka kont (
DAT_030000d4
). To je kont jer se dodaje 1 odmah nakon unosa koda. Ako je manje od 8, nešto što uključuje dodavanje vrednosti uDAT_030000d8
se radi (u osnovi se dodaju vrednosti pritisnutih tastera u ovu promenljivu dok je kont manji od 8).
Dakle, u ovom izazovu, znajući vrednosti dugmadi, trebalo je pritisnuti kombinaciju sa dužinom manjom od 8 čije je rezultantno sabiranje 0xf3.
Reference za ovaj tutorijal: https://exp.codes/Nostalgia/
Game Boy
Kursevi
https://github.com/malrev/ABD (Deobfuskacija binarnog koda)
Try Hard Security Group
Last updated