Skip to content

Commit 9e7762e

Browse files
committed
add save as bplist
1 parent 7446832 commit 9e7762e

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

tsschecker/main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ static struct option longopts[] = {
5959
{ "raw", required_argument, NULL, 10 },
6060
{ "bbsnum", required_argument, NULL, 11 },
6161
{ "server-url", required_argument, NULL, 12 },
62+
{ "bplist", no_argument, NULL, 13 },
6263
{ "generator", required_argument, NULL, 'g' },
6364
{ NULL, 0, NULL, 0 }
6465
};
@@ -85,6 +86,7 @@ void cmd_help(){
8586
printf(" --sepnonce NONCE\t\tmanually specify SEP Nonce instead of using random ones (not required for saving blobs)\n");
8687
printf(" --bbsnum SNUM\t\tmanually specify BbSNUM in HEX to save valid BBTickets (not required for saving blobs)\n\n");
8788
printf(" --save-path PATH\t\tspecify output path for saving shsh blobs\n");
89+
printf(" --bplist\t\t\tsave shsh blob as binary plist (used with --save)\n");
8890
printf(" --server-url URL\t\tmanually specify TSS server url\n");
8991
printf(" --beta\t\t\trequest tickets for a beta instead of normal release (use with -o)\n");
9092
printf(" --list-devices\t\tlist all known devices\n");
@@ -157,6 +159,7 @@ int main(int argc, const char * argv[]) {
157159
dbglog = 1;
158160
idevicerestore_debug = 0;
159161
save_shshblobs = 0;
162+
save_bplist = 0;
160163
int optindex = 0;
161164
int opt = 0;
162165
long flags = 0;
@@ -284,6 +287,9 @@ int main(int argc, const char * argv[]) {
284287
case 12: // only long option: "server-url"
285288
serverUrl = optarg;
286289
break;
290+
case 13: // only long option: "bplist"
291+
save_bplist = 1;
292+
break;
287293
default:
288294
cmd_help();
289295
return -1;

tsschecker/tsschecker.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ int print_tss_request = 0;
104104
int print_tss_response = 0;
105105
int nocache = 0;
106106
int save_shshblobs = 0;
107+
int save_bplist = 0;
107108
const char *shshSavePath = "."DIRECTORY_DELIMITER_STR;
108109

109110
// iPhone & iPod touch (1st generations) do not use SHSH or APTicket.
@@ -1028,15 +1029,20 @@ int isManifestBufSignedForDevice(char *buildManifestBuffer, t_devicevals *devVal
10281029
plist_get_uint_val(pecid, &devVals->ecid);
10291030
char *cecid = ecid_to_string(devVals->ecid);
10301031

1031-
uint32_t size = 0;
1032-
char* data = NULL;
10331032
if (*devVals->generator)
10341033
plist_dict_set_item(apticket, "generator", plist_new_string(devVals->generator));
10351034
if (apticket2)
10361035
plist_dict_set_item(apticket, "updateInstall", apticket2);
10371036
if (apticket3)
10381037
plist_dict_set_item(apticket, "noNonce", apticket3);
1039-
plist_to_xml(apticket, &data, &size);
1038+
1039+
uint32_t size = 0;
1040+
char* data = NULL;
1041+
1042+
if (save_bplist)
1043+
plist_to_bin(apticket, &data, &size);
1044+
else
1045+
plist_to_xml(apticket, &data, &size);
10401046

10411047
char *apnonce = "";
10421048
size_t apnonceLen = 0;
@@ -1056,22 +1062,19 @@ int isManifestBufSignedForDevice(char *buildManifestBuffer, t_devicevals *devVal
10561062
snprintf(tmpDevicename, tmpDeviceNameSize, "%s", devVals->deviceModel);
10571063
if (devVals->deviceBoard) snprintf(tmpDevicename+strlen(tmpDevicename), tmpDeviceNameSize-strlen(tmpDevicename), "_%s",devVals->deviceBoard);
10581064

1059-
size_t fnamelen = strlen(shshSavePath) + 1 + strlen(cecid) + tmpDeviceNameSize + strlen(cpvers) + strlen(cbuild) + strlen(DIRECTORY_DELIMITER_STR"___-.shsh2") + 1;
1065+
size_t fnamelen = strlen(shshSavePath) + 1 + strlen(cecid) + tmpDeviceNameSize + strlen(cpvers) + strlen(cbuild) + strlen(DIRECTORY_DELIMITER_STR"___-.bshsh2") + 1;
10601066
fnamelen += devVals->parsedApnonceLen*2;
10611067

10621068
char *fname = malloc(fnamelen);
10631069
memset(fname, 0, fnamelen);
10641070
size_t prePathLen= strlen(shshSavePath);
10651071
if (shshSavePath[prePathLen-1] == DIRECTORY_DELIMITER_CHR) prePathLen--;
10661072
strncpy(fname, shshSavePath, prePathLen);
1067-
1068-
snprintf(fname+prePathLen, fnamelen, DIRECTORY_DELIMITER_STR"%s_%s_%s-%s_%s.shsh%s",cecid,tmpDevicename,cpvers,cbuild, apnonce, (*devVals->generator || apticket2) ? "2" : "");
1069-
1070-
1073+
snprintf(fname+prePathLen, fnamelen, DIRECTORY_DELIMITER_STR"%s_%s_%s-%s_%s.%Sshsh%s",cecid,tmpDevicename,cpvers,cbuild, apnonce, save_bplist ? "b" : "", (*devVals->generator || apticket2) ? "2" : "");
10711074
FILE *shshfile = fopen(fname, "wb");
10721075
if (!shshfile) error("[Error] can't save shsh at %s\n",fname);
10731076
else{
1074-
fwrite(data, strlen(data), 1, shshfile);
1077+
fwrite(data, size, 1, shshfile);
10751078
fclose(shshfile);
10761079
info("Saved shsh blobs!\n");
10771080
}

tsschecker/tsschecker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ extern int dbglog;
2424
extern int print_tss_response;
2525
extern int nocache;
2626
extern int save_shshblobs;
27+
extern int save_bplist;
2728
extern const char *shshSavePath;
2829

2930
struct bbdevice{

0 commit comments

Comments
 (0)