sysctl --1反反调试

2019-05-16  本文已影响0人  yxc木易星辰

//Monkey就是用这种方式进攻的

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

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

3、编码

#import "XCInject.h"

#import "fishhook.h"

#import <sys/sysctl.h>

//原始函数的地址

int (*sysctl_p)(int*,u_int,void*,size_t*,void*,size_t);

//自定义函数

intmySysctl(int*name,u_intnamelen,void*info,size_t*infosize,void*newInfo,size_tnewinfosize) {

    if(namelen ==4&&

        name[0] ==CTL_KERN&&

        name[1] ==KERN_PROC&&

        name[3] ==KERN_PROC_PID&&

        info && (int)*infosize ==sizeof(structkinfo_proc)) {

        interr =sysctl_p(name, namelen, info, infosize, newInfo, newinfosize);

        //拿出info 做判断

        structkinfo_proc*myInfo = (structkinfo_proc*)info;

        if((myInfo ->kp_proc.p_flag&P_TRACED) !=0) {

            //使用异或反

            myInfo->kp_proc.p_flag^=P_TRACED;

            returnerr;

        }

    }

    returnsysctl_p(name, namelen, info, infosize, newInfo, newinfosize);

}

//如下方法即可对简单的sysctl 反调试进行破解

//对于sysctl反调试1进行该动态库注入后,可以检测到debugserver且可进行调试

+ (void)load {

    rebind_symbols((struct rebinding[1]){{"sysctl",mySysctl,(void *)&sysctl_p}}, 1);

}

@end

上一篇下一篇

猜你喜欢

热点阅读