Easy-one
开始时发现encrpto.c给了密钥,但是用它解密msg002.enc是乱码,并不能得到。发现文件里的两个文件,msg001 和msg001.enc得到密钥。
解密脚本如下:
# -*- coding: utf-8 -*-
# coding:unicode_escape
#import pandas as pd
#r=open("msg002.enc","r",encoding="unicode_escape")
#fr=r.read()
k= "Hi! This is only test message"
t=0
f=open("msg001.enc",'rb')
a=f.read()
#print(a)
s=(len(k))
ss=0
key=""
for ss in range(s):
i=a[ss]
for j in range(128):
h=(i-(j^t)-ss*ss)&0xff
if h==ord(k[ss]):
key=key+chr(j)
t=h
break
print(key)
得到密钥为VeryLongKeyYouWillNeverGuessV,把多输出的V去了,得到正确的解密密钥VeryLongKeyYouWillNeverGuess,解密脚本如下:
key1="VeryLongKeyYouWillNeverGuess"
ff=open("msg002.enc",'rb')
ff=ff.read()
q=0
t1=0
flag=""
for p in ff:
m=(p-(ord(key1[q%len(key1)])^t1)-q*q)&0xff
t1=m
q=q+1
flag=flag+chr(m)
print(flag)
这里用到了文件打开的知识
f=open("flag.enc",'rb')
一定得用单引号,不然没有效果,可以选择打开编码的方式
#r=open("msg002.enc",‘r’,encoding="unicode_escape")
这个是语言库,开始时默认打开文件时会报错,装了上面的库,但是并没有啥作用,仅仅能正常打开。
解密脚本的关键理解在于^0xff,也就是取二进制展开的后八位
a+b+c^0xff=d
那么
a=(d-b-c)^0xff
print((9+900+1000)&0xff)
print((117-900-1000)&0xff)