今天刷BuildCTF发现有一个png文件中每两个字节都被调换,故写了一个C程序来把输入的文件进行转换.
使用方法:编译后在程序目录下放置你要转换的文件,然后改名为input.bin,运行后会生成output.bin
#include <stdio.h>
#include <stdlib.h>
void swap_bytes(unsigned char *buffer, size_t size) {
for (size_t i = 0; i < size; i += 2) {
if (i + 1 < size) {
unsigned char temp = buffer[i];
buffer[i] = buffer[i + 1];
buffer[i + 1] = temp;
}
}
}
int main() {
FILE *input_file = fopen("input.bin", "rb");
if (input_file == NULL) {
perror("Open Failed");
return 1;
}
fseek(input_file, 0, SEEK_END);
long file_size = ftell(input_file);
fseek(input_file, 0, SEEK_SET);
if (file_size <= 0) {
fprintf(stderr, "error\n");
fclose(input_file);
return 1;
}
unsigned char *buffer = (unsigned char *)malloc(file_size);
if (buffer == NULL) {
perror("Failed to allocate memory");
fclose(input_file);
return 1;
}
fread(buffer, 1, file_size, input_file);
fclose(input_file);
swap_bytes(buffer, file_size);
FILE *output_file = fopen("output.bin", "wb");
if (output_file == NULL) {
perror("Output Failed");
free(buffer);
return 1;
}
fwrite(buffer, 1, file_size, output_file);
fclose(output_file);
free(buffer);
printf("Successfully\n");
return 0;
}