Bugku刷题记录(五)

目录

把猪困在猪圈里

7+1+0

道友不来算一算凶吉?


把猪困在猪圈里

下载文件,观察末尾发现有=,猜测是base64,去解码,但解不出什么东西来,看了wp后知道是base64转图片得到猪圈密码:

最后解猪圈密码即可得到:flag{thisispigpassword} 

7+1+0

先进行base64解码,用在线工具解不出来,就换用 Converter工具:

偶数位能显示出来,奇数位却没有,猜测显示不出来的字符应该是在128位外的扩展字符,利用代码,base64解码后,试着把奇数位的字符减去128再打印看看:

import base64

s = '4nXna/V7t2LpdLI44mn0fQ=='
c = base64.b64decode(s)
print(c)

j = 0
for i in c:
    if j % 2 == 1:
        print(chr(i),end='')
    else:
        print(chr(i-128),end='')
    j += 1

道友不来算一算凶吉?

# -- coding:UTF-8 --
from secret import flag

def encrpyt5():
    enc=''
    for i in flag:
        enc+=chr((a*(ord(i)-97)+b)%26+97)
    return(enc)

def encrypt4():
    temp=''
    offset=5
    for i in range(len(enc)):
        temp+=chr(ord(enc[i])-offset-i)
    return(temp)


密文是易经有64卦,编码为 000000 -> 1111111 

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'}
l = []
k = 0  # 两个字符的标志位
for i in range(len(s)):
    if k == 1:
        k = 0
        continue
    try:
        l.append(dic[s[i]])
    except:
        l.append(dic[s[i] + s[i + 1]])
        k = 1

ss = ''.join(l)
#011000100011001001110100011010000110001101101101001101010110010101100010010101110011010101011000010110100101011101100100011011100101010100110010011010000110101101010101010001110100111001100111010100110110110000110101011000110101010101100111001111010011110100

接着二进制转字符串:

enc = ''
for i in range(0, len(ss), 8):
    enc += chr(eval('0b' + ss[i:i + 8]))

print(enc)
#b2thcm5ebW5XZWdnU2hkUGNgSl5cUg==

接着base64解码:

s = base64.b64decode(enc).decode()
print(s)
#okarn^mnWeggShdPc`J^\R

然后根据加密脚本4和5进行解密:

def encrypt4(enc):
    temp = ''
    offset = 5
    for i in range(len(enc)):
        temp += chr(ord(enc[i]) - offset - i)
    return (temp)

def decrypt4(enc):
    temp = ''
    offset = 5
    for i in range(len(enc)):
        temp += chr(ord(enc[i]) + offset + i)
    return (temp)

a, b = 5, 7

def encrpyt5(flag):
    enc = ''
    for i in flag:
        enc += chr((a * (ord(i) - 97) + b) % 26 + 97)
    return (enc)

def decrypt5(flag):
    enc = ''
    for i in flag:
        for k in range(20):
            if (ord(i) - 97 - b + 26 * k) % a == 0:
                enc += chr((ord(i) - 97 - b + 26 * k) // a + 97)
                break
    return (enc)

print(decrypt5(decrypt4(s)))
#shaodayouxiduoduyijing

思路代码参考:http://t.csdn.cn/yuu1k

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值