查壳
发现是无壳的
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!}