Bugku--道友不来算一算凶吉?--WP

admin 2023年9月8日03:08:47评论51 views字数 2923阅读9分44秒阅读模式

打开txt查看

Bugku--道友不来算一算凶吉?--WP

然后打开py文件查看

Bugku--道友不来算一算凶吉?--WP

大概捋一下思路就是flag经过encrpyt5()函数得到enc,enc经过encrypt4()函数得到temp。

在txt里面有一个密文需要破解,根据提示,这应该和卦有关的加解密,一找就找到了相关的文章。写exp解卦。

import base64s = '升益艮归妹井萃旅离旅困未济屯未济中孚未济升困噬嗑鼎震巽噬嗑解节井萃离未济蒙归妹大畜无妄解兑临睽升睽未济无妄遁涣归妹'def defuxi64(str):    dic = {'乾': 'A', '坤': 'B', '屯': 'C', '蒙': 'D', '需': 'E', '讼': 'F', '师': 'G', '比': 'H', '小畜': 'I', '履': 'J',           '泰': 'K', '否': 'L', '同人': 'M', '大有': 'N', '谦': 'O', '豫': 'P', '随': 'Q', '蛊': 'R', '临': 'S', '观': 'T',           '噬嗑': 'U', '贲': 'V', '剥': 'W', '复': 'X', '无妄': 'Y', '大畜': 'Z', '颐': 'a', '大过': 'b', '坎': 'c', '离': 'd',           '咸': 'e', '恒': 'f', '遁': 'g', '大壮': 'h', '晋': 'i', '明夷': 'j', '家人': 'k', '睽': 'l', '蹇': 'm', '解': 'n',           '损': 'o', '益': 'p', '夬': 'q', '姤': 'r', '萃': 's', '升': 't', '困': 'u', '井': 'v', '革': 'w', '鼎': 'x', '震': 'y',           '艮': 'z', '渐': '1', '归妹': '2', '丰': '3', '旅': '4', '巽': '5', '兑': '6', '涣': '7', '节': '8', '中孚': '9',           '小过': '0', '既济': '+', '未济': '/'}    b64text = ''    i = 0    while i < len(str):        x = str[i]        if x not in dic:            i += 1            x += str[i]        if x not in dic:            print("解密失败,密文错误")            exit(1)        b64text += dic[x]        i += 1    print(b64text)    return base64.b64decode(b64text+'='*(len(b64text)%4))if __name__ == '__main__':    print(defuxi64(s))

#b'xb6x9cxf6xbexcex1dxe2xefxc2xffxdfxedxb9Lrxe5Ixfcxbexc7x7fx0ffXx9fxa4xa5xb6_xd8x83xbd'

但是发现解出来的有问题,根据加密算法,这里的解应该是可正常的字符才对,所以需要找到问题出在哪里。接着上网找资源,发现一篇卦顺序图,里面有一张图:

Bugku--道友不来算一算凶吉?--WP


闭合为1,断开为0,那么它们就可以转换为6bit的二进制数。再根据上面的exp思路(其实就是base64的换表),重新制作替换表

首先替换为二进制

'坤': '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'

再根据顺序替换为base表

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

'坤': 'A', '剥': 'B', '比': 'C', '观': 'D', '豫': 'E', '晋': 'F', '萃': 'G', '否': 'H', '谦': 'I', '艮': 'J', '蹇': 'K',

'渐': 'L', '小过': 'M', '旅': 'N', '咸': 'O', '遁': 'P', '师': 'Q', '蒙': 'R', '坎': 'S', '涣': 'T', '解': 'U',
'未济': 'V', '困': 'W', '讼': 'X', '升': 'Y', '蛊': 'Z', '井': 'a', '巽': 'b', '恒': 'c', '鼎': 'd', '大过': 'e',
'姤': 'f', '复': 'g', '颐': 'h', '屯': 'i', '益': 'j', '震': 'k', '噬嗑': 'l', '随': 'm', '无妄': 'n', '明夷': 'o',
'贲': 'p', '既济': 'q', '家人': 'r', '丰': 's', '离': 't', '革': 'u', '同人': 'v', '临': 'w', '损': 'x', '节': 'y',
'中孚': 'z', '归妹': '0', '睽': '1', '兑': '2', '履': '3', '泰': '4', '大畜': '5', '需': '6', '小畜': '7', '大壮': '8',
'大有': '9', '夬': '+', '乾': '/'
这个时候再来解密(这里就不贴代码了,直接替换上述代码的dic即可。运行结果如下),解出来一个base编码,然后尝试对该密文进行base64。此时得到的,应该就是经过两次加密算法之后的temp。

YjJ0aGNtNWViVzVYWldkblUyaGtVR05nU2w1Y1VnPT0 b2thcm5ebW5XZWdnU2hkUGNgSl5cUg==

根据加密算法写出解密算法,然后得到完整exp

encrpyt4的算法简单,直接加回去即可,无需分析。


原文始发于微信公众号(CSJH网络安全团队):Bugku--道友不来算一算凶吉?--WP

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月8日03:08:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Bugku--道友不来算一算凶吉?--WPhttp://cn-sec.com/archives/2017033.html

发表评论

匿名网友 填写信息