wip
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,4 +2,5 @@
|
|||||||
*.out
|
*.out
|
||||||
*.woo
|
*.woo
|
||||||
*.wow
|
*.wow
|
||||||
|
*.gch
|
||||||
bin/
|
bin/
|
||||||
|
|||||||
@@ -123,7 +123,6 @@ int change_idat_content(unsigned char *addr, unsigned char *message, int accurac
|
|||||||
|
|
||||||
int prop_found = 0;
|
int prop_found = 0;
|
||||||
long size = 1;
|
long size = 1;
|
||||||
long rounds = 0;
|
|
||||||
size_t idat_byte_length = 0;
|
size_t idat_byte_length = 0;
|
||||||
unsigned char* idat_data = calloc(size, sizeof(unsigned char));
|
unsigned char* idat_data = calloc(size, sizeof(unsigned char));
|
||||||
for(size_t i = 0; i <= idat_length; i++) {
|
for(size_t i = 0; i <= idat_length; i++) {
|
||||||
@@ -167,6 +166,8 @@ int main() {
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
unsigned long offset = 0;
|
unsigned long offset = 0;
|
||||||
|
struct PNG_START_FILE_STRUCT png_start_file_data;
|
||||||
|
struct PNG_IDAT_FILE_STRUCT png_idat_file_data;
|
||||||
unsigned char *message = malloc(sizeof(char));
|
unsigned char *message = malloc(sizeof(char));
|
||||||
message[0] = '\0';
|
message[0] = '\0';
|
||||||
|
|
||||||
@@ -184,7 +185,13 @@ int main() {
|
|||||||
unsigned char *file_data = file_to_char_array(fp, &i);
|
unsigned char *file_data = file_to_char_array(fp, &i);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
populate_start_png(file_data, &png_start_file_data);
|
||||||
|
|
||||||
offset = first_idat(file_data);
|
offset = first_idat(file_data);
|
||||||
|
printf("Off: %ld\n", offset);
|
||||||
|
|
||||||
|
populate_idat_png(file_data, &png_idat_file_data, offset);
|
||||||
|
|
||||||
change_idat_content(file_data, message, 1, offset);
|
change_idat_content(file_data, message, 1, offset);
|
||||||
free(file_data);
|
free(file_data);
|
||||||
free(message);
|
free(message);
|
||||||
|
|||||||
@@ -1,15 +1,29 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
// PNG File Struct
|
// PNG File Struct
|
||||||
struct PNG_FILE_STRUCT {
|
struct PNG_START_FILE_STRUCT {
|
||||||
unsigned char file_sig[8];
|
unsigned char file_sig[8];
|
||||||
int file_width;
|
unsigned char ihdr_length[4];
|
||||||
int file_height;
|
unsigned char ihdr_header[4];
|
||||||
int bit_depth;
|
unsigned char file_width[4];
|
||||||
int color_type;
|
unsigned char file_height[4];
|
||||||
int compression_method;
|
unsigned char bit_depth[1];
|
||||||
int filter_method;
|
unsigned char color_type[1];
|
||||||
int interlace_method;
|
unsigned char compression_method[1];
|
||||||
|
unsigned char filter_method[1];
|
||||||
|
unsigned char interlace_method[1];
|
||||||
|
unsigned char ihdr_crc[4];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PNG_IDAT_FILE_STRUCT {
|
||||||
|
unsigned char idat_length[4];
|
||||||
|
unsigned char idat_header[4];
|
||||||
|
unsigned char idat_crc[4];
|
||||||
|
unsigned char idat_data[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PNG_FILE_STRUCT {
|
||||||
|
struct PNG_START_FILE_STRUCT png_start_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const long png_signature[8];
|
extern const long png_signature[8];
|
||||||
@@ -18,3 +32,5 @@ int check_header_length(unsigned char *addr, long offset);
|
|||||||
int check_file_header(char *addr);
|
int check_file_header(char *addr);
|
||||||
int create_cc_file(unsigned char *addr, unsigned long file_length);
|
int create_cc_file(unsigned char *addr, unsigned long file_length);
|
||||||
unsigned char* file_to_char_array(FILE *in_file, size_t* size);
|
unsigned char* file_to_char_array(FILE *in_file, size_t* size);
|
||||||
|
void populate_start_png(unsigned char *addr, struct PNG_START_FILE_STRUCT *png_data);
|
||||||
|
void populate_idat_png(unsigned char *addr, struct PNG_IDAT_FILE_STRUCT *png_data, unsigned long offset);
|
||||||
|
|||||||
@@ -27,6 +27,77 @@ int check_file_header(char *addr) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void populate_idat_png(unsigned char *addr, struct PNG_IDAT_FILE_STRUCT *png_data, unsigned long offset) {
|
||||||
|
unsigned long cur_idat_length = 0;
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
png_data->idat_length[i] = addr[i+offset];
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
cur_idat_length += (png_data->idat_length[i] << (24-(8*i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n%ld\n", cur_idat_length);
|
||||||
|
}
|
||||||
|
|
||||||
|
void populate_start_png(unsigned char *addr, struct PNG_START_FILE_STRUCT *png_data) {
|
||||||
|
for(int i = 0; i < 8; i++) {
|
||||||
|
png_data->file_sig[i] = addr[i];
|
||||||
|
printf("%02X ", png_data->file_sig[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
png_data->ihdr_length[i] = addr[i+8];
|
||||||
|
printf("%02X ", png_data->ihdr_length[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
png_data->ihdr_header[i] = addr[i+12];
|
||||||
|
printf("%02X ", png_data->ihdr_header[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
png_data->file_width[i] = addr[i+16];
|
||||||
|
printf("%02X ", png_data->file_width[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
png_data->file_height[i] = addr[i+20];
|
||||||
|
printf("%02X ", png_data->file_height[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 1; i++) {
|
||||||
|
png_data->bit_depth[i] = addr[i+24];
|
||||||
|
printf("%02X ", png_data->bit_depth[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 1; i++) {
|
||||||
|
png_data->color_type[i] = addr[i+25];
|
||||||
|
printf("%02X ", png_data->color_type[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 1; i++) {
|
||||||
|
png_data->compression_method[i] = addr[i+26];
|
||||||
|
printf("%02X ", png_data->compression_method[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 1; i++) {
|
||||||
|
png_data->filter_method[i] = addr[i+27];
|
||||||
|
printf("%02X ", png_data->filter_method[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 1; i++) {
|
||||||
|
png_data->interlace_method[i] = addr[i+28];
|
||||||
|
printf("%02X ", png_data->interlace_method[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
png_data->ihdr_crc[i] = addr[i+29];
|
||||||
|
printf("%02X ", png_data->ihdr_crc[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
int create_cc_file(unsigned char *addr, unsigned long file_length) {
|
int create_cc_file(unsigned char *addr, unsigned long file_length) {
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
fp = fopen("png2.png", "w");
|
fp = fopen("png2.png", "w");
|
||||||
|
|||||||
Reference in New Issue
Block a user