Dag 12
Tekst
Det rapporteres at SydpolarSikkerhetstjeneste (SPST) i starten av desember hadde publisert s8asm-kode fra sin GitHub-bruker. Dette ble raskt fjernet, men din kollega Tastefinger rakk å sikre kildekoden.
Vi stiller oss spørrende til hvordan de har fått tak i spesifikasjonen til dette språket. HR følger opp hvem som har sluttet ila det siste året, og hvorvidt noen av disse kan ha delt denne informasjonen til SPST.
I mellomtiden har jeg jobbet iherdig med å montere koden. Klarer du å forstå hva SPST vil med dette? Jeg ser frem til verdifull input fra deg!
Se vedlagt fil for den monterte koden. Tastefinger mente det var relevant å fortelle at du kan finne nyttige verktøy her.
📎 program.s8
Link i tekst: https://github.com/PSTNorge/slede8
Fil
Research
Etter endel roting rundt i javascript koden på siden, så finner man ut at kode strengen bak #‘en i url’en er lz-string base64 uri encodet.
Kode for å dekomprimere:
import lzstring
program = "N4Igzg9grgTgxgUwMIQCYJALhAZQKIAqBABDAIwA0xADAB5kA6AdgGo4DSAkgGInlXlm+IqWpUAbAE4h7AEqcWo5gAkA8gAV1NWgCYEzZgAsAtsczMAdABEAggRvaALI4p1xAVle0ECLwA4Adi8AI3F-MTpUSjpHXzoAQy9HRMiAMy9JVMtbe214iNp3VC8AnS94sro-AGYMuNpJTzoEJtpUAtQwhJSGnWy7BzoA+tS4ENq6auCQ9Lp3aO9phPqEYqrK+jG6HUcDJnUAGQBVHBxRAUYmDnlFGGoZG6Urwj4xbQDgh4UngiPZYjAAE9UAAHCAAGwQTGYhxOZzuFy+t3u0KuBA06j2QNBEKh5meInILiewj4ZE8pEuzG4nAAcrTiCZjMwABp4A4HPD-GBlUh9Al8Cl0KlMCDGADWADdVvjOfDqswDjYcHxdkw2RyuaRaqQ1YrOOw+QIFUwAEJqTTEMFgAAu4KgqAAllBmVc5N8YCbYadzqR3CoMcQxVLVntrXaHc6zEIXr6iTHCZRKf6mLJCH89swQBQQI6mCCoDasCAyKVJPFgnBqqkpn5JI5quJxMEdAF4qka3B5sEyKh2u1EHBm2RJJJgn50KkAtQ4JIdKgdO5hhUdH4fGQaj4PDsQABfIA"
x = lzstring.LZString()
test = x.decompressFromEncodedURIComponent(program)
print(test)
(“program” er bare ett eksempel her, ikke programmet vi faktisk må få til å kjøre)
Etter å ha begynt på å lage sin egen debugger/disassembler (kode her)
så kunne man kjøre s8 programmer lokalt. Det gjorde at man begynte å få en anelse om hva programmet holdt på med.
Jeg ble ikke ferdig med den før det kom ett hint inn i Snabel-A.
Hei,
Hvis du liker flatpakket bedre enn ferdigmontert så har jeg funnet frem kildekoden fra luke 12 til deg her!
SETT r5,0
SETT r6,1
SETT r10,0
SETT r11,1
SETT r12,0
FINN encflag
SETT r9,26
encloop:
LES r2
LAST r3
SETT r7,r5
PLUSS r7,r6
XELLER r2,r7
XELLER r2,r3
ELLER r12,r2
SETT r5,r6
SETT r6,r7
MINUS r9,r11
PLUSS r0,r11
ULIK r9,r10
BHOPP encloop
LIK r12,r10
BHOPP win
FINN fail_string
TUR print
STOPP
win:
FINN win_string
TUR print
STOPP
encflag:
.DATA 81, 81, 87, 126, 110, 100, 119, 18, 89, 56, 243, 138, 72, 61, 235, 83, 125, 33, 92, 175, 28, 174, 80, 37, 85, 63
win_string:
.DATA 75, 111, 114, 114, 101, 107, 116, 33, 0
fail_string:
.DATA 70, 101, 105, 108, 33, 0
; r1:r0 - null-terminert streng
print:
LAST r2
LIK r2,r10
BHOPP ferdig
SKRIV r2
PLUSS r0,r11
HOPP print
ferdig:
RETUR
Med hjelp av dette, samt det lille jeg hadde allerede skjønte ut fra min egen debugger, så klarte jeg endelig å løse oppgaven.
Det ble good old manual bruteforce.. Jeg så det var noen XELLER’er som sammen lignet lest føde og noe lastet.
Samt at det var noe annet kjekt på toppen, men fant til slutt ut at jeg kunne kjøre inn bare 00’er som føde.
Så steppet jeg gjennom koden når man var kommet til XELLER r2,r3
så kunne man da gjør denne XELLER’en og se hva input føden måtte være.
Hex føden som måtte til er: 5053547b666962306e616363315f306e6574316d335f7034647d
Flag
PST{fib0nacc1_0net1m3_p4d}