[MRCTF2020]Xor
查壳,无壳
ida打开,找到关键字符串
通过交叉引用 来到sub_401090
试一试F5反汇编,报错了,而且不是sp错误
直接看汇编
首先我们看到 这里压入了byte_4212C0 和 %s
这个我们就知道 flag其实储存在byte_4212C0中
然后把byte_4212C0的地址赋值给edx,把edx+1给ecx
然后是一个循环,把edx处存的数据给al,让edx自增,让al自己逻辑与运算,当al是零的时候ZF标志位为1,不进行跳转,不是零继续自增。因为edx处存的是flag,当flag字符取完后,al就是零,往下执行,让edx减去ecx剩下的就是flag的长度,再做一个比较,可以知道flag长度是27
如果不是27,直接打印wrong
是27往下执行,这时候eax是0,异或完是0
然后让flag[eax]与eax异或,再与已知字符串比较,相等的话,让eax加一,重复异或和比较,直到eax等于edx,继续往下执行,打印right
这是已知的字符串
写脚本
str1 = 'MSAWB~FXZ:J:`tQJ"N@ bpdd}8g'
str2 = ''
for i in range(len(str1)):
str2 += chr(i ^ ord(str1[i]))
print(str2)
\\MRCTF{@_R3@1ly_E2_R3verse!}
[MRCTF2020]hello_world_go
查壳,无壳,64位elf文件
ida打开是go语言写的,shift+F12看字符串
ctrl+F搜索字符串,得到flag