Example #1
0
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;
}
Example #2
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;
};