美文网首页
iOS防护-反调试

iOS防护-反调试

作者: CDLOG | 来源:发表于2020-03-05 15:07 被阅读0次

1,通过调用ptrace函数可以阻止调试器依附。

其中x0-x3存储的为函数入参,x16存储的为函数编号,通过Apple提供的System Call Table 可以查出ptrace的编号为26,最后一句指令发起了系统调用。通过使用asm指令能够将汇编代码嵌入我们的函数中,构成反调试方法。

// 使用inline方式将函数在调用处强制展开,防止被hook和追踪符号
static __attribute__((always_inline)) void anti_debug()
{
    // 判断是否是ARM64处理器指令集
#ifdef __arm64__
    // volatile修饰符能够防止汇编指令被编译器忽略
    __asm__ __volatile__
    (
     "mov X0, #26\n"
     "mov X1, #31\n"
     "mov X2, #0\n"
     "mov X3, #0\n"
     "mov X4, #0\n"
     "mov w16, #0\n"
     "svc #0x80"
     );
#endif
}

调用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    anti_debug();
    return YES;
}

2,反调试检测

static __attribute__((always_inline)) void check_svc_integrity() {
    int pid;
    static jmp_buf protectionJMP;
#ifdef __arm64__
    __asm__ __volatile__("mov x0, #0\n"
            "mov w16, #20\n"
            "svc #0x80\n"
            "cmp x0, #0\n"
            "b.ne #24\n"
            
            "mov x1, #0\n"
            "mov sp, x1\n"
            "mov x29, x1\n"
            "mov x30, x1\n"
            "ret\n"
            
            "mov %[result], x0\n"
            : [result] "=r" (pid)
            :
            :
            );
    
    if(pid == 0) {
        longjmp(protectionJMP, 1);
    }
#endif
}
//需要头文件#include <unistd.h>
void AntiDebug_isatty() {
    if (isatty(1)) {
        exit(1);
    } else {
    }
}

调用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    check_svc_integrity();
    AntiDebug_isatty();
    check_svc_integrity();
    return YES;
}

参考https://juejin.im/post/5d9891abf265da5b926bc2b7?utm_source=gold_browser_extension

相关文章

  • iOS防护-反调试

    1,通过调用ptrace函数可以阻止调试器依附。 其中x0-x3存储的为函数入参,x16存储的为函数编号,通过Ap...

  • iOS防护----反调试

    在逆向和保护的过程中,总会涉及到反调试和反反调试的问题,这篇文章主要是总结一下几种常见的反调试手段。 当我们上线一...

  • 防tweak插件的猫腻

    防护方案-tweak插件的猫腻 一、防护tweak插件 二、反-防护tweak插件 二、反-反-防护tweak插件

  • iOS代码保护,数据加密,反调试,反注入,代码混淆

    iOS代码保护 数据加密 反调试,反注入 代码混淆 明天继续写。。。。。。

  • 防debug的猫腻

    反debug 一、防护debug 二、反-防护debug 三、反-反-防护debug 四、小知识点 1、应用中的动...

  • iOS 防止Ipa重签名

    内容来源于「iOS安全防护之重签名防护和sysctl反调试」。 校验描述文件信息 可以在启动时校验描述文件信息与打...

  • iOS防护 ptrace反调试

    在 iPhone 上运行 App,然后通过 GDB 进行动态调试,是大多数攻击者的首选。本文主要介绍两种反调试的方...

  • iOS 逆向 -- 动态调试防护

    ptrace debugserver通过ptrace函数调试app ptrace是系统函数,此函数提供一个进程去监...

  • iOS 调试

    iOS调试 - NSLog iOS调试 - 断点 iOS调试 - LLDB iOS调试 - EXC_BAD_ACC...

  • iOS逆向1024-防护进阶

    001--反调试sysctl(代码防护) // sysctl:检测app进程是否被附加 (防护进程被调试) 《程...

网友评论

      本文标题:iOS防护-反调试

      本文链接:https://www.haomeiwen.com/subject/rkzvpctx.html