首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >BUUCTF [GUET-CTF2019]虚假的压缩包 1

BUUCTF [GUET-CTF2019]虚假的压缩包 1

作者头像
YueXuan
发布2025-10-14 09:07:16
发布2025-10-14 09:07:16
10200
代码可运行
举报
运行总次数:0
代码可运行

BUUCTF:https://buuoj.cn/challenges


相关阅读 CTF Wiki BUUCTF zip伪加密 1 RSA加密原理详解,以及RSA中的数论基础 BUUCTF:[GUET-CTF2019]虚假的压缩包 BUUCTF:[GUET-CTF2019]虚假的压缩包 Misc | 相当于签到 第二届“奇安信”杯网络安全技能竞赛

在这里插入图片描述
在这里插入图片描述

题目描述:

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

密文:

下载附件解压,得到两个压缩包:虚假的压缩包.zip和真实的压缩包.zip

在这里插入图片描述
在这里插入图片描述

解题思路:

1、先处理虚假的压缩包.zip,因为真实的压缩包.zip需要密码。虚假的压缩包.zip使用了伪加密,搜索50 4B 01 02,将文件头的第9位和第10位改为0。

在这里插入图片描述
在这里插入图片描述

解压得到Key.txt文件,内容如下:

在这里插入图片描述
在这里插入图片描述

2、猜测为RSA加密,解密脚本如下:

代码语言:javascript
代码运行次数:0
运行
复制
import gmpy2
"""
gmpy2.mpz(n)#初始化一个大整数
gmpy2.mpfr(x)# 初始化一个高精度浮点数x
d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n
C = gmpy2.powmod(M,e,n)# 幂取模,结果是 C = (M^e) mod n
gmpy2.is_prime(n) #素性检测
gmpy2.gcd(a,b)  #欧几里得算法,最大公约数
gmpy2.gcdext(a,b)  #扩展欧几里得算法
gmpy2.iroot(x,n) #x开n次根
"""
p = gmpy2.mpz(3)
q = gmpy2.mpz(11)
e = gmpy2.mpz(3)
l = (p-1) * (q-1)
d = gmpy2.invert(e,l)
c = gmpy2.mpz(26)
n = p * q
ans = pow(c,d,n)
print(ans)

来源:https://blog.csdn.net/qq_24033605/article/details/117158714

运行脚本,得到答案是5

在这里插入图片描述
在这里插入图片描述

3、解压真实的压缩包.zip,得到一张没卵用且会浪费你时间的图片.jpg和亦真亦假。

解压密码:答案是5

在这里插入图片描述
在这里插入图片描述

使用TweakPNG打开jpg图片,发现提示jpg图片CRC不对,应该是被修改宽高啦。(另外该图片应为png文件,png文件头89 50 4E 47)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用如下脚本,计算原文件宽高。

代码语言:javascript
代码运行次数:0
运行
复制
import os
import binascii
import struct

crcbp = open("1.png", "rb").read()    #打开图片!!!
for i in range(2000):
    for j in range(2000):
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0x1670BAE6):    #修改为图片当前CRC!!!
            print(i, j)
            print('hex:', hex(i), hex(j))

得到图片的高应为2420xF2

在这里插入图片描述
在这里插入图片描述

修改图片高度如下

在这里插入图片描述
在这里插入图片描述

得到图片

在这里插入图片描述
在这里插入图片描述

4、根据上面图片的提示,我们将亦真亦假文件的数据异或5,python脚本如下:

代码语言:javascript
代码运行次数:0
运行
复制
import binascii

# 打开文件进行读取
with open('file', 'r') as f1:
    data = f1.read()

# 初始化变量存储解密后的数据
flag_data = ""

# 对每个字符进行异或操作
for i in data:
    tmp = int(i, 16) ^ 5
    flag_data += hex(tmp)[2:]

# 将解密后的数据写入新文件
with open('./flag.doc', 'wb') as f2:
    # 使用 binascii.unhexlify 替代 decode('hex')
    f2.write(binascii.unhexlify(flag_data))

print("Decryption complete.")

得到flag.doc文件,打开没有发现flag,全选改变字体颜色,得到flag。(word隐藏文字)

在这里插入图片描述
在这里插入图片描述

flag:

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

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

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

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

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