From 75a6c790d2cc2856c1d295f1dfea5eed509c6793 Mon Sep 17 00:00:00 2001 From: Pin Date: Thu, 7 Oct 2021 10:42:55 -0400 Subject: [PATCH] wip --- crc.c | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/crc.c b/crc.c index ac480de..d0c7601 100644 --- a/crc.c +++ b/crc.c @@ -14,16 +14,18 @@ const long idat_signature = 1229209940; const long iend_signature = 1229278788; -FILE *zlib_decompress_data(unsigned char *data_chunk, size_t file_length) { +FILE *zlib_decompress_data(unsigned char *data_chunk, size_t file_length, char *buff) { int ret; unsigned int have; z_stream strm; unsigned char out[CHUNK]; unsigned char in[CHUNK]; + size_t sz; errno=0; FILE *data_stream = fmemopen(data_chunk, file_length, "r"); - FILE *of = open_memstream(NULL, NULL); + FILE *of = NULL; + of = open_memstream(&buff, &sz); if(data_stream == NULL) { perror("F MEM OPEN"); } @@ -71,10 +73,12 @@ FILE *zlib_decompress_data(unsigned char *data_chunk, size_t file_length) { (void)inflateEnd(&strm); + fclose(data_stream); + return of; } -FILE *zlib_compress_data(unsigned char *data_chunk, size_t file_length) { +FILE *zlib_compress_data(unsigned char *data_chunk, size_t file_length, char *buff) { int ret, flush; unsigned int have; z_stream strm; @@ -86,9 +90,11 @@ FILE *zlib_compress_data(unsigned char *data_chunk, size_t file_length) { int memLevel = 9; //int strategy = Z_DEFAULT_STRATEGY; int strategy = Z_FILTERED; + size_t sz; FILE *data_stream = fmemopen(data_chunk, file_length, "r"); - FILE *out_data_stream = open_memstream(NULL, NULL); + FILE *out_data_stream = NULL; + out_data_stream = open_memstream(&buff, &sz); strm.zalloc = Z_NULL; strm.zfree = Z_NULL; @@ -124,6 +130,8 @@ FILE *zlib_compress_data(unsigned char *data_chunk, size_t file_length) { } while(flush != Z_FINISH); assert(ret == Z_STREAM_END); + fclose(data_stream); + (void)deflateEnd(&strm); return out_data_stream; } @@ -197,10 +205,16 @@ void random_data_change(unsigned char *color_data, int width, int length) { } else { temp_color_data[random_num]++; } - FILE *check_data = zlib_compress_data(temp_color_data, length); + char *check_data_buff = NULL; + FILE *check_data = zlib_compress_data(temp_color_data, length, check_data_buff); size_t check_data_length = 0; unsigned char *check_data_array = file_to_char_array(check_data, &check_data_length); + + fflush(check_data); + fclose(check_data); + free(check_data_buff); + unsigned char full_data[check_data_length+4]; full_data[0] = 0x49; full_data[1] = 0x44; @@ -210,10 +224,11 @@ void random_data_change(unsigned char *color_data, int width, int length) { full_data[i+4] = check_data_array[i]; } unsigned int temp_crc = crc(full_data, check_data_length); - if ((temp_crc >> (8*3)) == 61 ) { + if ((temp_crc >> (8*3)) == 10 ) { printf("Found in %zu rounds!\n", rounds); searching = 0; } + free(check_data_array); } @@ -275,13 +290,18 @@ int change_idat_content(unsigned char *addr, char *message, int accuracy, unsign // TO STOP DECOMPRESSION CORRUPTION //temp_idat_data[j] = addr[offset+8+j]; // Decompressing Data - FILE *uncom_data = zlib_decompress_data(temp_idat_data, idat_byte_length); + char *uncom_data_buff = NULL; + FILE *uncom_data = zlib_decompress_data(temp_idat_data, idat_byte_length, uncom_data_buff); size_t uncom_data_size = 0; unsigned char *uncom_data_array = file_to_char_array(uncom_data, &uncom_data_size); - printf("UnCom: %zu\n", uncom_data_size); + random_data_change(uncom_data_array, 16, uncom_data_size); + fflush(uncom_data); + fclose(uncom_data); + free(uncom_data_buff); + //printf("Found %d in %d rounds\n", checked_crc ,rounds); //printf("Full CRC: %08X\n", crcnum); //printf("Original: %02X\n", idat_data[j]); @@ -299,7 +319,7 @@ int main() { FILE *fp; size_t i = 0; unsigned long offset = 0; - char message[1]; + char message[1] = ""; if(sodium_init() == -1) { return EXIT_FAILURE;