zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    python面向对象的3个特点
    Redis-哈希槽
    PEP8 Python 编码规范
    每个人都要对自己进行5 项必要投资
    机器码和字节码
    python优缺点分析及python种类
    Zookeeper安装及运行
    Zookeeper简介与集群搭建
    Nginx Linux详细安装部署教程
    Nginx代理功能与负载均衡详解
  • 原文地址:https://www.cnblogs.com/vict0r/p/13503759.html
Copyright © 2011-2022 走看看