Skip to content

Reversinghard

Bytecode Peek

300 points · 0 solved

No source, just dis.dis() output (CPython 3.12) of a function that returns the flag.

  1           0 RESUME                   0

  2           2 LOAD_CONST               1 ((120, 120, 128, 103, 126, 121, 106, 104, 116, 105, 106, 100, 110, 120, 100, 119, 106, 102, 105, 102, 103, 113, 106, 130))
              4 STORE_FAST               0 (k)

  3           6 LOAD_CONST               2 ('')
              8 LOAD_ATTR                1 (NULL|self + join)
             28 LOAD_CONST               3 (<code object <genexpr> at 0x7f3a2c1b, file "vault.py", line 3>)
             30 MAKE_FUNCTION            0
             32 LOAD_FAST                0 (k)
             34 GET_ITER
             36 CALL                     0
             44 CALL                     1
             52 RETURN_VALUE

Disassembly of <code object <genexpr> at 0x7f3a2c1b, file "vault.py", line 3>:
  3           0 RETURN_GENERATOR
              2 POP_TOP
              4 RESUME                   0
              6 LOAD_FAST                0 (.0)
        >>    8 FOR_ITER                18 (to 48)
             12 STORE_FAST               1 (c)
             14 LOAD_GLOBAL              1 (NULL + chr)
             24 LOAD_FAST                1 (c)
             26 LOAD_CONST               0 (5)
             28 BINARY_OP               10 (-)
             32 CALL                     1
             40 YIELD_VALUE              1
             42 RESUME                   1
             44 POP_TOP
             46 JUMP_BACKWARD           20 (to 8)
        >>   48 END_FOR
             50 RETURN_CONST             1 (None)
        >>   52 CALL_INTRINSIC_1         3 (INTRINSIC_STOPITERATION_ERROR)
             54 RERAISE                  1
ExceptionTable:
  4 to 50 -> 52 [0] lasti

Hints0/2

Learn the technique/learn/reverse-engineering-fundamentals