防debug的猫腻

反debug

一、防护debug

1、ptrace(process trace 进程跟踪)
    此函数提供了一个进程监听控制另一个进程,并且可以检测到被控制进程的内存和寄存器里面的数据。它可以用来实现断点调试和系统调用跟踪。debugserver就是用的它。
2、在代码中加入
    ptrace(PT_DENY_ATTACH,0,0,0)进行防护
    参数讲解
    /*
        arg1:ptrace要做的事情
        arg2:要操作的进程
        arg3(地址)、arg4(数据):取决于arg1
    */  

二、反-防护debug

1、下载fishhook
2、动态库注入
3、代码
//定义指针,保存原来的函数地址
int (*ptrace_p)(int _request, pid_t _pid, caddr_t _addr, int _data);

//定义自己的函数
int my_ptrace(int _request, pid_t _pid, caddr_t _addr, int _data){
    if (_request != PT_DENY_ATTACH) {//如果不是拒绝连接,就保持调用
        return ptrace_p(PT_DENY_ATTACH,_pid,_addr,_data);
    }
    //如果是拒绝加载,就不执行直接return
    return 0;
}

+(void)load
{
    //交换
    struct rebinding ptraceBd;//fishHook的绑定结构体
    ptraceBd.name = "ptrace";//函数名称
    ptraceBd.replacement = my_ptrace;//新函数地址
    ptraceBd.replaced = (void *)&ptrace_p;//原始函数地址的指针
    //弄一个数组,放fishHook的绑定结构体
    struct rebinding bindings[] = {ptraceBd};
    //fishHook的重绑定函数
    rebind_symbols(bindings, 1);
}

三、反-反-防护debug

1、其实就是反fishhook。
2、依据动态库的加载顺序,在app中加入反debug的动态库,这样因为顺序优先于黑客注入的动态库,所以又防住了。

四、小知识点

1、应用中的动态库的加载顺序-从上到下


动态库.jpg

2、最后才是加载我们APP的Mach-O.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,267评论 25 708
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 3,216评论 0 3
  • 最近两年有个概念特别火:“知识付费”。今年似乎有愈演愈烈之势,其迅猛发展的势头,丝毫没有任何衰退的迹象。在很多人看...
    面条君阅读 531评论 0 0
  • 收藏了这张照片。是因为我与在场二位同事,一位共建单位的科长,三位异地旅级军人的一个半小时谈话,值得回忆与记录,价值...
    林与木阅读 344评论 0 0
  • 一、准备工作 JRebel 版本7.1.5破解工具:https://github.com/ilanyu/Rever...
    归园小哥阅读 2,693评论 1 2

友情链接更多精彩内容