iOSDev

iOS逆向攻防-ptrace,fishhook,dlopen

2020-12-11  本文已影响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
}
上一篇下一篇

猜你喜欢

热点阅读