This commit is contained in:
Pin
2021-09-28 02:21:48 -04:00
parent ba42231301
commit 3a5862f32f

81
crc.c
View File

@@ -5,12 +5,12 @@
#include <sodium.h>
#include "CRCLib.h"
const int png_signature[8] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };
const int idat_signature = 1229209940;
const int iend_signature = 1229278788;
const long png_signature[8] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };
const long idat_signature = 1229209940;
const long iend_signature = 1229278788;
const int working = 1;
int check_file_header(int *addr) {
int check_file_header(char *addr) {
int signature_match = 0;
for( int i = 0; i < 8; i++ ) {
if (addr[i] != png_signature[i]) {
@@ -23,7 +23,7 @@ int check_file_header(int *addr) {
}
int check_header_length(int *addr, int offset) {
int check_header_length(unsigned char *addr, long offset) {
unsigned int res = 0;
for( int i = 0; i < 4; i++ ) {
res |= addr[offset+i];
@@ -34,9 +34,9 @@ int check_header_length(int *addr, int offset) {
return res;
}
int first_idat(int *addr) {
unsigned long first_idat(char *addr) {
int idat_found = 0;
int offset = 8;
unsigned long offset = 8;
int jump_offset = 0;
int header_type = 0;
while(idat_found == 0) {
@@ -51,10 +51,10 @@ int first_idat(int *addr) {
return offset;
}
int total_idat(int *addr) {
int total_idat(char *addr) {
int iend_found = 0;
int found_idat = 0;
int offset = 8;
unsigned long offset = 8;
int jump_offset = 0;
int header_type = 0;
while(iend_found == 0) {
@@ -72,8 +72,8 @@ int total_idat(int *addr) {
return found_idat;
}
int change_idat_content(int *addr, char *message, int accuracy, int offset) {
printf("Starting IDAT Tranform");
int change_idat_content(unsigned char *addr, char *message, int accuracy, unsigned long offset) {
printf("Starting IDAT Tranform\n");
if(accuracy > 4) {
printf("Warning, accuracy cannot be larger than 4");
return EXIT_FAILURE;
@@ -86,36 +86,47 @@ int change_idat_content(int *addr, char *message, int accuracy, int offset) {
return EXIT_FAILURE;
}
// Comment
int i = total_idat(addr);
printf("Total IDAT %d\n", i);
int idat_length = check_header_length(addr, offset);
printf("IDAT: %d\n", idat_length);
int prop_found = 0;
int size = 1;
int* idat_data = malloc(size * sizeof(int));
long size = 1;
long rounds = 0;
unsigned int* idat_data = malloc(size * sizeof(unsigned int));
for(int i = 0; i < idat_length; i++) {
idat_data[i] = addr[i+offset+8];
size++;
int* new_idat_data = realloc(idat_data, size * sizeof(unsigned int));
}
unsigned int temp_idat_data[size];
while(prop_found == 0) {
for(i = 0; i < idat_length; i++) {
idat_data[i] = addr[i+offset+8];
size++;
int* new_idat_data = realloc(idat_data, size * sizeof(int));
for(int i = 0; i < idat_length; i++) {
temp_idat_data[i] = idat_data[i];
}
int r = randombytes_uniform(5) + 1;
int j = randombytes_uniform(idat_length);
idat_data[j] = (idat_data[j] + r) % 255;
temp_idat_data[j] = (temp_idat_data[j] + r) % 255;
unsigned char crc_check[size+4];
int idat_header[] = { 0x49, 0x44, 0x41, 0x54 };
for(i = 0; i < 4; i++) {
unsigned int idat_header[] = { 0x49, 0x44, 0x41, 0x54 };
for(int i = 0; i < 4; i++) {
crc_check[i] = idat_header[i];
}
for(i = 0; i < size; i++) {
crc_check[i] = idat_data[i+4];
for(int i = 0; i < size; i++) {
crc_check[i] = temp_idat_data[i+4];
}
unsigned int crcnum = crc(crc_check, idat_length);
//printf("New CRC: %08X\n", crcnum);
//printf("Test: %X\n", crcnum >> (8*3));
unsigned int checked_crc = crcnum >> (8*3);
rounds++;
if(checked_crc == 61) {
printf("Found %d in %d rounds\n", checked_crc ,rounds);
printf("Full CRC: %08X\n", crcnum);
printf("Original: %02X\n", idat_data[j]);
printf("Change offset: %d to hex: %02X\n", j, temp_idat_data[j]);
prop_found = 1;
}
int crcnum = crc(crc_check, idat_length);
printf("New CRC: %08X\n", crcnum);
printf("Test: %X\n", crcnum >> (8*3));
prop_found = 1;
}
return 0;
@@ -123,10 +134,12 @@ int change_idat_content(int *addr, char *message, int accuracy, int offset) {
int main() {
FILE *fp;
int c;
int myArray[255] = {};
int i = 0;
int offset = 0;
unsigned int c;
//unsigned char myArray[838860];
unsigned char * myArray = NULL;
myArray = calloc(880388560, sizeof(char));
unsigned long i = 0;
unsigned long offset = 0;
char message[1];
if(sodium_init() == -1) {
return EXIT_FAILURE;