Kynning á Bakhönnun
Bakhönnun snýst um að reyna að skilja hvað forrit gerir án þess að hafa skýran frumkóða. Í CTF-keppnum muntu oftast lenda í þessum þremur tegundum:
- Þýdd tvíundaskrá (t.d. C/C++): við höfum ekkert nema vélarkóða og þurfum að nota baksmala eða bakþýðanda til að skilja hvað forritið gerir
- Compiled bytecode (t.d. Java, .NET): þýtt í bætakóða sem keyrir í sýndarvél. Auðveldara er að bakþýða en sérhæfða tvíundaskrá vegna þess að bætakóði geymir meiri upplýsingar um uppbyggingu kóðans.
- Obfuscated frumkóði (t.d. Python, JavaScript): við höfum kóðann en hann er vísvitandi gerður óskiljanlegur
Frumkóði (C) → Assembly → Machine code
↑
Við fáum þetta í [tvíundaskráar](../glossary.md#tviundaskra)-verkefnum
Markmið þitt er að komast að því hvað forritið tekur sem rétt inntak, hvort sem það er lykilorð, fáni, eða niðurstaða dulkóðunar.
Byrjunarráð
Þegar þú færð tvíundaskrá, byrjaðu alltaf á að keyra file og strings skipanirnar til að fá grunnupplýsingar um forritið.
Algengar aðgerðir sem þú munt sjá
| Aðgerð | Lýsing |
|---|---|
| XOR | Bitaaðgerð, mjög algeng í dulkóðun. Andhverfanleg: XOR aftur með sama lykli til að afkóða. |
| Samanburður | Forritið ber inntak þitt saman við rétt svar, oft með strcmp eða byte-fyrir-byte lykkju |
| Uppfletting í töflu | Hver stafur í inntakinu er notaður sem vísir í töflu til að fá út annan staf |
| Bitaflutningur | << og >> notaðir til að kóða gildi, oft í bland við XOR eða samlagningu |
Hvernig á að nálgast verkefni
- Skoðaðu forritið:
file,strings,checksec - Baksmalaðu í Ghidra eða GDB
- Skildu reiknirit: Hvað gerir forritið við inntakið þitt?
- Skrifaðu lausn: oft Python skriptu sem reiknar rétta svarið
Gagnleg veftól
- godbolt.org: Sýnir smalamáls úttak þegar þú skrifar C/C++ í vafranum.
- dogbolt.org: Ber saman úttak margra bakþýðenda (Ghidra, Binary Ninja, IDA) hlið við hlið.
Tengdir hlutar
- C forritunarmál: flest bakhönnunar verkefni eru þýdd úr C
- Assembly: þetta er málið sem þú lest þegar þú skoðar tvíundaskrá
- Kyrrstæð tól: Ghidra, strings, objdump
- Kvikt greiningartól: GDB, ltrace, strace