防止程序被调试

时间:2013-06-05 01:02:57

标签: c# security reverse-engineering

我正在互联网上阅读有关如何总是可以反编译所有内容的信息。将添加此方法使黑客更难反编译程序:

void PreventProgramFromBeingDebuged()
{
     Task.Factory.StartNew(()=>{

         while(true){
             var a = DateTime.Now;
             Thread.Sleep(10);
             var b = DateTime.Now;

             // if difference in time is greater than 1 second it means the program has stopped executing

             if( (b-a).TotalSeconds > 1)
               // then make appliction crash or make it behave the way it is not suppose to
         }      
     });
}

这种方法很明显但你可以通过信号量同步两个线程,使相同的代码更难理解。拥有这样的方法会让黑客的生活更加艰难吗?或者黑客是否不必调试程序才能对其进行反编译?

2 个答案:

答案 0 :(得分:3)

可以在不运行代码的情况下完成反编译。实际上,可以反编译,取出这段代码,重新编译。

答案 1 :(得分:3)

如果用户系统负载过重(内存或其他资源不足),您的代码实际执行的操作会导致程序崩溃。您没有阻止调试,而是引入了令人讨厌的Heisenbug

通常当您试图阻止某人对您的代码进行逆向工程时,您就会在实际客户面前解决问题。

编辑:只要用户计算机自动将时钟与时间源同步,您的程序就可能会崩溃。