Files
lockpick/main.m
2020-01-03 02:21:46 -05:00

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;
}