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)
    
  • 相关阅读:
    【起航计划 021】2015 起航计划 Android APIDemo的魔鬼步伐 20 App->Intents createChooser
    【起航计划 020】2015 起航计划 Android APIDemo的魔鬼步伐 19 App->Dialog Dialog样式
    【起航计划 019】2015 起航计划 Android APIDemo的魔鬼步伐 18 App->Device Admin 设备管理器 DeviceAdminReceiver DevicePolicyManager PreferenceActivity的使用
    【起航计划 018】2015 起航计划 Android APIDemo的魔鬼步伐 17 App->Alarm->Alarm Service
    【起航计划 017】2015 起航计划 Android APIDemo的魔鬼步伐 16 App->Alarm->Alarm Controller Alarm事件 PendingIntent Schedule AlarmManager
    【起航计划 016】2015 起航计划 Android APIDemo的魔鬼步伐 15 App->Activity->Wallpaper 系统壁纸作为当前Activity的背景
    【起航计划 015】2015 起航计划 Android APIDemo的魔鬼步伐 14 App->Activity->Translucent Blur 模糊背景
    【前端 JS】我的前端架构养成记之整洁的工作流
    【Android 界面效果49】RecyclerView高度随Item自适应
    【Android 界面效果48】Android-RecyclerView-Item点击事件设置
  • 原文地址:https://www.cnblogs.com/vict0r/p/13503759.html
Copyright © 2011-2022 走看看