• 通过Hook NtOpenProcess 函数实现反调试


    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    通过Hook NtOpenProcess 函数实现反调试

    1. Hook思路设计

    2. Hook NtOpenProcess函数

    3. 效果演示

     

     

    1. Hook思路设计

      我们在Hook一个函数时,其jmp到原来的地址,具体操作如下:

      其实在后期,我们将原函数的执行代码修改为回调函数,在回调函数内部来恢复原来函数即可。

      

    2. Hook NtOpenProcess函数(代码2-5)

      现在我们Hook NtOpenProcess函数,实现进程保护,比如,OD、CE打开时,必须调用该函数来获取句柄,

      1)查看Hook的内容

        我们使用 windbg u nt!NtOpenProcess ,查看要hook的字节数,push 0x0c4h,正好五个字节,不用太多修改。

        

      2)过滤函数实现思路:

        ① 计算跳转地址:原函数地址 + 偏移 = 跳转函数地址,因此,很容易计算出 偏移 = 跳转函数地址-原函数地址。

        ② 备份原函数代码,pushad

        ③ 参数压栈

          这里是需要一定技巧的,pushad是压入八个寄存器,之后栈变化,因此我们要 push [esp,0x30] 连续四次

          

        ④ 在调用有关函数之后,判断函数正常返回还是直接跳转。

                  call MyOpenProcess;
                  cmp eax, 0; // 我处理成功了,其直接进行修改
                  popad;
                  jz __end;
                  // 原来被替换的代码
                  push  0x000000C4;
                  jmp retOpenProcessAddr;
               __end:
                  mov eax, 0;
                  ret 0x10;    

      3)伪造NtOpenProcess函数

        我们通过进程ID来判断是否是需要保护的进程,如果是需要保护的进程并且不是自己和系统调用,则直接返回。

        

    3. 测试效果

       我们以计算器为例,测试其效果如下,明显无法打开被调试进程。

      

  • 相关阅读:
    CSS基础(十七)--Padding和margin(内边距和外边距)
    tomcat动态网站
    http和nginx错误定义
    nginx动态网站
    nginx动静分离
    nginx负载均衡
    nginx介绍
    cobbler服务器
    apache网络配置
    网络源
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12664330.html
Copyright © 2020-2023  润新知