首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >BUUCTF [DDCTF2018](╯°□°)╯︵ ┻━┻ 1

BUUCTF [DDCTF2018](╯°□°)╯︵ ┻━┻ 1

作者头像
YueXuan
发布2025-08-18 20:33:57
发布2025-08-18 20:33:57
2060
举报

题目描述:

得到的 flag 请包上 flag{} 提交。

密文:

保存附件为attachment.txt

代码语言:javascript
复制
(╯°□°)╯︵ ┻━┻
50pt

(╯°□°)╯︵ ┻━┻

d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd

解题思路:

1、观察密文,134个字符,猜测为十六进制的数据,先两位截取。

代码语言:javascript
复制
hex列表:['d4', 'e8', 'e1', 'f4', 'a0', 'f7', 'e1', 'f3', 'a0', 'e6', 'e1', 'f3', 'f4', 'a1', 'a0', 'd4', 'e8', 'e5', 'a0', 'e6', 'ec', 'e1', 'e7', 'a0', 'e9', 'f3', 'ba', 'a0', 'c4', 'c4', 'c3', 'd4', 'c6', 'fb', 'b9', 'b2', 'b2', 'e1', 'e2', 'b9', 'b9', 'b7', 'b4', 'e1', 'b4', 'b7', 'e3', 'e4', 'b3', 'b2', 'b2', 'e3', 'e6', 'b4', 'b3', 'e2', 'b5', 'b0', 'b6', 'b1', 'b0', 'e6', 'e1', 'e5', 'e1', 'b5', 'fd']

将十六进制数据转换为十进制。

代码语言:javascript
复制
十进制列表:[212, 232, 225, 244, 160, 247, 225, 243, 160, 230, 225, 243, 244, 161, 160, 212, 232, 229, 160, 230, 236, 225, 231, 160, 233, 243, 186, 160, 196, 196, 195, 212, 198, 251, 185, 178, 178, 225, 226, 185, 185, 183, 180, 225, 180, 183, 227, 228, 179, 178, 178, 227, 230, 180, 179, 226, 181, 176, 182, 177, 176, 230, 225, 229, 225, 181, 253]

发现十进制数据都大于128,减去128,再转为字符串。

代码语言:javascript
复制
-128得到ASCII十进制dec列表:[84, 104, 97, 116, 32, 119, 97, 115, 32, 102, 97, 115, 116, 33, 32, 84, 104, 101, 32, 102, 108, 97, 103, 32, 105, 115, 58, 32, 68, 68, 67, 84, 70, 123, 57, 50, 50, 97, 98, 57, 57, 55, 52, 97, 52, 55, 99, 100, 51, 50, 50, 99, 102, 52, 51, 98, 53, 48, 54, 49, 48, 102, 97, 101, 97, 53, 125]

转为字符串,得到flag。

代码语言:javascript
复制
最终答案:That was fast! The flag is: DDCTF{922ab9974a47cd322cf43b50610faea5}

解密脚本如下:

代码语言:javascript
复制
# @Author:YueXuan
# @Date  :2024/10/8 22:00

def split_into_hex_pairs(s):
    """将输入字符串切片成每两个字符一组的列表"""
    return [s[i:i+2] for i in range(0, len(s), 2)]

def convert_hex_to_int(hex_pairs):
    """将十六进制列表转换为十进制整数列表"""
    return [int(pair, 16) for pair in hex_pairs]

def adjust_for_ascii(int_values):
    """将整数列表中的值减去128以获取ASCII值"""
    return [value - 128 for value in int_values]

def convert_int_to_str(int_values):
    """将整数列表转换为字符串"""
    return ''.join(chr(value) for value in int_values)

def main(hex_string):
    """主函数,调用上述函数并打印结果"""
    print("字符串长度:%s" % len(hex_string))

    hex_pairs = split_into_hex_pairs(hex_string)
    print("hex列表:%s" % hex_pairs)

    int_values = convert_hex_to_int(hex_pairs)
    print("转化为十进制int列表:%s" % int_values)

    ascii_values = adjust_for_ascii(int_values)
    print("-128得到ASCII十进制dec列表:%s" % ascii_values)

    result_str = convert_int_to_str(ascii_values)
    print('最终答案:%s' % result_str)

if __name__ == '__main__':
    hex_str = 'd4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
    main(hex_str)

网上的其他脚本:

代码语言:javascript
复制
# -*- coding:utf-8 -*-
# author: mochu7
def hex_str(str):#对字符串进行切片操作,每两位截取
    hex_str_list=[]
    for i in range(0,len(str)-1,2):
        hex_str=str[i:i+2]
        hex_str_list.append(hex_str)
    print("hex列表:%s\n"%hex_str_list)
    hex_to_str(hex_str_list)

def hex_to_str(hex_str_list):
    int_list=[]
    dec_list=[]
    flag=''
    for i in range(0,len(hex_str_list)):#把16进制转化为10进制
        int_str=int('0x%s'%hex_str_list[i],16)
        int_list.append(int_str)
        dec_list.append(int_str-128)#-128得到正确的ascii码
    for i in range(0,len(dec_list)):#ascii码转化为字符串
        flag += chr(dec_list[i])
    print("转化为十进制int列表:%s\n"%int_list)
    print("-128得到ASCII十进制dec列表:%s\n"%dec_list)
    print('最终答案:%s'%flag)

if __name__=='__main__':
    str='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
    print("字符串长度:%s"%len(str))
    hex_str(str)
代码语言:javascript
复制
key='d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9b2b2e1e2b9b9b7b4e1b4b7e3e4b3b2b2e3e6b4b3e2b5b0b6b1b0e6e1e5e1b5fd'
hex=[]
flag=''
for i in range(0,len(key)-1,2):
    zdh=key[i:i+2]
    hex.append(zdh)
for i in range(len(hex)):
    zdh1=hex[i]
    flag+=chr(int(int(zdh1,16))-128)
print(flag)

flag:

代码语言:javascript
复制
flag{922ab9974a47cd322cf43b50610faea5}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 密文:
  • 解题思路:
  • flag:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档