Rating:
[full writeup](https://ctf.harrisongreen.me/2019/x-mas-ctf/discount_vmprotect/)
Disassembled code:
program 1:
```
    __start:
[00] :: push(res[128])      | r
[02] :: strcpy
    __loop:
[03] :: dup                 | r r
[04] :: dup                 | r r r
[05] :: res[128] = pop()    | r r
[07] :: push(flag[pop()])   | r f[r]
[08] :: jz 0x12
[0A] :: push 0x1            | r 1
[0C] :: add                 | (r+1)
[0D] :: dup                 | (r+1) (r+1)
[0E] :: dup                 | (r+1) (r+1) (r+1)
[0F] :: sub                 | (r+1) (r+1)
[10] :: jz 0x3              | (r+1)
    __end_of_flag:
[12] :: push 0x23           | len 0x23
[14] :: sub                 | (len - 0x23)
[15] :: jz 0x1b
    __incorrect_length:
[17] :: push 0x0
[19] :: res[0] = pop()      | res[0] = 0
    __correct_length:
[1B] :: push 0x0
[1D] :: res[128] = pop()    | res[128] = 0
[1F] :: ret
```
program 2:
```
    __start:
[00] :: push(res[128])          | r
[02] :: dup                     | r r
[03] :: dup                     | r r r
[04] :: res[128] = pop()        | r r
[06] :: push(flag[pop()])       | r f[r]
[07] :: dup                     | r f[r] f[r]
[08] :: jz 0x28                 | r f[r]
    __flag_not_zero:
[0A] :: ror                     | r (f[r] >>> 1)
[0B] :: push 0x63               | r (f[r] >>> 1) 0x63
[0D] :: xor                     | r ((f[r] >>> 1)^0x63)
[0E] :: push 0x98               | r ((f[r] >>> 1)^0x63) 0x98
[10] :: add                     | r (((f[r] >>> 1)^0x63)+0x98)
[11] :: not                     | r ~(((f[r] >>> 1)^0x63)+0x98)
[12] :: dbg     
[13] :: push(res[128])          | r ~(((f[r] >>> 1)^0x63)+0x98) r
[15] :: push 0xa                | r ~((f[r] >>> 1)^0x63)+0x98) r 0xa
[17] :: add                     | r ~(((f[r] >>> 1)^0x63)+0x98) (r+0xa)
[18] :: get res[top]            | r ~(((f[r] >>> 1)^0x63)+0x98) res[(r+0xa)]
[19] :: sub
[1A] :: jz 0x20
    __incorrect_char
[1C] :: push 0x0
[1E] :: res[0] = pop()
    __correct_char
[20] :: push 0x1
[22] :: add
[23] :: dup
[24] :: dup
[25] :: xor
[26] :: jz 0x2
    __flag_zero:
[28] :: ret
```