反调试——异常过滤器
2021-08-28 16:29
45 查看
反调试——异常过滤器
首先什么是异常:很简答就是CPU遇到了无法执行的指令。
异常处理的流程:
CPU->操作系统->调试器(如果有)->VEH->SEH->异常过滤器(SetUnhandleExceptionFilter)
异常过滤器:
https://docs.microsoft.com/en-us/windows/win32/api/errhandlingapi/nf-errhandlingapi-setunhandledexceptionfilter 这里微软的官方文档url地址。
#include<Windows.h>
#include<iostream>
using namespace std;
LONG WINAPI myExceptionFilter(_EXCEPTION_POINTERS* ExceptionInfo)
{
MessageBoxA(0, 0, 0, 0);
ExceptionInfo->ContextRecord->Eip += 3;
return EXCEPTION_CONTINUE_EXECUTION;
}
int main()
{
SetUnhandledExceptionFilter(myExceptionFilter);
__asm
{
mov eax,0
mov [eax],1
}
MessageBoxA(NULL, NULL, "跳过了异常代码", MB_OK);
system("pause");
return 0;
}
这段代码就是添加了一个异常过滤器。
__asm
{
mov eax,0
mov [eax],1
}
这一段就是故意触发一个异常来跳转到自己写的异常过滤器函数里面
LONG WINAPI myExceptionFilter(_EXCEPTION_POINTERS* ExceptionInfo)
{
MessageBoxA(0, 0, 0, 0);
ExceptionInfo->ContextRecord->Eip += 3;
return EXCEPTION_CONTINUE_EXECUTION;
}
这一段就是微软提供的异常过滤器的函数格式,参数ExceptionInfo是触发异常的指令的当时环境,也就是寄存器啊各种类型
然后返回值也很重要返回值可以标识是继续执行异常还是跳过异常还是什么样。等等。
有关异常处理的机制经常被用到反调试里面,因为它故意触发异常然后写异常处理来检测是否有调试器。
相关文章推荐
- ARM调试中的出现异常的定位方法
- A has no properties - Ext调试异常
- 异常处理与调试 - 零基础入门学习Delphi50
- spark远程调试异常解决
- XCode的 Stack Trace,调试时抛出异常,定位到某一行代码
- 解决异常:使用genymotion调试程序出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- MVC使用Exception过滤器自定义处理Action的的异常
- 异常处理与调试3 - 零基础入门学习Delphi52
- JSON调试找不到 net.sf.ezmorph.Morpher与org/apache/commons/collections/map/ListOrderedMap这个异常。
- 异常过滤器
- 让delphi在调试时不监视指定异常
- Eclipse插件开发中使用日志跟踪调试异常
- Delphi异常处理与调试
- 真机调试异常--The identity used to sign the executable is no longer valid
- 2种基于异常机制的反调试方法
- 软件调试笔记17 - 中断和异常管理
- C#中的异常过滤器&try catch语块儿
- SylixOS异常调试的手段
- c\c++出bug调试技巧 —— 如何利用windbg + dump + map分析程序异常 .
- Python调试与异常