C# 防止程序被调试
我在网上读到关于如何总是可以反编译大部分内容的文章。添加此方法是否会使黑客更难反编译程序:C# 防止程序被调试,c#,security,reverse-engineering,C#,Security,Reverse Engineering,我在网上读到关于如何总是可以反编译大部分内容的文章。添加此方法是否会使黑客更难反编译程序: void PreventProgramFromBeingDebuged() { Task.Factory.StartNew(()=>{ while(true){ var a = DateTime.Now; Thread.Sleep(10); var b = DateTime.Now;
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
}
});
}
这种方法是显而易见的,但是你可以用一个信号量同步两个线程,这使得同样的代码更难理解。拥有这样的方法会让黑客的生活更加艰难吗?或者黑客不必调试程序就能反编译它 反编译可以在不运行代码的情况下完成。实际上,可以反编译,取出代码,重新编译。反编译可以在不运行代码的情况下完成。实际上,您可以反编译、取出代码、重新编译。如果用户系统负载过大(内存或其他资源不足),您的代码实际上会导致程序崩溃。您引入的不是阻止调试,而是一个令人讨厌的错误 通常,当您试图阻止某人对代码进行反向工程时,您是在为实际客户的问题做准备
编辑:当用户计算机自动将时钟与时间源同步时,您的程序也可能崩溃。如果用户系统负载过重(内存或其他资源不足),您的代码实际上会导致程序崩溃。您引入的不是阻止调试,而是一个令人讨厌的错误 通常,当您试图阻止某人对代码进行反向工程时,您是在为实际客户的问题做准备
编辑:当用户计算机自动将时钟与时间源同步时,您的程序也可能崩溃。+1谢谢!如果我让代码的其他几个部分依赖于该代码,会发生什么。例如,我使用反射来查看该方法是否存在,并将该有效性放置1000次。黑客必须找到我检查过的所有1000个入口,对吗?因此,如果黑客删除了该代码,那么他将不得不找到我检查的所有地方,这对他来说更加困难。然后我会改变if条件,这样它就不会出现奇怪的行为。添加该函数的目的是让别人无法查看你的代码,对吗?正如Keith所指出的,由于您的代码不一定要运行才能进行反编译,那么显然添加1000次该函数不会有什么不同。你需要在谷歌上搜索的是如何混淆你的代码。不管你做什么,只要有人下定决心,他们都能破解,关键是通过像模糊化这样的事情让它变得足够痛苦,并且不要在上面投入太多时间。因为一旦它破裂,所有用于阻止破裂的时间都被浪费了。唯一成功的预防措施是基于硬件的保护,如在playstation上。要困难得多,但即使如此,也不是100%+1谢谢!如果我让代码的其他几个部分依赖于该代码,会发生什么。例如,我使用反射来查看该方法是否存在,并将该有效性放置1000次。黑客必须找到我检查过的所有1000个入口,对吗?因此,如果黑客删除了该代码,那么他将不得不找到我检查的所有地方,这对他来说更加困难。然后我会改变if条件,这样它就不会出现奇怪的行为。添加该函数的目的是让别人无法查看你的代码,对吗?正如Keith所指出的,由于您的代码不一定要运行才能进行反编译,那么显然添加1000次该函数不会有什么不同。你需要在谷歌上搜索的是如何混淆你的代码。不管你做什么,只要有人下定决心,他们都能破解,关键是通过像模糊化这样的事情让它变得足够痛苦,并且不要在上面投入太多时间。因为一旦它破裂,所有用于阻止破裂的时间都被浪费了。唯一成功的预防措施是基于硬件的保护,如在playstation上。要困难得多,但即便如此,也不是100%我不认为“调试”一词的意思是你认为它的意思。你要找的是一个(字节)代码混淆器,如中。我不认为“调试”一词的意思是你认为它的意思。你要找的是一个(字节)代码混淆器,如中。+1让我学习术语海森堡,波堡,Mandelbug和Schroedingbug;^)+1.让我学习海森堡、博赫堡、曼德堡和薛定谔的术语;^)