Skip to content

Commit 754e824

Browse files
committed
Support reading generator in addition to the ApNonce (jailbroken devices only)
1 parent 274403e commit 754e824

File tree

8 files changed

+337
-171
lines changed

8 files changed

+337
-171
lines changed

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/airsquared/blobsaver/app/Controller.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import javafx.beans.property.SimpleBooleanProperty;
2727
import javafx.beans.value.ObservableValue;
2828
import javafx.collections.FXCollections;
29-
import javafx.concurrent.Task;
3029
import javafx.concurrent.WorkerStateEvent;
3130
import javafx.event.Event;
3231
import javafx.event.EventHandler;
@@ -487,9 +486,9 @@ public void showWiki() {
487486
public void readInfo() {
488487
try {
489488
// read ECID
490-
ecidField.setText(Long.toHexString(LibimobiledeviceUtil.getECID(true)).toUpperCase());
489+
ecidField.setText(Long.toHexString(LibimobiledeviceUtil.getECID()).toUpperCase());
491490
// read device model
492-
String deviceIdentifier = LibimobiledeviceUtil.getDeviceModelIdentifier(true);
491+
String deviceIdentifier = LibimobiledeviceUtil.getDeviceModelIdentifier();
493492
try {
494493
deviceTypeChoiceBox.setValue(Devices.getDeviceType(deviceIdentifier));
495494
deviceModelChoiceBox.setValue(Devices.identifierToModel(deviceIdentifier));
@@ -499,10 +498,11 @@ public void readInfo() {
499498
}
500499
// read board config
501500
if (!boardConfigField.isDisabled()) {
502-
boardConfigField.setText(LibimobiledeviceUtil.getBoardConfig(true));
501+
boardConfigField.setText(LibimobiledeviceUtil.getBoardConfig());
503502
}
504503
} catch (LibimobiledeviceUtil.LibimobiledeviceException e) {
505504
System.err.println(e.getMessage()); // don't need full stack trace
505+
e.showErrorAlert();
506506
} catch (Throwable e) {
507507
e.printStackTrace();
508508
Utils.showReportableError("Error: unable to register native methods", Utils.exceptionToString(e));
@@ -514,7 +514,7 @@ public void readApnonce() {
514514
alert1.setHeaderText("Read apnonce from connected device");
515515
alert1.setContentText("blobsaver can read the apnonce from a connected device.\n\n" +
516516
"It is recommended, but not required to set a generator on your device prior to reading the apnonce. " +
517-
"If you set a generator, make sure to take note of that generator so you can use it in the future.\n\n" +
517+
"blobsaver can read the generator from your device to confirm whether the generator was set properly (currently jailbroken devices only, it will return a random value on unjailbroken devices).\n\n" +
518518
"Please connect your device and hit \"OK\" to begin. Your device will enter recovery mode while retrieving the apnonce and will automatically reboot to normal mode when complete.\n\n" +
519519
"NOTE: an apnonce is only required for devices with an A12 processor or newer.");
520520
Optional<ButtonType> result = alert1.showAndWait();
@@ -524,19 +524,25 @@ public void readApnonce() {
524524
alert2.setHeaderText("Reading apnonce from connected device...");
525525
Utils.forEachButton(alert2, button -> button.setDisable(true));
526526

527-
Task<String> getApnonceTask = LibimobiledeviceUtil.createGetApnonceTask();
528-
getApnonceTask.setOnSucceeded(event -> {
529-
apnonceField.setText(getApnonceTask.getValue());
527+
LibimobiledeviceUtil.GetApnonceTask task = LibimobiledeviceUtil.createGetApnonceTask();
528+
task.setOnSucceeded(event -> {
529+
apnonceField.setText(task.getApnonceResult());
530+
generatorField.setText(task.getGeneratorResult());
530531
Utils.forEachButton(alert2, button -> button.setDisable(false));
531532
});
532-
getApnonceTask.setOnFailed(event -> {
533-
getApnonceTask.getException().printStackTrace();
533+
task.setOnFailed(event -> {
534+
task.getException().printStackTrace();
535+
if (task.getException() instanceof LibimobiledeviceUtil.LibimobiledeviceException e) {
536+
e.showErrorAlert();
537+
} else {
538+
Utils.showReportableError("An unknown error occurred.", Utils.exceptionToString(task.getException()));
539+
}
534540
Utils.forEachButton(alert2, button -> button.setDisable(false));
535541
alert2.close();
536542
});
537543

538-
alert2.contentTextProperty().bind(getApnonceTask.messageProperty());
539-
Utils.executeInThreadPool(getApnonceTask);
544+
alert2.contentTextProperty().bind(task.messageProperty());
545+
Utils.executeInThreadPool(task);
540546
alert2.show();
541547
}
542548

@@ -548,9 +554,10 @@ public void exitRecoveryHandler() {
548554
return;
549555
}
550556
try {
551-
LibimobiledeviceUtil.exitRecovery(irecvClient.getValue(), true);
557+
LibimobiledeviceUtil.exitRecovery(irecvClient.getValue());
552558
} catch (LibimobiledeviceUtil.LibimobiledeviceException e) {
553559
e.printStackTrace();
560+
e.showErrorAlert();
554561
}
555562
}
556563

0 commit comments

Comments
 (0)