美文网首页iOSDev
iOS逆向攻防-ptrace,fishhook,dlopen

iOS逆向攻防-ptrace,fishhook,dlopen

作者: 你飞跃俊杰 | 来源:发表于2020-12-11 15:45 被阅读0次

    LLDB 调试了应用
    LLDB-debugsever(附加你的应用)
    Process trace(P trace)进程跟踪
    控制了当前进程

    一、防止LLDB-debugsever
    在commonLine项目#import <sys/ptrace.h> 点击去复制粘贴在.h文件中

        //利用ptrace防护debugserver
        /*
           arg1:ptrace 要做的事情
           arg2:要操作的进程的id
           arg3(地址)\arg4(数据):取决于第一个参数
           */
          ptrace(PT_DENY_ATTACH, 0, 0, 0);
        /*
         运行--附加闪退
         点击--正常使用没问题
         */
    

    二、防止hook ptrace

        void *handle = dlopen("/usr/lib/system/libsystem_kernel.dylib", RTLD_LAZY);
        int (*ptrace_p)(int _request, pid_t _pid,caddr_t _addr,int _data);
        ptrace_p = dlsym(handle, "ptrace");
        if (!ptrace_p) {
            return;
        }
        ptrace_p(PT_DENY_ATTACH, 0, 0, 0);
    

    fishhook代码

    //定义指针,保存原来的函数地址
    int(*ptrace_p)(int _request,pid_t _pid,caddr_t _addr,int _data);
    
    //自定义的ptrace
    int jun_ptrace (int _request,pid_t _pid,caddr_t _addr,int _data){
        if (_request != PT_DENY_ATTACH) {
            //如果不是拒绝附加
            return ptrace_p(_request, _pid, _addr, _data);
        }else{
            //如果是拒绝附加,就直接return 不执行。
            return 0;
        }
    }
    
    +(void)load{
        //fish_hook
        struct rebinding ptraceBd;
        ptraceBd.name = "ptrace";
        ptraceBd.replacement = jun_ptrace;//新函数的地址
        ptraceBd.replaced = (void *)&ptrace_p;//保留原始的函数地址
        
        struct rebinding binds[] = {ptraceBd};
        rebind_symbols(binds, 1);//数组,长度为1
    }
    

    相关文章

      网友评论

        本文标题:iOS逆向攻防-ptrace,fishhook,dlopen

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