[BUUCTF] Reverse3
解压后的文件先查壳
显示没有加壳,并且这个是32位的程序
放入32位的IDApro中进行逆向
找到main函数,并F5查看伪代码
分析代码
程序首先让输入flag,放在str中
接着调用了函数sub_4110BE对刚输入的字符串进行了处理,并返回给V1
调用strncpy函数将v1复制给Dest字符串
用for循环对Dest进行处理
用for循环使Dest对应的字符加对应的数
将处理过的Dest字符串和str2字符串进行比较,若相同则之前输入的flag为正确的flag
解flag
和给的程序进行逆向
找到str2对应的是什么字符串
str2 = ‘e3nifIH9b_C@n@dH’
那么处理过的Dest=‘e3nifIH9b_C@n@dH’
用反向的for循环就能解出V1是多少
str = 'e3nifIH9b_C@n@dH'
dest = ''
for i in range(0,len(str)):
dest += chr(ord(str[i]) - i)
print(dest)
v1 = ‘e2lfbDB2ZV95b3V9’
这个V1是经过函数处理过后的,因此我们要找出这个函数干了什么
到了这里我就做不出来了,看不出来这个函数有什么作用,成功劝退
。。。
看了wp后才知道,原来这是base64加密,再进去后发现了很明显的特征。。
这是里面的数组
点开后发现
很明显的base64特征
于是在之前的代码里进行base64解密即可得出flag
str = 'e3nifIH9b_C@n@dH'
dest = ''
flag = ''
for i in range(0,len(str)):
dest += chr(ord(str[i]) - i)
print(dest)
import base64
flag = base64.b64decode(dest)
print(flag)
flag = {i_l0ve_you}