打开这道题,发现木有链接。终于出现了不一样的烟火??!
下载这个压缩包,打开这里面包含的文件,有一串php代码。
<?php
function encrypt($data,$key)
{
$key = md5('ISCC');
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) {
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) {
$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
}
return base64_encode($str);
}
?>
这是一个加密函数,最后得到的结果是base64加密的,这样一看,题目中出现的那串字符不就是base64加密的么。
fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=
所以flag就是解密后的data。【明确】
import base64
import hashlib
def decode(data):
#将key变成md5
key = hashlib.md5('ISCC'.encode("utf-8")).hexdigest()
int_data=[]
#将data解密
b64data = str(base64.b64decode(data), encoding = 'utf8')
#将data变成ascii码数字放进一个数组里面
for i in range(len(b64data)):
int_data.append(ord(b64data[i]))
# 将key变成ascii码数字放进一个数组里面,要注意和data的长度要一样,所以和加密的步骤一样
x = 0
int_key=[]
for i in range(len(b64data)):
if x == len(key):
x = 0
int_key.append(ord(key[x]))
x += 1
flag = ''
#反向操作
for i in range(len(int_data)):
flag += chr((int_data[i] - int_key[i]+128)% 128)
print(flag)
if __name__ == '__main__':
data = 'fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA='
decode(data)
需要注意chr()和ord()函数
>>>print chr(0x30), chr(0x31), chr(0x61) # 十六进制
0 1 a
>>> print chr(48), chr(49), chr(97) # 十进制
0 1 a
>>>ord('a')
97
>>> ord('b')
98
>>> ord('c')
99
运行之后
最后得到的flag是
Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}
来吧,关注我一下,大家一起学习网络安全,共同进步~~
更新频率挺高哦!!实打实原创!!