一个简单的反调试防护

最近看了一些反外挂方面的资料,里面描述了一个利用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加载测试一下。

原文地址:https://www.cnblogs.com/cdh49/p/3688489.html