• IceCTF Crypto Substituted


    题目

    Lw!

    Gyzvecy ke WvyVKT!

    W'zz by reso dsbdkwksky tzjq teo kly ujr. Teo keujr, gy joy dksurwmq bjdwv vorakeqojalr jmu wkd jaazwvjkwemd. Vorakeqojalr ljd j zemq lwdkeor, jzklesql gwkl kly juxymk et vecaskyod wk ljd qekkym oyjzzr vecazwvjkyu. Decy dwcazy ezu vwalyod joy kly Vjydjo vwalyo, kly Xwqymyoy vwalyo, kly dsbdkwkskwem vwalyo, glwvl wd klwd emy, jmu de em. Jzcedk jzz et klydy vwalyod joy yjdwzr boeiym keujr gwkl kly lyza et vecaskyod. Decy myg ymvorakwem cykleud joy JYD, kly vsooymk dkjmujou teo ymvorakwem, jzemq gwkl ODJ. Vorakeqojalr wd j xjdk twyzu jmu wd xyor wmkyoydkwmq klesql. De iwvi bjvi, oyju sa em decy veez vwalyod jmu ljxy tsm!

    El jmu teo reso oyveoud cr mjcy wd WvyVKT.

    分析与解题过程

    1. 单表代替密码,先统计一下字母出现的频率。由于这段文本大写字母较少,故不做大小写的统一直接统计了,代码如下:
    c = "Lw!
    Gyzvecy ke WvyVKT!
    W'zz by reso dsbdkwksky tzjq teo kly ujr. Teo keujr, gy joy dksurwmq bjdwv vorakeqojalr jmu wkd jaazwvjkwemd. Vorakeqojalr ljd j zemq lwdkeor, jzklesql gwkl kly juxymk et vecaskyod wk ljd qekkym oyjzzr vecazwvjkyu. Decy dwcazy ezu vwalyod joy kly Vjydjo vwalyo, kly Xwqymyoy vwalyo, kly dsbdkwkskwem vwalyo, glwvl wd klwd emy, jmu de em. Jzcedk jzz et klydy vwalyod joy yjdwzr boeiym keujr gwkl kly lyza et vecaskyod. Decy myg ymvorakwem cykleud joy JYD, kly vsooymk dkjmujou teo ymvorakwem, jzemq gwkl ODJ. Vorakeqojalr wd j xjdk twyzu jmu wd xyor wmkyoydkwmq klesql. De iwvi bjvi, oyju sa em decy veez vwalyod jmu ljxy tsm!
    El jmu teo reso oyveoud cr mjcy wd WvyVKT{jzgjrd_zwdkym_ke_reso_dsbdkwksky_tzjqd}."
    
    upperLetter = []
    lowerLetter = []
    for i in range(65,91):
        upperLetter.append(chr(i))
    for j in range(97,123):
        lowerLetter.append(chr(j))
    lst = upperLetter + lowerLetter
    d = dict.fromkeys(lst,0)
    print(d)
    for i in c:
        if i in lst:
            d.update({i:int(d.get(i))+1})
        else:
            continue
    print(d)
    d = sorted(d.items(),key=lambda item:item[1],reverse=True)
    print(d)
    

    得到统计结果为:

    [('y', 59), ('k', 51), ('e', 46), ('j', 42), ('o', 40), ('d', 38), ('w', 38), ('l', 34), ('m', 29), ('v', 24), ('z', 23), ('a', 22), ('r', 21), ('u', 18), ('s', 17), ('q', 13), ('c', 12), ('t', 10), ('b', 7), ('g', 7), ('D', 5), ('V', 5), ('i', 4), ('x', 4), ('J', 3), ('T', 3), ('W', 3), ('K', 2), ('E', 1), ('G', 1), ('L', 1), ('O', 1), ('X', 1), ('Y', 1), ('A', 0), ('B', 0), ('C', 0), ('F', 0), ('H', 0), ('I', 0), ('M', 0), ('N', 0), ('P', 0), ('Q', 0), ('R', 0), ('S', 0), ('U', 0), ('Z', 0), ('f', 0), ('h', 0), ('n', 0), ('p', 0)]

    1. 所以基本确定y对应e,k对应t。
      此外从密文中我们可以看到,出现了多次kly的组合,因此l基本可以确定是h。
      然后又发现有klydy和klwd,因此d对应s,w对应i。
      又有注意到有个单字母的词j,所以j应该对应i或者a,因为i以被确定过,所以j对应a。
      有De,其中D对应S,所以e对应o。
    2. 发现最后的flag开头是WvyVKT,而给的字符串开头有Gyzvecy ke WvyVKT!这里的ke对应to,所以判定这应该是Welcome to *
      所以g对用w。
      z对应l
      v对应c
      所以WvyVKT应为IceCTF,故T对应F。
    3. 这个时候flag括号里的内容已经是alwars_listem_to_roso_ssbstitste_flaqs了,所以r应当对应y(always),m对应n(listen),s对应u(substitute),q对应g(flags)。再做替换
    4. 这次替换后,我们在结果中找到

      所以应有o对应r
    5. 此次输出结果已将flag括号内所有字符都解出来了:always_listen_to_your_substitute_flags,加上以上我们已经得到的开头则有IceCTF
    c = "Lw!
    Gyzvecy ke WvyVKT!
    W'zz by reso dsbdkwksky tzjq teo kly ujr. Teo keujr, gy joy dksurwmq bjdwv vorakeqojalr jmu wkd jaazwvjkwemd. Vorakeqojalr ljd j zemq lwdkeor, jzklesql gwkl kly juxymk et vecaskyod wk ljd qekkym oyjzzr vecazwvjkyu. Decy dwcazy ezu vwalyod joy kly Vjydjo vwalyo, kly Xwqymyoy vwalyo, kly dsbdkwkskwem vwalyo, glwvl wd klwd emy, jmu de em. Jzcedk jzz et klydy vwalyod joy yjdwzr boeiym keujr gwkl kly lyza et vecaskyod. Decy myg ymvorakwem cykleud joy JYD, kly vsooymk dkjmujou teo ymvorakwem, jzemq gwkl ODJ. Vorakeqojalr wd j xjdk twyzu jmu wd xyor wmkyoydkwmq klesql. De iwvi bjvi, oyju sa em decy veez vwalyod jmu ljxy tsm!
    El jmu teo reso oyveoud cr mjcy wd WvyVKT{jzgjrd_zwdkym_ke_reso_dsbdkwksky_tzjqd}."
    
    upperLetter = []
    lowerLetter = []
    for i in range(65,91):
        upperLetter.append(chr(i))
    for j in range(97,123):
        lowerLetter.append(chr(j))
    lst = upperLetter + lowerLetter
    d = dict.fromkeys(lst,0)
    for i in c:
        if i in lst:
            d.update({i:int(d.get(i))+1})
        else:
            continue
    print(d)
    d = sorted(d.items(),key=lambda item:item[1],reverse=True)
    print(d)
    
    m = ""
    for i in c:
        if i == 'y':
            i = 'e'
        elif i == 'k':
            i = 't'
        elif i == 'l':
            i = 'h'
        elif i == 'd':
            i = 's'
        elif i == 'w':
            i = 'i'
        elif i == 'j':
            i = 'a'
        elif i == 'e':
            i = 'o'
        elif i == 'g':
            i = 'w'
        elif i == 'z':
            i = 'l'
        elif i == 'v':
            i = 'c'
        elif i == 'c':
            i = 'm'
        elif i == 't':
            i = 'f'
        elif i == 'r':
            i = 'y'
        elif i == 'm':
            i = 'n'
        elif i == 's':
            i = 'u'
        elif i == 'q':
            i = 'g'
        elif i == 'o':
            i = 'r'
        m += i
    print(m)
    
  • 相关阅读:
    JavaScript 核心参考 Arguments 对象
    readonly 和 disable的区别
    Asp.net 页面导航的几种方法与比较(转)
    CSS float clear 使用
    PHP时区列表
    Jquery 父窗口中移进移出鼠标到Iframe: 移进显示更多内容, 移出隐藏部分内容
    Mysql 查看进程SQL
    好用的弹出对话框 artDialog
    In Cache 算法
    live 绑定事件会触发多次
  • 原文地址:https://www.cnblogs.com/vict0r/p/13503759.html
Copyright © 2020-2023  润新知