亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xrpcinfo.c

?? Analyse Sigma Designs XRPC data. For analysis of RSA signed code
?? C
字號:
/* by petter wahlman, badeip@binary-art.net 
 * This code must be compiled with the MIRACL bignum library.
 */

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <getopt.h>
#include <libgen.h>
#include <sys/stat.h>
#include <miracl.h>

#ifndef SHA_DIGEST_LENGTH
  #define SHA_DIGEST_LENGTH      20
#endif

#define PAYLOAD_SUFFIX           "pld"

typedef unsigned char            u8;
typedef char                     s8;
typedef unsigned short           u16;
typedef short                    s16;
typedef unsigned int             u32;
typedef int                      s32;

static u32 opt_extract =         0;

const s8 *_xrpcid[] = { 
   "XRPC_ID_GETSERIAL",          // 0     return chip serial number to param0..3
   NULL,                         // 1     
   "XRPC_ID_GETRANDOM",          // 2     return 32bit of true random to param0
   "XRPC_ID_BONDINGCOMMENT",     // 3     return the bonding comment to param0..1
   "XRPC_ID_SHA1XOS",            // 4     outputs SHA-1 of burnt signablearea-xosMxy.bin to param0..4
   "XRPC_ID_XLOAD",              // 5     
   NULL,                         // 6
   NULL,                         // 7
   NULL,                         // 8
   NULL,                         // 9
   NULL,                         // 10
   NULL,                         // 11
   NULL,                         // 12
   NULL,                         // 13
   NULL,                         // 14
   "XRPC_ID_XLOAD",              // 15    deprecated in xosMa0
   NULL,                         // 16    
   "XRPC_ID_XUNLOAD",            // 17    not implemented in release build
   "XRPC_ID_CACHEDUMP",          // 18    bind/unbind certificate to xload.
   "XRPC_ID_REBOOT",             // 19    !!
   "XRPC_ID_XBIND",              // 20    signal or stop xtask
   "XRPC_ID_XSTART",             // 21    start xtask
   "XRPC_ID_XKILL",              // 22    stop an xtask
   "XRPC_ID_GETPROTECTION",      // 23    get protection registers 
   "XRPC_ID_GETBINDING",         // 24    get binding hash
   "XRPC_ID_GETOWNER",           // 25    get sector ownership hash
   "XRPC_ID_SETENHANCEDMODE",    // 26    enhanced mode
   "XRPC_ID_VERSION"             // 27    get XOS build version string (!= sha1)
};

const s8 *_cert_type[] = {       
   "XLOAD_CERTTYPE_NULL",        // 0
   "XLOAD_CERTTYPE_CPU",         // 1
   "XLOAD_CERTTYPE_XTASK1",      // 2
   "XLOAD_CERTTYPE_UCODE_VIDEO", // 3  
   "XLOAD_CERTTYPE_UCODE_AUDIO", // 4
   "XLOAD_CERTTYPE_UCODE_DEMUX", // 4
   "XLOAD_CERTTYPE_IH",          // 7
   "XLOAD_CERTTYPE_XTASK2",      // 7
   "XLOAD_CERTTYPE_XTASK3",      // 8
   "XLOAD_CERTTYPE_XTASK4",      // 9
   "XLOAD_CERTTYPE_XOSU"         // 0xff
};

struct xrpc_block_header {
   u32 callerid;
   u32 xrpcid;
   u32 payload_size;             // padded payload size
   u32 param0;
   u32 param1;
   u32 param2;
   u32 param3;
   u32 xload_size;               // xload payload + header (should be equal to file size?)
   struct {
      u16 id;
      u8 type;
      u8 sekid;
   };
   u8 payload_cert[256];         //
   u8 sigma_sign_cert[256];      //
   u8 signed_payload[256];       //
   u8 payload[0];
} __attribute__((packed));

static void sha1(u8 *ptr, u8 *h, u32 len)
{
   u32 i;
   sha sh; 

   shs_init(&sh);
   for (i = 0; i < len; i++)
      shs_process(&sh, ptr[i]);
   shs_hash(&sh, (s8 *)h);
}

static void print_hex(void *data, u32 len)
{
   u8 *ptr = (u8 *)data;
   u32 i;
   
   printf("   ");
   for (i = 0; i < len; i++) {
      if (i && (!(i % 32))) 
         printf("\n   ");
      printf("%02x ", ptr[i]);
   }
}

static void rev_array(u8 *s, u32 l)
{
   u32 i;
   u8 c;
   for (i = 0; i < l/2; i++) {
      c = s[l-1-i];
      s[l-1-i] = s[i];
      s[i] = c;
   }
}

static u32 extract_payload(s8 *source, s8 *buf, u32 len)
{
   s8 *dest;
   s32 fd, nw;
   u32 rc = 1;

   dest = malloc(strlen(source)+20);
   sprintf(dest, "%s.%s", source, PAYLOAD_SUFFIX);

   fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0644);
   if (-1 != fd) {
      nw = write(fd, buf, len); 
      if (nw == len)
         rc = 0;
      close(fd);
   }

   free(dest);
   if (rc) {
      if (-1 == nw)
         printf("\n\nerror, extract_payload: %s\n", strerror(errno));
      else
         printf("\n\nerror, extract_payload: %d of %d bytes written\n", nw, len);
      unlink(dest);
   }
   return rc;
}

int print_usage(void)
{
   printf("by petter wahlman. badeip@binary-art.net\n"
          "usage: xrpcinfo file [options]\n"
          "       -e      extract payload\n"
          "\n"
         );
   exit(1);
}

int main(int argc, char **argv)
{
   s32 fd, i;
   s8 *source;
   s8 arr[256];
   u8 shabuf[20];
   struct stat st;
   struct xrpc_block_header *xbh;
   big m,c,d,e,n,t,hash;
   u32 rc = 1;

   if (argc < 2) {
      fprintf(stderr, "usage: xrpcinfo <filename>\n");
      return rc;
   }
   
   while (1) {
      u32 c;
      s32 option_index = 0;
      static struct option long_options[] = { 
         { "extract", 1, 0, 'e' },
         { NULL,      0, 0,  0  }
      };  

      c = getopt_long(argc, argv, "e", long_options, &option_index);
      if (-1 == c)
         break;

      switch (c) {
         case 'e':
            opt_extract = 1;
            break;

         case 'h':
         default:
            print_usage();
      }
   }

   miracl *mip=mirsys(200, 0);
   for (i = 1; i < argc; i++) {
      source = argv[i];

      memset(arr, 0, sizeof(arr));
      memset(shabuf, 0, sizeof(shabuf));

      fd = open(source, O_RDONLY);
      if (-1 == fd) {
         perror(source);
         return rc;
      }

      fstat(fd, &st);
      if (st.st_size < sizeof(*xbh)) {
         fprintf(stderr, "\"%s\" is too small to contain the xbh header.\n", source);
         close(fd);
         return rc;
      }

      xbh = malloc(st.st_size);
      read(fd, xbh, st.st_size);

      printf("\nfile: \"%s\"\n",                   basename(source));
      printf("0x000 xrpcid:                        0x%08x (%s)\n", xbh->callerid, !xbh->callerid ? "XRPC_CALLERID_IGNORED" : "deprecated");
      printf("0x004 xrpcid:                        0x%08x (%s)\n", xbh->xrpcid, xbh->xrpcid < sizeof(_xrpcid)/sizeof(_xrpcid[0]) ? _xrpcid[xbh->xrpcid] : "NULL");
      printf("0x008 payload_size:                  0x%08x\n", xbh->payload_size);
      printf("0x00c param0:                        0x%08x (load address)\n", xbh->param0);
      printf("0x010 param1:                        0x%08x\n", xbh->param1);
      printf("0x014 param2:                        0x%08x\n", xbh->param2);
      printf("0x018 param3:                        0x%08x\n", xbh->param3);
      printf("0x01c xload_size:                    0x%08x\n", xbh->xload_size);

      printf("\ncertificate info:\n");
      printf("   ID:          0x%04x\n", xbh->id);
      printf("   type:        0x%02x (%s)\n", xbh->type, xbh->type < 0xa ? _cert_type[xbh->type] : _cert_type[0xa]);
      printf("   encryption:  0x%02x (%s)\n", xbh->sekid, xbh->sekid == 0xff ? "none" : "unknown");

      printf("\n0x024 payload certificate:\n"); 
         rev_array(xbh->payload_cert, sizeof(xbh->payload_cert));
         print_hex(xbh->payload_cert, sizeof(xbh->payload_cert));

      printf("\n\n0x124 sigma sign. of certificate:\n"); 
         rev_array(xbh->sigma_sign_cert, sizeof(xbh->sigma_sign_cert));
         print_hex(xbh->sigma_sign_cert, sizeof(xbh->sigma_sign_cert));

      printf("\n\n0x224 signed payload:\n");
         rev_array(xbh->signed_payload, sizeof(xbh->signed_payload));
         print_hex(xbh->signed_payload, sizeof(xbh->signed_payload));

      m = mirvar(0);
      c = mirvar(0);
      d = mirvar(0);
      e = mirvar(0);
      n = mirvar(0);
      t = mirvar(0);
      hash = mirvar(0);
      mip->IOBASE=16;

      cinstr(e, "10001");
      bytes_to_big(sizeof(xbh->payload_cert), (s8 *)xbh->payload_cert, n);
      bytes_to_big(sizeof(xbh->signed_payload), (s8 *)xbh->signed_payload, c);

      powmod(c,e,n,m);
      big_to_bytes(sizeof(arr), m, arr, 1);
      printf("\n\ndecrypted RSA signature:\n");
      print_hex(arr, sizeof(arr));
      putchar('\n');

      printf("\n%-23s", "padding: ");
      if ((*(u16 *)arr == 0x0100) && (*(u16 *)&arr[sizeof(arr)-SHA_DIGEST_LENGTH-17] == 0x00ff)) {
         printf("PKCS-1\n");

         printf("%-20s", "ASN.1:");
         print_hex(&arr[sizeof(arr)-SHA_DIGEST_LENGTH-15], 15);
      } else if ((*(u16 *) &arr[sizeof(arr)-2] == 0xcc33) && (*(u16 *)arr == 0xbb6b))
         printf("X9.31 (todo: adjust H(M) accordingly!)");
      else
         printf("unknown");

      printf("\n%-20s", "decrypted SHA1:");
      print_hex(&arr[sizeof(arr)-SHA_DIGEST_LENGTH], SHA_DIGEST_LENGTH);

      sha1(xbh->payload, shabuf, st.st_size - sizeof(*xbh));
      printf("\n%-20s", "calculated SHA1:");
      print_hex(shabuf, SHA_DIGEST_LENGTH);

      if (opt_extract) {
         rc = extract_payload(source, (s8 *)xbh->payload, st.st_size - sizeof(*xbh));
         if (!rc) {
            printf("\n%-20s", "extracted payload:");
            printf("   \"%s.%s\"\n\n", source, PAYLOAD_SUFFIX);
         }
      }

      if (st.st_size != xbh->xload_size)
         printf("\n\nerror, \"%s\" does not look like a valid xrpc file (0x%08lx != 0x%08x)\n", source, st.st_size, xbh->xload_size);

      free(xbh);
      close(fd);
   }
   putchar('\n');

   return rc;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文无字幕一区二区三区 | 亚洲黄色片在线观看| 香蕉加勒比综合久久| 国产美女在线观看一区| 在线观看91av| 亚洲免费成人av| 国产91综合一区在线观看| 5858s免费视频成人| 中文字幕一区二区不卡| 国产呦萝稀缺另类资源| 欧美另类久久久品| 亚洲精品国产精华液| 国产成人精品免费网站| 欧美一区二区三区系列电影| 成人免费小视频| 国产黑丝在线一区二区三区| 日韩欧美一二三区| 日韩激情视频在线观看| 91福利国产成人精品照片| 欧美激情资源网| 精品制服美女丁香| 日韩午夜在线影院| 日韩国产欧美在线视频| 欧美日韩精品久久久| 一区二区免费看| 色呦呦国产精品| 日韩中文欧美在线| 在线看国产一区二区| 亚洲视频在线一区| 91麻豆国产精品久久| 日韩美女视频一区| 99久久精品免费观看| 日韩理论片网站| 色88888久久久久久影院按摩 | 捆绑变态av一区二区三区| 欧美男人的天堂一二区| 日韩福利视频网| 日韩一区二区三区免费看 | 精品对白一区国产伦| 麻豆国产一区二区| 久久综合久久鬼色| 岛国一区二区三区| 亚洲欧美电影院| 国产三区在线成人av| 国产一区二区三区在线观看精品 | 91精品国产色综合久久| 麻豆成人91精品二区三区| www国产成人| 风间由美一区二区av101| 亚洲视频1区2区| 欧美亚一区二区| 日本免费在线视频不卡一不卡二| 欧美一卡二卡三卡四卡| 国产成a人亚洲| 亚洲乱码精品一二三四区日韩在线| 色呦呦网站一区| 捆绑调教一区二区三区| 亚洲国产高清不卡| 欧美三片在线视频观看| 精品亚洲免费视频| 1024成人网| 欧美一级高清片| 成人综合在线观看| 午夜久久电影网| 国产欧美一区二区精品性色超碰 | 亚洲黄色性网站| 日韩精品资源二区在线| 成人午夜激情在线| 日韩一区精品视频| 国产精品视频一二三区| 欧美精品精品一区| 成人黄色综合网站| 强制捆绑调教一区二区| 国产精品二区一区二区aⅴ污介绍| 欧美日韩黄色影视| www.色精品| 国精产品一区一区三区mba视频 | 99久久久精品| 人人狠狠综合久久亚洲| 中文字幕一区二区三中文字幕| 8v天堂国产在线一区二区| 91影院在线免费观看| 精品影院一区二区久久久| 亚洲伊人色欲综合网| 国产欧美久久久精品影院| 日韩一区二区三区在线视频| av中文一区二区三区| 国产精品99久久久久久久vr| 三级一区在线视频先锋| 亚洲激情自拍偷拍| 国产精品久久久久久户外露出| 日韩视频在线一区二区| 欧美日韩国产高清一区| 色综合中文字幕国产| 激情综合色综合久久| 日韩精品福利网| 亚洲一区视频在线| 美女一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国产日本一区二区| 久久精品夜色噜噜亚洲a∨| 日韩精品一区二区三区在线| 538prom精品视频线放| 欧洲生活片亚洲生活在线观看| 99久久99久久免费精品蜜臀| 国产福利91精品一区| 国产乱子伦视频一区二区三区| 久久精品久久精品| 美腿丝袜在线亚洲一区| 日韩成人一级大片| 另类综合日韩欧美亚洲| 麻豆精品国产91久久久久久| 麻豆精品一区二区综合av| 日本欧美肥老太交大片| 免费在线看一区| 蜜臀精品一区二区三区在线观看| 日韩精品亚洲一区| 老司机精品视频一区二区三区| 久久电影网站中文字幕| 天堂久久一区二区三区| 男人的j进女人的j一区| 麻豆成人91精品二区三区| 国产一区欧美二区| 成人久久视频在线观看| 色国产综合视频| 欧洲一区二区三区在线| 日韩色在线观看| 久久毛片高清国产| 综合亚洲深深色噜噜狠狠网站| 综合久久久久久久| 亚洲国产精品视频| 激情欧美一区二区| jlzzjlzz亚洲日本少妇| 色综合天天在线| 日韩欧美一级精品久久| 欧美激情在线一区二区三区| 亚洲四区在线观看| 日韩综合在线视频| 国产成人在线视频播放| 色婷婷综合五月| 在线综合亚洲欧美在线视频| 久久亚洲精品国产精品紫薇| 中文字幕一区二区三区四区不卡| 亚洲在线观看免费| 国产精品正在播放| 91久久国产最好的精华液| 日韩一区国产二区欧美三区| 久久久久久亚洲综合| 亚洲激情综合网| 国产一区二区不卡| 91官网在线免费观看| 欧美mv日韩mv亚洲| 亚洲老妇xxxxxx| 久久国产尿小便嘘嘘| 色域天天综合网| 久久众筹精品私拍模特| 亚洲福利视频一区二区| 国产麻豆成人精品| 欧美日韩不卡一区二区| 国产精品蜜臀在线观看| 另类小说色综合网站| 在线这里只有精品| 日本一区二区三区高清不卡| 午夜久久福利影院| 一本久久a久久精品亚洲| 欧美精品一区二区三| 亚洲大片精品永久免费| 99在线精品免费| www久久精品| 蜜臀99久久精品久久久久久软件| 色94色欧美sute亚洲13| 亚洲国产精华液网站w| 韩国v欧美v亚洲v日本v| 欧美欧美欧美欧美| 亚洲精品福利视频网站| 成人v精品蜜桃久久一区| 欧美精品一区二区蜜臀亚洲| 日韩不卡一区二区三区| 欧美亚洲一区二区三区四区| 国产精品色一区二区三区| 国产一二三精品| 精品免费国产一区二区三区四区| 高清成人免费视频| 久久亚洲一区二区三区四区| 日本不卡不码高清免费观看| 欧美精品在线视频| 亚洲成人精品一区二区| 色哦色哦哦色天天综合| 综合分类小说区另类春色亚洲小说欧美 | 久久嫩草精品久久久久| 蜜臀a∨国产成人精品| 欧美挠脚心视频网站| 婷婷六月综合亚洲| 欧美老肥妇做.爰bbww视频| 亚洲成人www| 欧美日韩不卡一区| 午夜一区二区三区在线观看| 欧美午夜精品理论片a级按摩| 亚洲一区免费观看| 欧美亚洲国产怡红院影院|