lock/unlock the device
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.7KB

  1. #include <stdio.h>
  2. #include <string.h>
  3. #import <Foundation/Foundation.h>
  4. #define PROG_NAME "lockpick"
  5. @interface MCPasscodeManager : NSObject
  6. + (MCPasscodeManager *)sharedManager;
  7. + (BOOL)isDeviceUnlocked;
  8. + (BOOL)isDeviceLocked;
  9. - (BOOL)isPasscodeSet;
  10. - (void)lockDevice;
  11. - (BOOL)unlockDeviceWithPasscode:(id)passcode outError:(out NSError * _Nullable *)error;
  12. @end
  13. @interface SBLockdownManager : NSObject
  14. + (SBLockdownManager *)sharedInstance;
  15. @end
  16. void print_usage() {
  17. printf("Usage: %s lock\n", PROG_NAME);
  18. printf(" %s unlock [passcode]\n", PROG_NAME);
  19. }
  20. int main(int argc, char *argv[]) {
  21. if(argc == 1) {
  22. print_usage();
  23. return 0;
  24. }
  25. if(strcmp(argv[1], "lock") == 0) {
  26. if([MCPasscodeManager isDeviceUnlocked]) {
  27. [[MCPasscodeManager sharedManager] lockDevice];
  28. } else {
  29. fprintf(stderr, "Device is already locked.\n");
  30. return 1;
  31. }
  32. }
  33. else if(strcmp(argv[1], "unlock") == 0) {
  34. NSError *error = nil;
  35. if(![MCPasscodeManager isDeviceUnlocked]) {
  36. if(![MCPasscodeManager sharedManager].isPasscodeSet) {
  37. [[MCPasscodeManager sharedManager] unlockDeviceWithPasscode:nil outError:&error];
  38. if(error) {
  39. fprintf(stderr, "Couldn't unlock device.\n");
  40. return 1;
  41. }
  42. }
  43. else if(argc < 3) {
  44. fprintf(stderr, "This device requires a passcode.\n");
  45. return 1;
  46. }
  47. NSString *givenPasscode = @(argv[2]);
  48. [[MCPasscodeManager sharedManager] unlockDeviceWithPasscode:givenPasscode outError:&error];
  49. if(error) {
  50. if(error.code == 5011) {
  51. fprintf(stderr, "Wrong passcode.\n");
  52. return 1;
  53. }
  54. fprintf(stderr, "Unknown error code.\n");
  55. return 1;
  56. }
  57. } else {
  58. fprintf(stderr, "Device is already unlocked.\n");
  59. return 1;
  60. }
  61. }
  62. return 0;
  63. }