int main(int argc, char **argv) { FILE *fp; unsigned long sum = 0; unsigned long res = 0; if(argc != 2) { printf("Usage: cfgmgr_cksum filename\n\n"); return 1; } fp = fopen(argv[1], "rw+"); if(!cs_is_tagged(fp)) { printf("File doesn't contain the checksum, adding\n"); if(cs_calc_sum(fp, &sum, 0)) { printf("Calculated checksum is %lX\n", sum); if(cs_set_sum(fp, sum, 0)) printf("Added successfully\n"); else printf("Adding failed\n"); } } else { printf("File already contains the checksum, verifying\n"); if(cs_calc_sum(fp, &sum, 1)) { printf("Calculated checksum is %lX\n", sum); cs_get_sum(fp, &res); printf("Saved checksum is %lX\n", res); if(sum != res) printf("Checksum validation failed!\n"); else printf("Checksum validation successful!\n"); } } fclose(fp); return 0; }
int main(int argc, char **argv) { FILE *fp; unsigned long magic = 0; unsigned long address = 0; unsigned long length = 0; unsigned long checksum1 = 0; unsigned long pad = 0; unsigned long entry = 0; unsigned long sum = 0; unsigned char buf[4] = "\x0\x0\x0\x0"; long end_of_code_pos = 0; long entry_point_pos = 0; unsigned char code_buf[128]; int code_pos; unsigned long kernel_address = 0; long kernel_pos = 0; long kernel_length = 0; if(argc != 2) { printf("Usage: adam2_dump filename\n\n"); return 1; } fp = fopen(argv[1], "r"); /* */ printf("\n\tADAM2 application Header:\n\n"); magic=app_read_magic(fp); printf("ADAM2 Magic= 0x%08x",magic); if (magic == ADAM2_MAGIC) { printf (" - GOOD!\n"); } else { printf (" - BAD!\n"); }; printf("\n\tADAM2 application Record #1 Header:\n\n"); length=app_read_length(fp); printf("LENGTH = 0x%08x (%d)\n",length,length); address=app_read_address(fp); printf("ADDRESS = 0x%08x\n",address); end_of_code_pos=length+(3*4); /* Skip header+code */ if (length>0) { printf (".......... DATA\n"); }; checksum1=app_read_data(fp, end_of_code_pos); printf("CHECKSUM = 0x%08x\n",checksum1); printf("\n\tADAM2 application Record #2 Header:"); #if defined DEBUG printf(" at 0x%08x",end_of_code_pos); #endif printf ("\n\n"); pad=app_read_data(fp, end_of_code_pos+4); printf("LENGTH = 0x%08x\n",pad); entry=app_read_data(fp, end_of_code_pos+8); printf("ADDRSESS = 0x%08x (entry point)\n",entry); sum=app_read_data(fp, end_of_code_pos+0xc); printf("CHECKSUM = 0x%08x\n",sum); /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Some MIPS black magic there... */ entry_point_pos = entry - address + (3*4); /* skip header */ #if defined DEBUG printf ("D:Code enrty point position = 0x%08x\n",entry_point_pos); #endif fseek(fp, entry_point_pos, SEEK_SET); fread(code_buf, 128, 1, fp); code_pos=30; /* try to find 0x9402 */ while (code_pos<120) { if (code_buf[code_pos]==0x02 && code_buf[code_pos+1]==0x94) { break; }; code_pos++; }; #if defined DEBUG printf("D:Found 0x9402 at %x\n",code_pos); #endif if (code_buf[code_pos+8]==0x00 && code_buf[code_pos+9]==0x00 && /* 0x0000 .half */ code_buf[code_pos+6]==0x06 && code_buf[code_pos+7]==0x0d ) /* _jal xxxxxx_ */ { buf[2] = code_buf[code_pos-8]; buf[3] = code_buf[code_pos-7]; buf[0] = code_buf[code_pos-4]; buf[1] = code_buf[code_pos-3]; if (buf[1]>0x7f) { buf[2]--; }; /* correct for _addui_ */ }; kernel_address=*((unsigned long*)buf); /* Indianity hazard ! */ #if DEBUG printf("D:Kernel image address = 0x%08x\n", kernel_address); #endif kernel_pos = kernel_address - address + (3*4); /* skip header */ if (kernel_address) { kernel_length=end_of_code_pos - kernel_pos; printf ("\nCompressed kernel image found!\n"); printf ("Offset = 0x%x (%d), Length = 0x%x (%d)\n", kernel_pos, kernel_pos, kernel_length, kernel_length); fseek(fp, kernel_pos, SEEK_SET); fread(code_buf, 128, 1, fp); if (code_buf[0]=='7' && code_buf[1]=='z') { printf ("LZMA z7 compressed image.\n" ); } else { if (code_buf[10]=='z' && code_buf[11]=='i' && code_buf[12]=='m') { printf ("Zlib compressed image.\n"); } else { printf ("Unknown image format.\n"); } } } else { printf("\nKernel image not found!\n"); }; if (cs_is_tagged(fp)) { printf ("File is signed by TI_chksum.\n"); } else { printf ("File isn't signed by TI_chksum.\n"); }; fclose(fp); return 0; };