BUUCTF派大星的烦恼

解压得到一张图片没啥有用信息

根据下面题目提示,用010editor打开图片发现一段16进制字符串

派大星最近很苦恼,因为它的屁股上出现了一道疤痕!我们拍下了它屁股一张16位位图,0x22,0x44代表伤疤两种细胞,0xf0则是派大星的赘肉。还原伤疤,知道是谁打的派大星!(答案为32位的一串字符串) 注意:得到的 flag 请包上 flag{} 提交

在010editor直接CTRL+C CTRL+V 是Ascii,复制如下

"DD"DD""""D"DD""""""DD"""DD"DD""D""DDD""D"D"DD""""""DD""D""""DD"D"D"DD""""D"DD""D"""DD"""""DDD""""D"DD"""D"""DD"""D""DD"D"D"DD"""DD""DD"D"D""DD""DD"DD"""D"""DD""DD"DD""D"D""DD"D"D"DD"""D"""DD"""D"DD""DD"""DD"D"D""DD"""D"DD""DD""DD"""""DDD""DD""DD"""D""DD""

复制16进制字符串

22 44 44 22 44 44 22 22 22 22 44 22 44 44 22 22
22 22 22 22 44 44 22 22 22 44 44 22 44 44 22 22
44 22 22 44 44 44 22 22 44 22 44 22 44 44 22 22
22 22 22 22 44 44 22 22 44 22 22 22 22 44 44 22
44 22 44 22 44 44 22 22 22 22 44 22 44 44 22 22
44 22 22 22 44 44 22 22 22 22 22 44 44 44 22 22
22 22 44 22 44 44 22 22 22 44 22 22 22 44 44 22
22 22 44 22 22 44 44 22 44 22 44 22 44 44 22 22
22 44 44 22 22 44 44 22 44 22 44 22 22 44 44 22
22 44 44 22 44 44 22 22 22 44 22 22 22 44 44 22
22 44 44 22 44 44 22 22 44 22 44 22 22 44 44 22
44 22 44 22 44 44 22 22 22 44 22 22 22 44 44 22
22 22 44 22 44 44 22 22 44 44 22 22 22 44 44 22
44 22 44 22 22 44 44 22 22 22 44 22 44 44 22 22
44 44 22 22 44 44 22 22 22 22 22 44 44 44 22 22
44 44 22 22 44 44 22 22 22 44 22 22 44 44 22 22
 

根据提示这是伤疤,共256位字符,只有两种状态,假设0X44为1,0X22为0.

011011000010110000001100011011001001110010101100000011001000011010101100001011

0010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100

https://icyberchef.com/

乱码,去下面网站把二进制字符串逆序再解码,逆序后不乱码,去提交依然不正确

再逆序

6406950a54184bd5fe6b6e5b4ce43832

flag{6406950a54184bd5fe6b6e5b4ce43832}

提交答案正确

------------------------------------------------------------------------------------------------------------------------------

以下使用python实现:

把最初二进制字符串每8位二进制分割,256/8=32,满足提示要求,二进制字符(binary-str)-逆序-转字符ASCII-逆序      把最初二进制字符串每8位二进制分割,逆序先转整数int(10进制))再使用chr函数转ASCII再逆序。

python脚本实现

with open("派大星的烦恼.bmp", "rb") as fr:
    res = fr.read()[4000:4256]

    # 将字节值转换为 0 和 1 的列表
    binary_list = [0 if v == 34 else 1 for v in res]
    # 打印二进制列表
    print(binary_list)

    # 将列表中的每个元素转换为字符串并拼接成一个字符串
    binary_str = "".join(map(str, binary_list))
    print(binary_str)
flag=binary_str[::-1]
x=""
for i in range(len(flag)//8):
    x += chr(int(flag[8*i:(i+1)*8],2))
print(x[::-1])

又一个脚本:

with open("派大星的烦恼.bmp", "rb") as fr:
    res = fr.read()[4000:4256]

    # 将字节值转换为 0 和 1 的列表
    binary_list = [0 if v == 34 else 1 for v in res]
    # 打印二进制列表
    print(binary_list)

    # 将列表中的每个元素转换为字符串并拼接成一个字符串
    binary_str = "".join(map(str, binary_list))
    print(binary_str)  
str=binary_str[::-1]
flag=""
for i in range(len(str)//8):
    flag += chr(int(str[8*i:(i+1)*8],2))
print(f"len:{len(flag)}")
print(f"flag is :{flag[::-1]}")

二进制字符(binary-str)-逆序-转字符ASCII-逆序               等同于

二进制字符每八位(binary-str)逆序 -转字符ASCII

换思路脚本修改如下

with open("派大星的烦恼.bmp", "rb") as fr:
    res = fr.read()[4000:4256]

    # 将字节值转换为 0 和 1 的列表
    binary_list = [0 if v == 34 else 1 for v in res]
    # 打印二进制列表
    print(binary_list)

    # 将列表中的每个元素转换为字符串并拼接成一个字符串
    binary_str = "".join(map(str, binary_list))
    print(binary_str)

    # 将二进制字符串按每 8 个字符分割、反转并转换为整数列表
    integer_list = [int(binary_str[i:i + 8][::-1], 2) for i in range(0, len(binary_str), 8)]
    print(integer_list)

    # 将整数列表中的每个元素转换为十六进制字符串并拼接
    hex_str = "".join(map(lambda v: str(hex(v))[2:], integer_list))
       
    # 将十六进制字符串中的每个字符转换为对应的 ASCII 字符并拼接
    flag = "".join(chr(int(hex_str[i:i + 2], 16)) for i in range(0, len(hex_str), 2))


print(f"字符长度:{len(hex_str)}")
print(f"转换结果:{hex_str}")
print(f"len:{len(flag)}")
print(f"flag is :{flag}")

运行结果如下:

0110110000101100000011000110110010011100101011000000110010000110101011000010110010001100000111000010110001000110001001101010110001100110101001100110110001000110011011001010011010101100010001100010110011000110101001100010110011001100000111001100110001001100
[54, 52, 48, 54, 57, 53, 48, 97, 53, 52, 49, 56, 52, 98, 100, 53, 102, 101, 54, 98, 54, 101, 53, 98, 52, 99, 101, 52, 51, 56, 51, 50]
字符长度:64
转换结果:3634303639353061353431383462643566653662366535623463653433383332
len:32
flag is :6406950a54184bd5fe6b6e5b4ce43832
 

满足32位要求

包裹flag{}提交:

flag{6406950a54184bd5fe6b6e5b4ce43832}

上面代码有多余步骤,优化一下,binary_str  to  integer_list  to hex_str to ASCII

多余了hex_str,改后binary_str  to  integer_list  to  ASCII

with open("派大星的烦恼.bmp", "rb") as fr:
    res = fr.read()[4000:4256]

    # 将字节值转换为 0 和 1 的列表
    binary_list = [0 if v == 34 else 1 for v in res]
    # 打印二进制列表
    print(binary_list)

    # 将列表中的每个元素转换为字符串并拼接成一个字符串
    binary_str = "".join(map(str, binary_list))
    print(binary_str)

    # 将二进制字符串按每 8 个字符分割、反转并转换为整数列表
    integer_list = [int(binary_str[i:i + 8][::-1], 2) for i in range(0, len(binary_str), 8)]
    print(integer_list)

    flag = "".join(chr(v) for v in integer_list)  

    # 以下是多余步骤,注释掉,将整数列表中的每个元素转换为十六进制字符串并拼接
    #hex_str = "".join(format(v, "02x") for v in integer_list)
       
    # 将十六进制字符串中的每个字符转换为对应的 ASCII 字符并拼接
    #flag = "".join(chr(int(hex_str[i:i + 2], 16)) for i in range(0, len(hex_str), 2))



print(f"len:{len(flag)}")
print(f"flag is :{flag}")

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Xposed派大星是一个非常受欢迎的Android开发工具,它允许用户通过安装模块来定制和修改他们的设备。这个工具可以在不修改设备固件或刷机的情况下改变Android系统的行为。用户只需安装Xposed框架,并在框架上安装各种模块,就能更改系统的各个方面和功能。 Xposed派大星的使用非常简单,不需要专业的编程知识。在安装好框架后,用户可以选择性地下载和安装各种模块,这些模块可以实现诸如伪装应用标识、修改系统设置、去除广告、增加功能等等的目的。可以说,Xposed派大星为用户提供了在不更改设备固件的情况下个性化定制他们的Android设备的方式。 Xposed派大星的优点是它的灵活性和可定制性。用户可以根据自己的需求选择安装适合的模块,将Android设备调整得更加适合自己的使用习惯和喜好。另外,由于不需要刷机操作,所以使用Xposed派大星的风险相对较低,用户可以随时卸载模块或者禁用框架,恢复设备到初始状态。 然而,使用Xposed派大星也存在一些风险和注意事项。由于它可以修改系统的行为,不正确的使用或安装不可靠的模块可能导致系统不稳定甚至无法正常运行。因此,在使用Xposed派大星之前,用户应该对自己的操作有一定的了解,并注意安装来自可信来源的模块。 总体而言,Xposed派大星是一个功能强大且受欢迎的Android开发工具,它为用户提供了个性化定制Android设备的途径。用户可以根据自己的需求安装各种模块,定制自己的设备功能,但在使用时也要注意风险和慎重选择模块,以保障系统的稳定性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值