campctf2023-chall-tis256

Zachtronics TIS100-inspired reversing challenge for CampCTF 2023
git clone https://git.sinitax.com/sinitax/campctf2023-chall-tis256
Log | Files | Refs | Submodules | README | sfeed.txt

transform.py (1294B)


      1from tpu import *
      2import sys, string, random
      3
      4random.seed(133713371337)
      5
      6main = parse(open(sys.argv[1]).read())
      7
      8def isint(op):
      9    try:
     10        int(op, 0)
     11        return True
     12    except:
     13        return False
     14
     15main["stdin"] = [str(v).lower() for v in main["stdin"]]
     16main["stdout"] = [str(v).lower() for v in main["stdout"]]
     17
     18for _,ls in main["tpus"].items():
     19    labelmap = {}
     20    for li,l in enumerate(ls):
     21        l = l.split("#",1)[0].strip().lower()
     22        if ":" in l:
     23            name = l.strip().split(":")[0]
     24            labelmap[name] = "".join([random.choice(string.ascii_lowercase) for _ in range(8)])
     25        ls[li] = l
     26    while "" in ls:
     27        ls.remove("")
     28    for li,l in enumerate(ls):
     29        if l == "": continue
     30        ops = l.replace(",", " ").split()
     31        cmd = ops[0]
     32        if len(ops) > 1:
     33            nops = []
     34            for op in ops[1:]:
     35                if op in labelmap:
     36                    nops.append(labelmap[op])
     37                elif isint(op):
     38                    nops.append(hex(int(op,0)))
     39                else:
     40                    nops.append(op)
     41            ls[li] = "\t" + cmd + " " + ",".join(nops)
     42        elif ":" in cmd:
     43            ls[li] = labelmap[cmd[:-1]] + ":"
     44        else:
     45            ls[li] = "\t" + cmd
     46
     47
     48write(main, sys.argv[2])