📄 parse_xrpc.c
字号:
/* (c) Petter Wahlman, aka BadEIP */#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <libgen.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#define s8 char#define u8 unsigned char#define s32 int#define u32 unsigned int#define XRPC_CALLERID_IGNORED 0struct xrpc_block_header { u32 callerid; // 0x00 u32 xrpcid; // 0x04 u32 param0; // 0x08 u32 param1; // 0x0c u32 param2; // 0x10 u32 param3; // 0x14 u32 param4; // 0x18 u32 headerandblocksize; // 0x1c};s8 *caller[] = { "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)}; int main(int argc, char **argv){ s32 fd, i; s8 *target; struct stat st; struct xrpc_block_header xbh; if (argc < 2) { fprintf(stderr, "usage: xrpcinfo <filename>\n"); return 1; } for (i = 1; i < argc; i++) { target = argv[i]; fd = open(target, O_RDONLY); if (-1 == fd) { perror(target); return 1; } fstat(fd, &st); read(fd, &xbh, sizeof(xbh)); if (st.st_size != xbh.headerandblocksize) { fprintf(stderr, "error, \"%s\" does not look like a valid xrpc file\n", target); } else { printf("\nfile: \"%s\"\n", basename(target)); printf("callerid: 0x%08x (%s)\n", xbh.xrpcid, !xbh.xrpcid ? "XRPC_CALLERID_IGNORED" : "deprecated"); printf("xrpcid: 0x%08x (%s)\n", xbh.xrpcid, caller[xbh.xrpcid]); printf("param0: 0x%08x\n", xbh.param0); printf("param1: 0x%08x\n", xbh.param1); printf("param2: 0x%08x\n", xbh.param2); printf("param3: 0x%08x\n", xbh.param3); printf("param4: 0x%08x\n", xbh.param4); printf("size: 0x%08x\n", xbh.headerandblocksize); } close(fd); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -