WP006——CTF赛题解析-社会主义核心价值观解密

582 阅读2分钟

时效性

2025年7月26日

题目来源

富强民主 - Bugku CTF平台

题目描述

image.png

Write Up

随波逐流工具解密

image.png

总结

参考

blog.csdn.net/zyk961755/a…

本题也属于解码中最为简单的一种,但是其中包含了一种加密方式,对于这种题目,虽然可以直接通过工具一键处理,但是也需要知道其考核的内容——社会主机核心价值观解密

编解码过程 1.把字符通过UTF-8编码成十六进制数据

2.把十六进制遍历,大于10的数据转成 【(11,a-6),(10,a-10)】 随机二选一【所以多次编码后的内容不一致】

3.把下面列表导入,从0开始遍历循环输出内容。

[‘富强’, ‘民主’, ‘文明’, ‘和谐’, ‘自由’, ‘平等’, ‘公正’, ‘法治’, ‘爱国’, ‘敬业’, ‘诚信’, ‘友善’]

举例 手动编码 编码内容:我

1.使用UTF-8编码“我”,得到“E68891” 2.把“E68891”拆分成列表并且转10进制,“E”16转10进制是“14”,大于10的需要截取,转成 【(11,14-6),(10,14-10)】 随机二选一所以这里是的“E”变成了“10,4”

        E68891
    E   6  8  8  9  1
[10, 4, 6, 8, 8, 9, 1]

3.从社会主义核心价值观读取显示出来

[  10  ,   4  ,    6  ,    8  ,    8  ,   9  ,    1  ]
['诚信', '自由', '公正', '爱国', '爱国', '敬业', '民主']
​
'诚信自由公正爱国爱国敬业民主'
富强:0
民主:1
文明:2
和谐:3
自由:4
平等:5
公正:6
法治:7
爱国:8
敬业:9
诚信:10
友善:11

编码脚本

import random
​
while 1:
    str1 = str(bytes(input('输入要编码的文本:'), encoding='u8'))[2:-1].replace('\x', '')
    list1 = []
    for f1 in str1:
        str2 = int(f1, 16)
        if str2 < 10:
            list1.append(str2)
        elif random.random() < 0.5:
            list1.append(11)
            list1.append(str2 - 6)
        else:
            list1.append(10)
            list1.append(str2 - 10)
    str1 = '富强民主文明和谐自由平等公正法治爱国敬业诚信友善'
    str1 = ''.join([str1[f1 << 1] + str1[f1 << 1 | 1] for f1 in list1])
    print('编码结果:',str1,'\n'*3)

解码脚本

while 1:
    str1 = input('输入要解码的文本:')
    list1 = ['富强', '民主', '文明', '和谐', '自由', '平等', '公正', '法治', '爱国', '敬业', '诚信', '友善']
    list1 = [list1.index(str1[f1 << 1] + str1[f1 << 1 | 1]) for f1 in range(int(len(str1)/2))]
    a = 0
    list2 = []
    while a < len(list1):
        if list1[a] < 10:
            list2.append(str(list1[a]))
        elif list1[a] == 10:
            a += 1
            list2.append(hex(list1[a]+10)[2:])
        else:
            a += 1
            list2.append(hex(list1[a]+6)[2:])
        a += 1
    str1 = bytes.fromhex(''.join(list2)).decode('utf-8')
    print('解码结果:', str1, '\n'*3)
​