ptrace&sysctl 双重反反调试

1、创建一个动态库Inject,引入fishhook及sysctl、MyPtraceHeader头文件

2、创建一个继承自NSObject的类 如 XCInject

3、编码

#import "XCAntDebug.h"

#import "XCPtrance.h"

#import <sys/sysctl.h>

@implementation XCAntDebug

static dispatch_source_t timer;

//检测是否被调试

BOOLisDebugger() {

    //控制码

    int name[4];//里面放字节码,查询信息

    name[0] =CTL_KERN;//内核查看

    name[1] =KERN_PROC;//查询进程

    name[2] = KERN_PROC_PID;//传递的参数是进程的ID(PID)

    name[3] =getpid();//PID的值

    struct kinfo_proc info; //接受进程查询结果的结构体

    size_tinfo_size =sizeof(info);//结构体的大小

    interror =sysctl(name,sizeof(name)/sizeof(*name), &info, &info_size,0,0);

    assert(error == 0);//0就是没有错误,其他就是错误码

    return((info.kp_proc.p_flag&P_TRACED) !=0);

}

voiddebugCheck(){

    timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));

    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0.0 * NSEC_PER_SEC);

    dispatch_source_set_event_handler(timer, ^{

        if(isDebugger()) {

            //        exit(0);

            NSLog(@"有debugServer");

        }else{

            NSLog(@"无debugServer");

        }

    });

    dispatch_resume(timer);

}

+ (void)load {

    NSLog(@"XCAntDebug *************");

    debugCheck();

    ptrace(PT_DENY_ATTACH, 0, 0, 0);

}

@end

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、导入头文件 #import "ViewController.h"#import @interface View...
    yxc木易星辰阅读 404评论 0 0
  • Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继...
    YangPu阅读 355评论 0 0
  • Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继...
    好雨知时节浩宇阅读 3,855评论 2 5
  • 在逆向和保护的过程中,总会涉及到反调试和反反调试的问题,这篇文章主要是总结一下几种常见的反调试手段。 当我们上线一...
    含笑州阅读 2,846评论 1 4
  • 一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退...
    这是个方块阅读 278评论 0 1