当前位置: 代码迷 >> 综合 >> [BJDCTF2020]伏羲六十四卦
  详细解决方案

[BJDCTF2020]伏羲六十四卦

热度:25   发布时间:2024-01-30 23:41:49.0

question

在这里插入图片描述

encrypt

# -- coding:UTF-8 --
from secret import flagdef encrpyt5():enc=''for i in flag:enc+=chr((a*(ord(i)-97)+b)%26+97)return(enc)def encrypt4():temp=''offset=5for i in range(len(enc)):temp+=chr(ord(enc[i])-offset-i)return(temp)

decrypt

伏羲六十四卦
s='升随临损巽睽颐萃小过讼艮颐小过震蛊屯未济中孚艮困恒晋升损蛊萃蛊未济巽解艮贲未济观豫损蛊晋噬嗑晋旅解大畜困未济随蒙升解睽未济井困未济旅萃未济震蒙未济师涣归妹大有'
dic={'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}
li=[]
k=0
for i in range(len(s)):if k ==1:k=0continuetry:li.append(dic[s[i]])except:t=''t=t+s[i]+s[i+1]li.append(dic[t])k=1
ss=''.join(li)
print(ss)
enc=''
for i in range(0,len(ss),8):enc+=chr(eval('0b'+ss[i:i+8]))

得到

#bl1oXF1ra2FbW2VpV1dfUmBiT11dYE5NVVdXSUZYSFVDUA==
base64解码
#n]h\]kka[[eiWW_R`bO]]`NMUWWIFXHUCP
decrypt4
def decrypt4(enc):temp=''offset=5for i in range(len(enc)):temp+=chr(ord(enc[i])+offset+i)return temp
decrypt5
def decrypt5(flag):for a in range(1,200):enc = ''for i in flag:for k in range(200):if (ord(i) - 97 - 7+26*k)%a==0:enc+= chr((ord(i) - 97 - 7 + 26 * k) // a + 97)breakprint(enc)#暴力破解
flag

在这里插入图片描述

complete

第一行一定要注明编码

# -- coding:UTF-8 --
#有没有注释编码表明都要放在第一行.
'''from secret import flagdef encrpyt5():enc=''for i in flag:enc+=chr((a*(ord(i)-97)+b)%26+97)return(enc)def encrypt4():temp=''offset=5for i in range(len(enc)):temp+=chr(ord(enc[i])-offset-i)return(temp)'''def decrypt4(enc):temp=''offset=5for i in range(len(enc)):temp+=chr(ord(enc[i])+offset+i)return temp
def decrypt5(flag):for a in range(1,200):enc = ''for i in flag:for k in range(200):if (ord(i) - 97 - 7+26*k)%a==0:enc+= chr((ord(i) - 97 - 7 + 26 * k) // a + 97)breakprint(enc)s='升随临损巽睽颐萃小过讼艮颐小过震蛊屯未济中孚艮困恒晋升损蛊萃蛊未济巽解艮贲未济观豫损蛊晋噬嗑晋旅解大畜困未济随蒙升解睽未济井困未济旅萃未济震蒙未济师涣归妹大有'
dic={'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}
li=[]
k=0
for i in range(len(s)):if k ==1:k=0continuetry:li.append(dic[s[i]])except:t=''t=t+s[i]+s[i+1]li.append(dic[t])k=1
ss=''.join(li)
print(ss)
enc=''
for i in range(0,len(ss),8):enc+=chr(eval('0b'+ss[i:i+8]))
import base64
print(enc)
x=base64.b64decode(enc).decode()
print(x)
x=decrypt4(x)
x=decrypt5(x)