一个简单的反调试防护
最近看了一些反外挂方面的资料,里面描述了一个利用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加载测试一下。
作者:续写,
出处:http://www.cnblogs.com/cdh49/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得喜欢,对您很有帮助的话,可以点击右下角的推荐,以兹鼓励。