从反向工程中保护Exe文件的方法有哪些。许多打包程序可用于打包exe文件。http://c-madeeasy.blogspot.com/2011/07/protecting-your-c-programexe-files-from.html
中提到了这种方法这种方法有效吗?
答案 0 :(得分:17)
防止程序被逆向工程(“理解”)的唯一好方法是修改其结构以基本上迫使对手理解图灵机。基本上你做的是:
现在,一个盯着你的代码的对手必须通过解决算法上的难题来确定“正确”的计算是什么。 40年来,文献中没有人能够有效地解决大量的NP难题;如果你的程序取决于其中一个,那么这是一个不错的选择,那就是J. Random Reverse-Engineer不会突然能够解决它们。
通常通过转换原始程序来模糊其控制流和/或其数据流来实现这一点。一些技术通过将一些控制流转换为本质上的数据流(“通过该指针数组间接跳转”),然后实现需要精确的点到分析的数据流算法来加扰控制流,这可能是难以证明的并且已经证明是困难的。实践。
这篇论文描述了各种各样的技术,但很容易阅读: http://www.cs.sjsu.edu/faculty/stamp/students/kundu_deepti.pdf
这是另一个侧重于如何确保混淆变换导致结果变得难以计算的结果: http://www.springerlink.com/content/41135jkqxv9l3xme/
这是一个调查各种控制流转换方法的方法, 包括那些提供安全保障水平的人: http://www.springerlink.com/content/g157gxr14m149l13/
本文以低开销模糊二进制程序中的控制流: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.167.3773&rank=2
现在,人们可能会遇到很多麻烦来阻止程序被反编译。但如果反编译的那个是不可能理解的,你根本就不会打扰;这是我采取的方法。
如果你坚持要防止反编译,你可以通过考虑反编译的目的来攻击它。反编译本质上建议您可以将目标程序的每个字节转换为某段代码。使失败的一种方法是确保应用程序显然可以使用每个字节 作为计算机指令和数据,即使实际上没有这样做,并且通过上述方法对这样做的决定进行了混淆。对此的一个变化是在代码中有许多条件分支,实际上是无条件的(使用控制流混淆方法);分支的另一端落入看似有效的无意义代码,但在现有代码中分支到疯狂的位置。这个想法的另一个变体是将程序实现为混淆的解释器,并将实际功能实现为一组解释数据。 使失败的一种有趣方法是在运行时生成代码并在运行时执行它;像C这样的大多数传统语言几乎没有办法代表这一点。
像这样构建的程序很难反编译,更不用说在事后理解了。
声称能够很好地保护二进制代码的工具列于: https://security.stackexchange.com/questions/1069/any-comprehensive-solutions-for-binary-code-protection-and-anti-reverse-engineeri
答案 1 :(得分:4)
包装,压缩和任何其他二进制保护方法只能用于阻止或减缓代码的逆转,它们从来都不是,也绝不会是100%安全的解决方案(尽管某些人的营销会让你相信) 。您基本上需要评估您遇到的黑客级别,如果他们是脚本小孩,那么任何需要真正的努力和技能的打包者(即:那些缺乏解压缩脚本/程序/教程的人) )会阻止他们。如果您面对具有技能和资源的人,那么您可以忘记保持代码安全(正如许多评论所说:如果操作系统可以读取它来执行它,那么你可以,它只需要一段时间)。如果您的关注不是您的IP,而是您的程序所做的事情的安全性,那么您可能会更好地重新设计,即使使用原始源也无法进行攻击(chrome采用这种方法)。
答案 2 :(得分:1)
始终可以进行反编译。声明
链接网站上的这种威胁可以通过打包/压缩来消除 可执行文件(.exe)。
是一个简单的谎言。
答案 3 :(得分:1)
当前可以使用许多解决方案来保护您的应用程序免遭反编译。例如压缩,混淆,代码段等。 您可以寻找一家公司来帮助您实现这一目标。
例如Nelpeiron,该网站是:https://www.nalpeiron.com/ 可以涵盖许多平台,包括Windows,Linux,ARM-Linux,Android。
还可以考虑Virbox: 该网站是:https://lm-global.virbox.com/index.html 我建议这样做是因为它们有更多选项来保护您的源代码,例如导入表保护,内存检查。