查壳
发现是无壳的

IDA分析
查找字符串,找到这个Give Me Your Flag
通过交叉引用 来到sub_401090

然后 F5 发现报错了 不能F5,而且不是sp错误

那我们干脆直接看汇编
首先我们看到 这里压入了byte_4212C0 和 %s
这个我们就知道 flag其实储存在byte_4212C0中

然后我们看到 loc_4010B6 我们可以知道 edx 寄存器不断自增,最后退出循环,然后再与27 进行比较,这个时候我们就知道,flag的长度就为27
如果输入的长度 大于27 那么就提示错误

如果不小于 那么先与eax异或 然后 再与byte_41EA08进行比较

基本思路理清楚 我们就可以写脚本了
get flag
脚本
str1 = 'MSAWB~FXZ:J:`tQJ"N@ bpdd}8g'
str2 = ''
for i in range(len(str1)):
str2 += chr(i ^ ord(str1[i]))
print(str2)
flag
MRCTF{@_R3@1ly_E2_R3verse!}

本文解析了MRCTF2020比赛中的Xor查壳过程,详细介绍了IDA工具的使用,通过字符串搜索定位flag,理解了输入验证逻辑,最终编写脚本来获取flag。flag内容为MRCTF{@_R3@1ly_E2_R3verse!}
561

被折叠的 条评论
为什么被折叠?



