美文网首页ios 逆向开发
《iOS防护04》破解sysctl防护

《iOS防护04》破解sysctl防护

作者: 不仅仅是个程序猿 | 来源:发表于2020-10-31 12:54 被阅读0次

    sysctl是系统函数,所以仍然使用fishhook。

    破解ptrace防护一样,创建动态库,在动态库中进行hook,关键代码如下:

    #import "SysctlInject.h"
    #import <sys/sysctl.h>
    #import "fishhook.h"
    
    @implementation SysctlInject
    
    //声明一个原系统函数的指针,保存原函数地址
    int (*sys_sysctl)(int *, u_int, void *, size_t *, void *, size_t);
    
    //自定义函数
    int my_sysctl(int *name, u_int namelen, void *info, size_t *infoSize, void *newInfo, size_t newInfoSize) {
        if (namelen == 4 &&
            name[0] == CTL_KERN &&
            name[1] == KERN_PROC &&
            name[2] == KERN_PROC_PID&&
            info &&
            *infoSize == sizeof(struct kinfo_proc)) {
            int err = sys_sysctl(name, namelen, info, infoSize, newInfo, newInfoSize);
            struct kinfo_proc *myInfo = (struct kinfo_proc *)info;
            if ((myInfo->kp_proc.p_flag & P_TRACED) != 0) {  //被调试
                myInfo->kp_proc.p_flag ^= P_TRACED;    //使用异或进行取反
            }
            return err;
        }
        return sys_sysctl(name, namelen, info, infoSize, newInfo, newInfoSize);
    }
    
    + (void)load {
        struct rebinding rebind;
        rebind.name = "sysctl";
        rebind.replacement = my_sysctl;
        rebind.replaced = (void *)&sys_sysctl;
        
        struct rebinding bind[] = {rebind};
        rebind_symbols(bind, 1);
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:《iOS防护04》破解sysctl防护

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