Как мне реализовать анти-отладку в моем коде? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь понять, как реализовать анти-отладку, начав с самого простого метода PT_DENY_ATTACH, и пытаюсь отладить его с помощью lldb.Но я понятия не имею, в какой части моей задачи-c мне нужно ее реализовать.

Я написал простой код задачи-c для страницы входа.

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *password;

@property (weak, nonatomic) IBOutlet UITextField *usernameTextField;
@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;
@property (weak, nonatomic) IBOutlet UILabel *notificationLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.username = @"Sally";
    self.password = @"password123";

    self.passwordTextField.secureTextEntry = YES;

}
- (IBAction)loginWasPressed:(id)sender {

    BOOL isUsersEqual = [self.username isEqualToString:[self.usernameTextField text]];
    BOOL isPasswordEqual = [self.password isEqualToString:[self.passwordTextField text]];

    if (isUsersEqual && isPasswordEqual) {

        NSLog(@"SUCCESS!");
        [self.notificationLabel setText:@"Logged In!"];

    }
    else {

        NSLog(@"FAILURE!");
        [self.notificationLabel setText:@"Incorrect!"];

    }
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    [self.view endEditing:YES];

}

@end

Какреализовать анти-отладку?

1 Ответ

0 голосов
/ 07 февраля 2019

Прежде всего, ptrace () не является частью общедоступного API на iOS.В соответствии с политикой публикации AppStore использование закрытых API запрещено, и их использование может привести к отклонению приложения из AppStore, поэтому нам нужно вызывать его через указатель на функцию с помощью dlsym.

Полный код:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <dlfcn.h>
#import <sys/types.h>

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
void anti_debug() {
    ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(RTLD_SELF, "ptrace");
    ptrace_ptr(31, 0, 0, 0); // PTRACE_DENY_ATTACH = 31
}

int main(int argc, char * argv[]) {

    #ifndef DEBUG
    anti_debug();
    #endif
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

Затем вы можете изменить целевую конфигурацию сборки на Release и проверить, не отключен ли Xcode.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...