tec*_*hno 6 executable decompiling exe reverse-engineering source-code-protection
从反向工程中保护Exe文件有哪些方法.许多打包程序可用于打包exe文件.这种方法在http://c-madeeasy.blogspot.com/2011/07/protecting-your-c中提到.-programexe -文件- from.html
这种方法有效吗?
Ira*_*ter 17
防止程序被逆向工程("理解")的唯一好方法是修改其结构以基本上迫使对手理解图灵机.基本上你做的是:
现在,一个盯着你的代码的对手必须通过解决算法上的难题来确定"正确"的计算是什么.40年来,文献中没有人能够有效地解决大量的NP难题; 如果你的程序取决于其中一个,那么它是一个不错的选择,即J.随机逆向工程师不会突然能够解决它们.
人们通常通过转换原始程序来模糊其控制流和/或其数据流来实现这一点.一些技术通过将一些控制流转换为本质上的数据流("通过该指针数组间接跳转")来加扰控制流,然后实现需要精确点到分析的数据流算法,这既难以实现又难以证实实践.
这篇论文描述了各种各样的技术,但很容易阅读: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-工程中自由
打包、压缩和任何其他二进制保护方法只会阻碍或减缓您的代码的逆转,它们从来都不是,也永远不会是 100% 安全的解决方案(尽管有些营销会让您相信这一点)。您基本上需要评估您遇到的黑客级别是什么,如果他们是脚本小子,那么任何需要真正努力和技能的包装工(即:那些缺乏解包脚本/程序/教程的人)会阻止他们。如果您面对的是拥有技能和资源的人,那么您可以忘记保持代码安全(正如许多评论所说:如果操作系统可以读取它来执行它,那么您也可以,它只需要更长的时间)。如果您关心的不是您的 IP,而是您的程序所做的某些事情的安全性,那么您最好以一种即使使用原始源也无法攻击的方式重新设计(chrome 采用这种方法)。