Talk:Nintendo DS Cart Whitelist: Difference between revisions
Jump to navigation
Jump to search
a footer |
|||
| Line 2: | Line 2: | ||
typedef struct { | typedef struct { | ||
char ID[4]; // An ID | char ID[4]; // An ID | ||
unsigned char pad[ | unsigned char pad[0x80]; | ||
unsigned long number; // number of titles | |||
} sHNHA_Header; | } sHNHA_Header; | ||
typedef struct { | typedef struct { | ||
char TID[4]; // Title ID | char TID[4]; // Title ID | ||
| Line 10: | Line 11: | ||
unsigned char SHA[2][20]; // the two SHA-1 sums | unsigned char SHA[2][20]; // the two SHA-1 sums | ||
} sHNHA_Title; | } sHNHA_Title; | ||
typedef struct { | typedef struct { | ||
unsigned char pad[0x18]; | unsigned char pad[0x18]; | ||
} sHNHA_Footer; | } sHNHA_Footer; | ||
--[[User:Ludo6431|Ludo6431]] 19: | --[[User:Ludo6431|Ludo6431]] 19:59, 5 August 2009 (UTC) | ||
== C dumper == | == C dumper == | ||
Latest revision as of 20:59, 5 August 2009
C representations
typedef struct {
char ID[4]; // An ID
unsigned char pad[0x80];
unsigned long number; // number of titles
} sHNHA_Header;
typedef struct {
char TID[4]; // Title ID
unsigned long ver; // Title version
unsigned char SHA[2][20]; // the two SHA-1 sums
} sHNHA_Title;
typedef struct {
unsigned char pad[0x18];
} sHNHA_Footer;
--Ludo6431 19:59, 5 August 2009 (UTC)
C dumper
void myprint(char *format, unsigned char *data, size_t datasize) {
while(datasize--)
printf(format, (unsigned char)*data++);
}
int main(int argc, char *argv[]) {
if(argc!=2) exit(1);
FILE *fd=fopen(argv[1], "rb");
if(!fd) exit(1);
sHNHA_Header header;
sHNHA_Title title;
sHNHA_Footer footer;
fread(&header, 1, 0x88, fd); // read the header
printf("\nnumber of titles : %d", header.number);
size_t count=header.number;
while(count--) { // read each title
fread(&title, 1, sizeof(sHNHA_Title), fd);
printf("\nTID=");
myprint("%c", title.TID, 4);
printf("\nver=%d", title.version);
printf("\nSHA=");
myprint("%02X", title.SHA[0], 20);
printf("\nSHA=");
myprint("%02X", title.SHA[1], 20);
}
fread(&footer, 1, sizeof(sHNHA_Footer), fd); // read the footer
if(fgetc(fd)!=EOF) printf("error");
fclose(fd);
}
--Ludo6431 19:24, 5 August 2009 (UTC)