From 3cffdddf743ac36281083876e48f801caffc2299 Mon Sep 17 00:00:00 2001 From: Michael Gernoth Date: Sat, 31 Jan 2009 23:15:48 +0100 Subject: [PATCH 1/1] don't assume that some bytes are the filetype --- extract.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/extract.c b/extract.c index feab68f..6c30bd2 100644 --- a/extract.c +++ b/extract.c @@ -15,7 +15,8 @@ void extract_files(unsigned char *fw, int len) { unsigned char *pos; - unsigned int type, length; + unsigned int length; + unsigned char unknown[5]; char *name; pos = fw + 0x28; @@ -24,10 +25,11 @@ void extract_files(unsigned char *fw, int len) pos = fw + *((unsigned int*)pos); while (pos < (fw + len)) { - type = *((unsigned int*)pos); - pos += 4; - /* ??? */ - pos++; + unknown[0] = *pos; pos++; + unknown[1] = *pos; pos++; + unknown[2] = *pos; pos++; + unknown[3] = *pos; pos++; + unknown[4] = *pos; pos++; length = *((unsigned int*)pos); pos += 4; name = (char*)pos; @@ -37,7 +39,9 @@ void extract_files(unsigned char *fw, int len) printf("EOF reached\n"); break; } - printf("%s: type: 0x%x, length: %d", name, type, length); + printf("%s: unknown: %02x %02x %02x %02x %02x, length: %d", + name, unknown[0], unknown[1], unknown[2], unknown[3], + unknown[4], length); if (length > 0) { write_file(name, pos, length); -- 2.39.5