随笔分类 - 反调试
针对Windows下的反调试
反调试——11——检测TF标志寄存器
摘要:反调试——11——检测TF标志寄存器 在intel的x86寄存器中有一种叫标志寄存器: 标志寄存器中的TF(Trap Flag)位,CPU在执行完一条指令后,如果检测到标志寄存器的TF位为1,则会产生一个int 1中断,然后再将TF置为0,后进行int 1中断后继续执行。操作系统上可以视为异常。 再
阅读全文
反调试——10——检测进程和窗口
摘要:反调试——10——检测进程和窗口 检测一些常见的调试器的进程以及窗口是否存在也可以作为一种反调试的手段。 这个比较简单就直接上代码了: #include<Windows.h>#include<iostream>#include<tlhelp32.h>using namespace std;void
阅读全文
反调试——9——调试器原理
摘要:反调试——9——调试器原理 调试一个程序分两种情况: 1 打开这个程序。 2:这个程序已经是一个运行状态了,将其进程进行附加。 打开进程 通过打开运行进程方式来调试进程需要调用一个API: BOOL CreateProcessA( LPCSTR lpApplicationName, LPSTR lp
阅读全文
反调试——8——虚拟机检测
摘要:反调试——8——虚拟机检测 其实虚拟机检测也无外乎就是检测一些虚拟机特有的特征,然后来判断是否是在虚拟机里面,比如说这里(查看系统中运行的服务): 但是不能直接盲目的通过VMware这六个关键字母就判断是在虚拟机里面了,因为你的电脑如果开了虚拟机,也会有一些VMware开头的虚拟机服务: 所以我们必
阅读全文
反调试——7——CRC检测
摘要:反调试——7——CRC检测 CRC32: CRC的全称是循环冗余校验,作用是为了检测数据的完整性。 CRC32的检测原理: 程序被编译后,代码段是固定的,因为已经被写死了。 我们在调试程序的时候,打断点或者修改代码都会影响CRC32的值,这个时候只需要检测CRC32的某一时刻值和最初的CRC32值是
阅读全文
反调试——6——附加进程反调试(1)
摘要:反调试——6——附加进程反调试 经常在给调试器附加进程时进程直接崩溃了,比如说用比较常见的ollydbg没有加任何处理来附加DNF就会直接崩溃。 附加调试流程 debugger(调试器)在调用DebugActiveProcess来附加进程后,进程中有多少个线程,调试器就会发送多少个CREATE_TH
阅读全文
反调试——5——检测调试对象
摘要:反调试——5——检测调试对象 有一些内容采用的是WRK里面的定义。因为这个算是没有公开的文档,公开的不能这样使用。 查询父进程实现反调试 正常打开(双击运行)的程序的父进程是explorer.exe(资源管理器)(Windows的内置机制),通过查询父进程的ID是否是explorer.exe来判断程
阅读全文
反调试——4——硬件断点反调试
摘要:反调试——4——硬件断点反调试 首先需要明白什么是硬件断点,硬件断点其实是通过一个调试寄存器来实现的,这个调试寄存器是CPU上的东西,就是前面截图的这个东西,叫做Debug Registers,在intel手册卷3 17章第二节里面)。 DR0-DR3为设置断点的地址,DR4和DR5为保留内容。DR
阅读全文
反调试——3——反调试手段
摘要:反调试——3——反调试手段 反调试的方法有非常非常多,这里介绍一些比较常见的。 通过CloseHandle() 通过CloseHandle来试图关闭一个不存在的句柄,如果程序处于调试状态就会引发异常,否则没有任何反应。 这种机制在User下看起来就是调用一个CloseHandle,但是其实它的内部逻
阅读全文
反调试——2——深入NtQueryInformationProcess
摘要:反调试——2——深入NtQueryInformationProcess ProcessDebugPort这个标志位里面涉及到的东西比较复杂,所以要展开来讲。 CheckRemoteDebuggerPresent(): CheckRemoteDebuggerPresent function (debu
阅读全文
反调试——1——开始反调试
摘要:反调试——1——开始反调试 前面的文章可以算是反调试的一些铺垫了,现在算是正式开始。 调试器的工作流程 调试器调试分两种情况,一种是附加进程,一种是通过可执行程序来创建进程调试。 创建进程: 通过CreateProcess并设置为DEBUG_PROCESS模式来启动。 BOOL CreateProc
阅读全文
反调试——异常过滤器
摘要:反调试——异常过滤器 首先什么是异常:很简答就是CPU遇到了无法执行的指令。 异常处理的流程: CPU->操作系统->调试器(如果有)->VEH->SEH->异常过滤器(SetUnhandleExceptionFilter) 异常过滤器: https://docs.microsoft.com/en-
阅读全文
反调试——VEH
摘要:反调试——VEH VEH:向量化异常(vectored exception handle) VEH和SEH的区别 SEH是基于线程的,而VEH是基于进程的。 因为很清楚的可以看到SEH的数据结构是保存在栈空间的,直接在函数体内用push来处理,而VEH是以双链表的形式保存在堆里面。 异常触发后的顺序
阅读全文
反调试——断点原理
摘要:反调试——断点原理 进行在调试的时候会用到断点这个东西,那么断点的原理是什么,为什么可以断下来呢。 断点其实就是和异常有非常大的关联,首先针对异常的机制,如果发生了异常会先看有没有调试器调试器有没有接受该异常如果有就停在哪里等调试器处理,如果没有调试器就用SEH来处理。 也就是说根据异常以及接受是什
阅读全文
反调试——自定义异常处理器并添加调试器检测
摘要:反调试——自定义异常处理器并添加调试器检测 相当于对于前面的博客:https://www.cnblogs.com/Sna1lGo/p/14732048.html 自己写代码来实现异常处理。 异常处理机制: 出现异常,首先看有没有调试器有的话交给调试器处理,没有就传一堆信息给异常函数来处理 异常处理函
阅读全文
反调试——Windows异常-SEH
摘要:反调试——Windows异常-SEH 概念: SEH:Structured Exception Handling SEH是Windows默认的异常处理机制 如何使用 在代码中使用 __try__except()//结构类型的语句 __except()小括号里面填写表达式,表达式为真的时候执行里面
阅读全文