2017 EIS 高校运维赛-RE-ReverseMe

分析

打开题目尝试打开然后报错

以为是很麻烦的一件事,然后搜索这个报错,好像是QT框架相关的编译问题。MinGw有关。但是神奇的是可以在OD里动态调试。
先看IDA静态分析。

外面的逻辑很简单,输入一个长度大于19小于30的字符串,即可进入check部分。跟进查看

这样看懂,这题基本就解出来了。因为可以看出,参与异或的字符与我们的输入无关,所以直接使用动态调式将每次参与异或的值记录下来即可。参与cmp的值同理。
直接python脚本

def circular_shift_left (int_value,k=2,bit = 8):  #循环右移函数
 bit_string = '{:0%db}' % bit
 bin_value = bit_string.format(int_value) # 8 bit binary
 bin_value = bin_value[-k:] + bin_value[:-k]
 int_value = int(bin_value,2) 
 return int_value

a=[0x1A,0XA2,0X2F,0XF9,0X94,0X43,0X3C,0XC4,0X4D,0XD8,0X8C,0XC5,0X5B,0xb6,0x6e,0xea,0xa3,0x3c,0xc9,0x9b,0xbc,0xca,0xad,0xd7,0x7e]
b="F 87 62 14 01 C6 F0 21 30 11 50 D0 82 23 AE 23 EE A9 B4 52 78 57 0C 86 8B"
b=[int("0x"+b.split(' ')[i],16) for i in range(len(b.split(' ')))]
c=[chr(circular_shift_left(b[i]^a[i])%256) for i in range(len(b))]
flag=''.join(c)
print(flag)
#EIS{ea3y_r7Eve0rSe_r1ghT}

总结

该题是一个普通算法题,题目本身没有学到什么东西。题目之外学到的东西有关于Python脚本的一些书写。其中有关于join函数的使用,在列表里使用for循环快速创建列表等。其实今天做了两题这个,但是做的第一题太过于签到题,就没有记录。总体小进步吧

今日剩余计划:

  1. 学习课程知识
  2. pediy 18-10,关于堆溢出

明日计划

攻防世界下一题。

猜你喜欢

转载自blog.csdn.net/qq_38025365/article/details/89353385