0x01.查看信息

image.png
获取信息:32位exe文件

0x02.IDA分析

用F12查看关键字符串,没有什么提示,直接分析主函数的逻辑
image.png
可以看到32行的sub_4011C0函数,这个函数返回的值如果是“1”,也就是true,我们输入的flag就是正确的flag,我们看sub_4011C0函数的伪代码。
image.png
这里i是从4开始即flag的第四位开始,对flag的操作分为了两部分:

  1. 第26行代码~第32行代码,将flag中的大写字母转小写,小写字母转大写。
  2. 第33行代码对每位字符进行异或操作。

第一步不必多说,第二步byte_4420B0数组从文件中提取出来
image.png
sub_4013C0(v8[i])函数为

image.png
因此我们只需要逆向操作还原flag即可

0x03.获取脚本

  1. num = [0x0D,0x13,0x17,0x11,0x02,0x01,0x20,0x1D,0x0C,0x02,0x19,0x2F,0x17,0x2B,
  2. 0x24,0x1F,0x1E,0x16,0x09,0x0F,0x15,0x27,0x13,0x26,0x0A,0x2F,0x1E,0x1A,
  3. 0x2D,0x0C,0x22,0x04]
  4. v4 = "GONDPHyGjPEKruv{{pj]X@rF"
  5. v8 = ""
  6. flag = ""
  7. for i in range(len(v4)):
  8. v8 += chr(((ord(v4[i])^num[i])-72)^0x55)
  9. for i in range(len(v4)):
  10. if ord(v8[i]) >= 97 and ord(v8[i]) <= 122:
  11. flag += chr(ord(v8[i])-32)
  12. elif ord(v8[i])>=65 and ord(v8[i])<=90:
  13. flag += chr(ord(v8[i])+32)
  14. else:
  15. flag +=v8[i]
  16. print('EIS{'+flag+'}')

image.png