二进制文件每两个的字节位置交换

       在打CTF的时候,偶尔会遇到还原一些文件,我遇到的是misc图片打不开的时候,搜所文件头,发现和某个文件头有点相似,但是每两个字节位置颠倒了,于是就想到把每两个字节交换位置,就像下面这种:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *inputFile, *outputFile;
    inputFile = fopen("password.png", "rb");
    if (inputFile == NULL) {
        perror("Error opening input file");
        return 1;
    }
    outputFile = fopen("1.png", "wb");
    if (outputFile == NULL) {
        perror("Error opening output file");
        fclose(inputFile);
        return 1;
    }
    unsigned char byte1, byte2;
    while (fread(&byte1, 1, 1, inputFile) == 1 && fread(&byte2, 1, 1, inputFile) == 1) {
        fwrite(&byte2, 1, 1, outputFile);
        fwrite(&byte1, 1, 1, outputFile);
    }
    fclose(inputFile);
    fclose(outputFile);
    return 0;
}

这个c++代码会传递 password.png 作为输入文件和 1.png 作为输出文件。

猜你喜欢

转载自blog.csdn.net/m0_74077634/article/details/143451893