• 一个简单的反调试防护


    最近看了一些反外挂方面的资料,里面描述了一个利用SEH结构来反调试的方式。我自己写代码测试了一下, 用官网下载的OD加载程序,确实起到了反调试的作用。我就兴冲冲的封装了一下,然后给同事测试,结果他用他的改良版OD居然能无碍的调试,我当时就泪奔了。话不多说,直接上代码。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 //以类成员函数作为回调 
     6 template<typename Obj, typename fun> 
     7 class ClassExc 
     8 { 
     9 public: 
    10     ClassExc(Obj* o, fun f) : o_(o), f_(f) 
    11     { 
    12     }
    13 
    14     void TriggerException() 
    15     { 
    16         _try 
    17         { 
    18             int i = 0; 
    19             int a = 0/i; 
    20         } 
    21         _except(1) 
    22         {
    23 
    24             (o_->*f_)(); 
    25         } 
    26     }
    27 
    28 private: 
    29     fun f_; 
    30     Obj *o_; 
    31 };
    32 
    33 // 普通函数作为回调 
    34 template<typename fun> 
    35 class NormalExc 
    36 { 
    37 public: 
    38     NormalExc(fun f) : f_(f) 
    39     { 
    40     }
    41 
    42     void TriggerException() 
    43     { 
    44         _try 
    45         { 
    46             int i = 0; 
    47             int a = 0/i; 
    48         } 
    49         _except(1) 
    50         {
    51 
    52             (*f_)(); 
    53         } 
    54     } 
    55 private: 
    56     fun f_; 
    57 };
    58 
    59 class My 
    60 { 
    61 public: 
    62     void Test() 
    63     { 
    64         cout << "MY::Test" << endl; 
    65     } 
    66 };
    67 
    68 void NormalExcHandle() 
    69 { 
    70     cout << "NormalExcHandle" << endl; 
    71 }
    72 
    73 int main() 
    74 { 
    75     My m; 
    76     typedef void (My::*myfun)();
    77 
    78     myfun f= &My::Test;
    79 
    80     ClassExc<My, myfun> e(&m, f); 
    81     e.TriggerException(); // 触发异常,流程转到了f
    82 
    83     NormalExc<void (*)()> ne(NormalExcHandle); 
    84     ne.TriggerException(); // 出发异常, 流程转到了NormalExcHandle
    85 
    86     getchar(); 
    87     return 0; 
    88 }

    两个类模板,ClassExc类模板允许以一个类的成员函数作为回调,当异常发生时。NormalExc类模板允许以一个普通函数作为回调,当异常发生时。

    代码非常简单,大家可以用一般的OD加载测试一下。

  • 相关阅读:
    排序算法研究
    SqlParameters参数
    winfrom项目
    方法参数中有out和in关键字是什么意思?
    在C#中使用存储过程
    11Book系列多表群操作
    7drf过滤排序分页异常处理
    12RBAC基于角色的访问控制
    5drf路由组件
    8drf自动生成接口文档
  • 原文地址:https://www.cnblogs.com/cdh49/p/3688489.html
Copyright © 2020-2023  润新知