CTF杂项-WinHex修改png的宽高得到答案

1.如何判断是宽还是高的问题

        a.先看是不是失真,如果全是像素点之类的,就是宽度有误,需要使用WinHex去进行修改

        b.如果是高度的问题,那么图片是能够打开的,并且一般不会有什么问题,

2.判断出问题之后,就是用WinHex去打开有问题的图片,然后找到对应的宽高数据进行修改就可以了。

### 使用 WinHex 修改图像文件的度和高度 #### 打开并定位到目标位置 为了修改图像文件中的度和高度,需先用WinHex或其他十六进制编辑器打开该文件。对于PNG格式而言,在IHDR块中存储着图像的高度度信息;而对于BMP来说,则是在位图信息头内保存这些属性。 #### 定位具体数值 - **PNG 文件**: 需要找到标记为“IHDR”的区块之后紧跟着的就是度和高度的数据,它们各自占用4字节的空间[^3]。 - **BMP 文件**: 在位图信息头部可发现有关于图像的描述字段,同样各占4个字节的位置[^2]。 #### 编辑度和高度值 一旦找到了对应的偏移地址,就可以着手更改具体的像素尺寸了。需要注意的是,这里的数值是以二进制形式存在的,因此输入新的尺寸前应当将其转换成相应的十六进制表示法再填入相应位置。 例如,假设想要把一张原始分辨率为800x600的图片改为800x500: 1. 将新高度(即500)转为十六进制数`0x01F4`; 2. 如果是大端序(big endian),则应按照位在前低位在后的顺序依次替换原有的四个字节; 3. 对于小端序(little endian),则是相反的操作方式——最低有效字节最先出现; 4. 同样地处理度的变化,不过本例中度不变所以无需操作. #### 更新 CRC 校验码 完成上述改动后,对于 PNG 图像还需要更新其循环冗余检验(CRC)校验码来确保文件能够被正确解析而不触发错误提示。这一步骤可以通过专门工具如CRC Calculator来进行重算并覆盖旧有的CRC值[^1]. ```python import struct def update_crc(image_data, chunk_start): crc = binascii.crc32(image_data[chunk_start:chunk_start+9]) & 0xFFFFFFFF image_data[chunk_start + 13 : chunk_start + 17] = struct.pack('>L',crc) # 假设image_bytes是一个已经读取出来的整个png文件bytes对象, # 并且已知需要修正的第一个受影响CHUNK起始位置index. update_crc(image_bytes,index) ``` 通过以上步骤即可实现对指定图像文件物理分辨率的成功调整,并保持文件结构的有效性和兼容性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值