调试本质就是下一个int3(异常),有了异常,调试器会接收到异常,就会给处理的机会,处理前先找调试器,处理完再找调试器,找两次调试器。利用驱动层的函数能够把线程设置调试下隐藏,本意是进程不调试,但带来的后果是当这个线程本身是附加了调试器的,本来一个int3的断点,产生的是异常,会产生异常到了这,调试器又不处理

因为是个未公开函数,就要先加载导出表

void GameProtect::AntiDebug()
{
    auto hNtdll = LoadLibrary(L"ntdll.dll");
    if (hNtdll)
    {
        ZwSetInfomationThreadPtr ZwSetInfomationThread;
        ZwSetInfomationThread = (ZwSetInfomationThreadPtr)GetProcAddress(hNtdll, "ZwSetInformationThread");
        ZwSetInfomationThread((DWORD)GetCurrentThread(), 0x11, 0x0, 0x0);
    }
}

测试:下一个int3断点直接GG

因为下一个int3断点本质上会产生一个异常 ,异常找调试器发现调试器不响应,回程序里处理,程序处理不了,再找调试器,调试器不理它就崩溃了

使用这几个函数要猥琐,不然逆向分析的时候一看字符串表直接GG,最好是直接用登录器把地址传进去

调试器的检测:

通过BeingDebugged检测:

//检测PEB结构BOOL debug = IsDebuggerPresent();BOOL _debug;CheckRemoteDebuggerPresent(GetCurrentProcess(), &_debug);if (debug)AfxMessageBox(L"IsDebuggerPresent 检测到调试器");if (_debug)AfxMessageBox(L"CheckRemoteDebuggerPresent 检测到调试器");

编译运行 用x32DBG 附加:

就检测到了.

一般的调试器 比如OD 会把这个地方处理掉 它有插件能把这个地方修复了,本质上就是将beingdebug字段处理了

一般BeingDebugged的检测用处不大   汇编代码直接改0 或者HOOK这个函数也可以过掉

OD的插件:

通过内核属性检测调试器:
原则上来讲 应用层 访问内核态是拿不到的,不过微软还是留了个口子。

利用NtQueryInformationProcess获取信息:

NTSTATUS(NTAPI* NtQueryInformationProcess)(HANDLE ProcessHandle,//进程句柄DWORD ProcessInformationClass,//信息类型PVOID ProcessInformation,//信息指针ULONG ProcessInformationLength,//信息指针大小PULONG ReturnLength  //写入缓冲区大小)
PROCESSINFOCLASS 0x7   DebugPort
PROCESSINFOCLASS 0x1E  DebugObjectHandle
PROCESSINFOCLASS 0x1F  DebugFlags

第三个参数是一个枚举类型 但用DWORD也没错

BOOL GameProtect::CheckDebugByNT()
{//DWORD debug_port = 0;NtQueryInfomationProcess(HProcess, 0x07, &debug_port, sizeof(debug_port), 0x0);if (debug_port)return TRUE;HANDLE debug_object = 0;//检测DBGOBJECTNtQueryInfomationProcess(HProcess, 0x1E, &debug_object, sizeof(debug_object), 0x0);if (debug_object)return TRUE;BOOL debug_flags = 1;NtQueryInfomationProcess(HProcess, 0x1F, &debug_flags, sizeof(debug_flags), 0x0);if (!debug_flags)return TRUE;return FALSE;
}

反调试(设置主线程为隐藏调试破坏调试通道调试器的检测)相关推荐

  1. 交换机putty怎么调试_弱电工程视频监控系统设计、安装、调试、维护全过程讲解...

    智能化弱电工程视频监控系统是我们每个人都熟知的系统,但是对于一些刚加入的小伙伴来说,可能还有许多陌生的地方,今天简单的总结一下,视频监控系统方面的知识点. 关于视频监控系统的方面的知识,今天重点讲解四 ...

  2. 主线程调用过环境检查以及防止游戏崩溃

    先给大家说两种情况,也许这些情况都是你遇见过的. 案例一,逆向软件,调试游戏找到了某个CALL,我们编写DLL,把这个call写入到DLL中,然后把DLL注入到软件内部,对这个CALL进行调用,发生游 ...

  3. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  4. Appium_调试腾讯订制开发的X5版本webview_调试微信_调试手机QQ空间等

    = 调试才是开发效率的核心. 感觉现在的工具真心还是难用,虽然是可以用了,也只是"可以用"而以. 腾讯这一版本感觉还是进步了很多,虽然还是不够好啊. = 一.过时的文档,大家别走弯 ...

  5. 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )

    文章目录 一.ptrace 函数族 1.进程附着 2.进程脱离 3.进程数据读写权限 4.进程对应的主线程寄存器读写 5.单步调试 6.继续向后执行 二.ptrace 函数族状态转换 一.ptrace ...

  6. 易语言反游戏检测call-游戏Call技术-(绑定主线程调用CALL技术)

    我们在写call调用网络游戏进程里call时候,经常外挂辅助程序运行工作一段时间后,网络游戏就会断线或崩溃掉,但是经过检查, 发现自己调用CALL的代码又没发现写错误,这到底是怎么呢?{:100_16 ...

  7. 【Android 逆向】IDA 工具使用 ( 交叉引用数量设置 | 调试设置 )

    文章目录 一.交叉引用数量设置 二.调试设置 一.交叉引用数量设置 选择 " 菜单栏 / Options / General - " 选项 , 弹出如下对话框 , 显示交叉引用深度 ...

  8. java 设置主线程_Java线程编程中的主线程讲解

    当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的.主线程的重要性体现在两方面: 它是产生其他子线程的线程: 通常它必须最后完成执 ...

  9. DEV-C++调试设置

    昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时.所以今天痛下决心,一定要写下DEV-C++设置调试的过程, ...

最新文章

  1. SAP MM 巴西采购订单中的NCM Code
  2. python bootstrap-fileinput示例_bootstrapfileinput实现文件自动上传
  3. vue项目cordova打包的android应用
  4. python模块-paramiko
  5. 如何安装inf类型驱动程序 inno
  6. HDU 1022 Train Problem I stack 基础题
  7. 获取当前程序的相当路径
  8. VsVim - Shortcut Key (快捷键)
  9. 如何平衡工作与生活?真相在此
  10. 数据结构 三:树(Tree)
  11. 抖音直播间千川投放有用吗?直播间投放分析有什么技巧
  12. 手把手教你用 Java 实现word、excel、ppt、txt等办公文件在线预览功能!
  13. 面向对象软件设计原则【JAVA】(开闭原则、里氏代换、依赖倒转、接口隔离、迪米特法则、合成复用原则)
  14. 目标规划问题与LINGO求解
  15. php中控制段落的行距,CSS_CSS教程(7):网页段落行间距控制的实例,本文主要讲解如何用CSS控制网 - phpStudy...
  16. win10无线网卡驱动怎么安装【系统天地】
  17. android 连续播放动画,华为充电动画循环播放
  18. 白色强人粤语第11集HTML5,《白色强人第二季》
  19. Maleimide-PEG-Biotin,Biotin-PEG-MAL,生物素PEG马来酰亚胺用于生物分子检测
  20. 设计模式(Java随笔)—备忘录模式

热门文章

  1. 计算机毕业设计Java老年人日间照料中心管理系统(源码+mysql数据库+系统+lw文档)
  2. (数据结构)二叉树层次遍历
  3. datax-web Windows10以开发者模式部署
  4. BitComet 端口阻塞解决方法
  5. 【多目标跟踪任务——评价指标】
  6. 程序员熬夜保健实用大全
  7. 对应生成树的基本回路_远程团圆数学题库答(08秋格局)北大.doc
  8. 为什么程序员“找不到对象”!几张图告诉你
  9. MVC JsonResult的用法
  10. jsDeliver+github打造属于自己的图床