diff --git a/firmware.bin b/firmware.bin new file mode 100644 index 0000000..3e478de Binary files /dev/null and b/firmware.bin differ diff --git a/include/change_key.h b/include/change_key.h new file mode 100644 index 0000000..d39ed56 --- /dev/null +++ b/include/change_key.h @@ -0,0 +1,32 @@ +/* changeKey.h */ + +/* Define for key offsets */ +#define KEY1 0x00005149 +#define KEY2 0x00005179 +#define KEY3 0x00005181 +#define KEY4 0x00005189 +#define KEY5 0x00005190 +#define KEY6 0x00005182 +#define KEY7 0x0000517a +#define KEY8 0x0000514a + +/* Define for prog1-8 offset */ +#define PROG1_OFFSET 0x0000539C +#define PROG2_OFFSET 0x000056BC +#define PROG3_OFFSET 0x000059DC +#define PROG4_OFFSET 0x00005CFC +#define PROG5_OFFSET 0x0000601C +#define PROG6_OFFSET 0x0000633C +#define PROG7_OFFSET 0x0000665C +#define PROG8_OFFSET 0x0006977C + +typedef struct key_prog key_prog; +struct key_prog +{ + int offset; + int key_settings[100][8]; +}; + + +void set_key_value(char* firmware_buffer, int key, int value); + diff --git a/include/firmware_handling.h b/include/firmware_handling.h new file mode 100644 index 0000000..07eeb91 --- /dev/null +++ b/include/firmware_handling.h @@ -0,0 +1,11 @@ +typedef struct fbuffer_t fbuffer_t; +struct fbuffer_t +{ + char* buffer; + int size; +}; + +/* reads in the firmware file into a buffer */ +fbuffer_t* get_firmware_buffer(char* filename); +void write_firmware_buffer(char* filename, fbuffer_t* p_fb); + diff --git a/src/change_key.c b/src/change_key.c new file mode 100644 index 0000000..9166d04 --- /dev/null +++ b/src/change_key.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include + +#include "../include/change_key.h" + +void set_key_value(char* firmware_buffer, int key, int value) { + memset(firmware_buffer + key, value, 1); +} diff --git a/src/firmware_handling.c b/src/firmware_handling.c new file mode 100644 index 0000000..2447fa1 --- /dev/null +++ b/src/firmware_handling.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include + +#include "../include/firmware_handling.h" + +fbuffer_t* get_firmware_buffer(char* filename) { + + fbuffer_t buffer; + fbuffer_t* p_fb = &buffer; + + FILE *firmware = fopen(filename, "rb"); + if(!firmware) { + perror("Error while reading in Firmware File.\r\nExiting."); + exit(EXIT_FAILURE); + } + + struct stat sb; + if(stat(filename, &sb) == -1) { + perror("Error while reading Firmware metadata.\r\nExiting."); + exit(EXIT_FAILURE); + } + + p_fb->size = sb.st_size; + p_fb->buffer = malloc(p_fb->size); + fread(p_fb->buffer, p_fb->size, 1, firmware); + + /* for testing if the buffer could be read correclty */ + // printf("buffer size: %d", p_fb->size); + + fclose(firmware); + + return p_fb; +} + +void write_firmware_buffer(char* filename, fbuffer_t* p_fb) { + + FILE *firmware_file = fopen(filename, "wb+"); + if(!firmware_file) { + perror("Error while opening in Firmware File.\r\nExiting."); + exit(EXIT_FAILURE); + } + + fwrite(p_fb->buffer, p_fb->size, 1, firmware_file); + + fclose(firmware_file); +} diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..e5ba17b --- /dev/null +++ b/src/main.c @@ -0,0 +1,27 @@ +#include +#include +#include + +#include "../include/change_key.h" +#include "../include/firmware_handling.h" + +int main (int argc, char *argv[]) +{ + fbuffer_t* p_fb = get_firmware_buffer(argv[1]); + + set_key_value(p_fb->buffer, KEY8, 0x1E); + + /* for debugging -> print content of buffer to terminal */ + /* + for(int i = 0; isize; i++){ + putc(isprint(fb->buffer[i]) ? fb->buffer[i] : '.', stdout); + } + */ + + char str[50]; + + sprintf(str, "new_%s", argv[1]); + + write_firmware_buffer(str, p_fb); + return 0; +}