Dag 12

image

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

program.s8

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}