Skip to content

Commit

Permalink
added a function to get boardid from model
Browse files Browse the repository at this point in the history
properly searching buildmanifest now
  • Loading branch information
tihmstar committed Dec 30, 2016
1 parent fafb6b2 commit d459dfa
Show file tree
Hide file tree
Showing 8 changed files with 182 additions and 12 deletions.
1 change: 1 addition & 0 deletions configure.ac
Expand Up @@ -18,6 +18,7 @@ PKG_CHECK_MODULES(libplist, libplist >= 1.0)
PKG_CHECK_MODULES(libcurl, libcurl >= 1.0)
PKG_CHECK_MODULES(libfragmentzip, libfragmentzip >= 1.0)
PKG_CHECK_MODULES(libcrypto, libcrypto >= 1.0)
PKG_CHECK_MODULES(libirecovery, libirecovery >= 1.0)


# Checks for header files.
Expand Down
4 changes: 4 additions & 0 deletions tsschecker.xcodeproj/project.pbxproj
Expand Up @@ -12,6 +12,7 @@
87EB90A31C2940CD002CEE70 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 87EB90A21C2940CD002CEE70 /* main.c */; };
87EB90AC1C2940FB002CEE70 /* libplist.3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 87EB90AB1C2940FB002CEE70 /* libplist.3.dylib */; };
87EB90AE1C294108002CEE70 /* libcurl.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 87EB90AD1C294108002CEE70 /* libcurl.tbd */; };
87F1F6791E168ABE00301726 /* libirecovery.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 87F1F6781E168ABE00301726 /* libirecovery.2.dylib */; };
87F927AC1C3E44CE00343510 /* tsschecker.c in Sources */ = {isa = PBXBuildFile; fileRef = 87F927AA1C3E44CE00343510 /* tsschecker.c */; };
87F927AF1C3E455200343510 /* download.c in Sources */ = {isa = PBXBuildFile; fileRef = 87F927AD1C3E455200343510 /* download.c */; };
87F927B21C3E490F00343510 /* jsmn.c in Sources */ = {isa = PBXBuildFile; fileRef = 87F927B01C3E490F00343510 /* jsmn.c */; };
Expand Down Expand Up @@ -39,6 +40,7 @@
87EB90A21C2940CD002CEE70 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
87EB90AB1C2940FB002CEE70 /* libplist.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libplist.3.dylib; path = ../../../../../usr/local/lib/libplist.3.dylib; sourceTree = "<group>"; };
87EB90AD1C294108002CEE70 /* libcurl.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libcurl.tbd; path = usr/lib/libcurl.tbd; sourceTree = SDKROOT; };
87F1F6781E168ABE00301726 /* libirecovery.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libirecovery.2.dylib; path = ../../../../usr/local/lib/libirecovery.2.dylib; sourceTree = "<group>"; };
87F927AA1C3E44CE00343510 /* tsschecker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tsschecker.c; sourceTree = "<group>"; };
87F927AB1C3E44CE00343510 /* tsschecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tsschecker.h; sourceTree = "<group>"; };
87F927AD1C3E455200343510 /* download.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = download.c; sourceTree = "<group>"; };
Expand All @@ -52,6 +54,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
87F1F6791E168ABE00301726 /* libirecovery.2.dylib in Frameworks */,
87CD9A3D1E0F35FE00E566B7 /* libfragmentzip.0.dylib in Frameworks */,
87EB90AE1C294108002CEE70 /* libcurl.tbd in Frameworks */,
87EB90AC1C2940FB002CEE70 /* libplist.3.dylib in Frameworks */,
Expand All @@ -64,6 +67,7 @@
87CD9A3B1E0F35FE00E566B7 /* Frameworks */ = {
isa = PBXGroup;
children = (
87F1F6781E168ABE00301726 /* libirecovery.2.dylib */,
87CD9A3C1E0F35FE00E566B7 /* libfragmentzip.0.dylib */,
);
name = Frameworks;
Expand Down
Binary file not shown.
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/main.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "308"
endingLineNumber = "308"
landmarkName = "main()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/tsschecker.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "585"
endingLineNumber = "585"
landmarkName = "isManifestBufSignedForDevice()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/tsschecker.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "217"
endingLineNumber = "217"
landmarkName = "objectForKey()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/main.c"
timestampString = "504793933.64202"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "153"
endingLineNumber = "153"
landmarkName = "main()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/tsschecker.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "214"
endingLineNumber = "214"
landmarkName = "objectForKey()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/tsschecker.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "160"
endingLineNumber = "160"
landmarkName = "getBoardconfigFromModel()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "tsschecker/tsschecker.c"
timestampString = "504794898.994122"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "494"
endingLineNumber = "494"
landmarkName = "tssrequest()"
landmarkType = "9">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>
4 changes: 2 additions & 2 deletions tsschecker/Makefile.am
@@ -1,5 +1,5 @@
AM_CFLAGS = $(libplist_CFLAGS) $(libfragmentzip_CFLAGS) $(libcurl_CFLAGS) $(libcrypto_CFLAGS)
AM_LDFLAGS = $(libplist_LIBS) $(libfragmentzip_LIBS) $(libcurl_LIBS) $(libcrypto_LIBS) -lm
AM_CFLAGS = $(libplist_CFLAGS) $(libfragmentzip_CFLAGS) $(libcurl_CFLAGS) $(libcrypto_CFLAGS) $(libirecovery_CFLAGS)
AM_LDFLAGS = $(libplist_LIBS) $(libfragmentzip_LIBS) $(libcurl_LIBS) $(libcrypto_LIBS) $(libirecovery_LIBS) -lm

if NOMAIN
noinst_LTLIBRARIES = libtsschecker.la
Expand Down
7 changes: 2 additions & 5 deletions tsschecker/main.c
Expand Up @@ -149,7 +149,6 @@ int main(int argc, const char * argv[]) {
int err = 0;
int isSigned = 0;


dbglog = 1;
idevicerestore_debug = 0;
save_shshblobs = 0;
Expand All @@ -163,10 +162,8 @@ int main(int argc, const char * argv[]) {

char *apnonce = 0;
char *sepnonce = 0;
t_devicevals devVals;
t_iosVersion versVals;
memset(&versVals, 0, sizeof(versVals));
memset(&devVals, 0, sizeof(devVals));
t_devicevals devVals = {0};
t_iosVersion versVals = {0};

if (argc == 1){
cmd_help();
Expand Down
54 changes: 49 additions & 5 deletions tsschecker/tsschecker.c
Expand Up @@ -16,6 +16,7 @@
#include "jsmn.h"
#include "download.h"
#include <libfragmentzip/libfragmentzip.h>
#include <libirecovery.h>
#include "tss.h"

#ifdef __APPLE__
Expand Down Expand Up @@ -149,6 +150,52 @@ char *getOtaJson(){
return fJson;
}

#pragma mark more get functions

const char *getBoardconfigFromModel(const char *model){

irecv_device_t table = irecv_devices_get_all();
//iterate through table until find correct entry
//table is terminated with {NULL, NULL, -1, -1} entry, return that if device not found
while (table->product_type && strncmp(model, table->product_type, strlen(model)) != 0)
table++;

return table->hardware_model;
}

plist_t getBuildidentity(plist_t buildManifest, const char *model, int isUpdateInstall){
plist_t rt = NULL;
#define reterror(a ... ) {error(a); rt = NULL; goto error;}

plist_t buildidentities = plist_dict_get_item(buildManifest, "BuildIdentities");
if (!buildidentities || plist_get_node_type(buildidentities) != PLIST_ARRAY){
reterror("[TSSR] Error: could not get BuildIdentities\n");
}
for (int i=0; i<plist_array_get_size(buildidentities); i++) {
rt = plist_array_get_item(buildidentities, i);
if (!rt || plist_get_node_type(rt) != PLIST_DICT){
reterror("[TSSR] Error: could not get id%d\n",i);
}
plist_t infodict = plist_dict_get_item(rt, "Info");
if (!infodict || plist_get_node_type(infodict) != PLIST_DICT){
reterror("[TSSR] Error: could not get infodict\n");
}
plist_t RestoreBehavior = plist_dict_get_item(infodict, "RestoreBehavior");
if (!RestoreBehavior || plist_get_node_type(RestoreBehavior) != PLIST_STRING){
reterror("[TSSR] Error: could not get RestoreBehavior\n");
}
char *string = NULL;
plist_get_string_val(RestoreBehavior, &string);
if (strncmp(string, (isUpdateInstall ? "" : "Erase"), strlen(string)) == 0)
break;
else
rt = NULL;
}

error:
return rt;
}

#pragma mark json functions

void printJString(jsmntok_t *str, char * firmwarejson){
Expand Down Expand Up @@ -446,11 +493,8 @@ int tssrequest(plist_t *tssrequest, char *buildManifest, char *device, t_devicev

plist_from_xml(buildManifest, (unsigned)strlen(buildManifest), &manifest);

plist_t buildidentities = plist_dict_get_item(manifest, "BuildIdentities");
if (!buildidentities || plist_get_node_type(buildidentities) != PLIST_ARRAY){
reterror("[TSSR] Error: could not get BuildIdentities\n");
}
plist_t id0 = plist_array_get_item(buildidentities, 0);

plist_t id0 = getBuildidentity(manifest, device, devVals->isUpgradeInstall);
if (!id0 || plist_get_node_type(id0) != PLIST_DICT){
reterror("[TSSR] Error: could not get id0\n");
}
Expand Down
5 changes: 5 additions & 0 deletions tsschecker/tsschecker.h
Expand Up @@ -19,6 +19,7 @@ extern "C" {
#include "tss.h"
#include "all_tsschecker.h"
#define noncelen 20
#warning TODO THIS IS WRONG FOR iPHONE7

extern int dbglog;
extern int print_tss_response;
Expand All @@ -33,6 +34,7 @@ typedef struct{
char *apnonce;
char *sepnonce;
char generator[19];
int isUpgradeInstall : 1;
}t_devicevals;

typedef enum{
Expand Down Expand Up @@ -71,6 +73,9 @@ int checkFirmwareForDeviceExists(char *device, t_iosVersion version, char *firmw

int downloadPartialzip(const char *url, const char *file, const char *dst);

const char *getBoardconfigFromModel(const char *model);
plist_t getBuildidentity(plist_t buildManifest, const char *model, int isUpdateInstall);


#ifdef __cplusplus
}
Expand Down

0 comments on commit d459dfa

Please sign in to comment.