[MRCTF2020]Xor
Start
查字符串:
反编译出问题,并且好像不是sp的问题:
直接看汇编图:
先看到第一个call sub_401050
,这里压入了一个byte_4212C0
和一个%s
,说明输入的flag
最终会存放到byte_4212C0
,继续往下看到loc_4010B6
这个段,关注edx
,edx
不断的在自增,最后出循环之后,与1Bh
进行比较,大概就可以猜测edx
存放的就是输入的flag
的长度。
不难猜测,如果最后edx
的值大于0x1b
,流程就会往右走,直接提示Wrong:
往下看到关键的比较:
byte_4212C0
前面说过了是存放flag
的地方,然后byte_41EA08
就是异或后的结果:
前面说过了,edx存放的是flag的长度,后面:
inc eax
cmp eax, edx
说明eax
也是一个计数器,并且同时作为异或的值与flag
的每一个字符进行异或,最终得到byte_41EA08
,根据此就可以写出exp了
exp.py
from binascii import *
flag = ''
flag += chr(0x4d ^ 0)
key = 'SAWB~FXZ:J:`tQJ"N@ bpdd}8g'
key = b2a_hex(key.encode()).decode()
for i in range(len(key)//2):
flag += chr(int(key[i*2:(i+1)*2],16)^(i+1))
print(flag)