Skip to content

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

  1. Skoðaðu forritið: file, strings, checksec
  2. Baksmalaðu í Ghidra eða GDB
  3. Skildu reiknirit: Hvað gerir forritið við inntakið þitt?
  4. 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