81 lines
1.7 KiB
Objective-C
81 lines
1.7 KiB
Objective-C
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#define PROG_NAME "lockpick"
|
|
|
|
@interface MCPasscodeManager : NSObject
|
|
|
|
+ (MCPasscodeManager *)sharedManager;
|
|
|
|
+ (BOOL)isDeviceUnlocked;
|
|
+ (BOOL)isDeviceLocked;
|
|
- (BOOL)isPasscodeSet;
|
|
|
|
- (void)lockDevice;
|
|
- (BOOL)unlockDeviceWithPasscode:(id)passcode outError:(out NSError * _Nullable *)error;
|
|
|
|
@end
|
|
|
|
@interface SBLockdownManager : NSObject
|
|
|
|
+ (SBLockdownManager *)sharedInstance;
|
|
|
|
@end
|
|
|
|
void print_usage() {
|
|
printf("Usage: %s lock\n", PROG_NAME);
|
|
printf(" %s unlock [passcode]\n", PROG_NAME);
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
if(argc == 1) {
|
|
print_usage();
|
|
return 0;
|
|
}
|
|
|
|
if(strcmp(argv[1], "lock") == 0) {
|
|
if([MCPasscodeManager isDeviceUnlocked]) {
|
|
[[MCPasscodeManager sharedManager] lockDevice];
|
|
} else {
|
|
fprintf(stderr, "Device is already locked.\n");
|
|
return 1;
|
|
}
|
|
}
|
|
else if(strcmp(argv[1], "unlock") == 0) {
|
|
NSError *error = nil;
|
|
|
|
if(![MCPasscodeManager isDeviceUnlocked]) {
|
|
if(![MCPasscodeManager sharedManager].isPasscodeSet) {
|
|
[[MCPasscodeManager sharedManager] unlockDeviceWithPasscode:nil outError:&error];
|
|
if(error) {
|
|
fprintf(stderr, "Couldn't unlock device.\n");
|
|
return 1;
|
|
}
|
|
}
|
|
else if(argc < 3) {
|
|
fprintf(stderr, "This device requires a passcode.\n");
|
|
return 1;
|
|
}
|
|
|
|
NSString *givenPasscode = @(argv[2]);
|
|
|
|
[[MCPasscodeManager sharedManager] unlockDeviceWithPasscode:givenPasscode outError:&error];
|
|
if(error) {
|
|
if(error.code == 5011) {
|
|
fprintf(stderr, "Wrong passcode.\n");
|
|
return 1;
|
|
}
|
|
fprintf(stderr, "Unknown error code.\n");
|
|
return 1;
|
|
}
|
|
} else {
|
|
fprintf(stderr, "Device is already unlocked.\n");
|
|
return 1;
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
} |