有没有方法可以混淆基于C的可执行文件或库以防止反编译?
有没有方法可以混淆基于C的可执行文件或库以防止反编译?
不行。你可以增加反编译的难度,但是不能完全防止它。我建议你停止浪费时间,专注于提供功能不断改进的出色产品。
这样人们就会愿意为其付费。
你的主要问题是使代码无法解密的唯一方法就是使其无法运行。任何可加载到计算机中的内容都可以被破解。那些出于兴趣、利润或声誉而进行反向工程的人通常非常擅长此事,并不会因为你的任何尝试而受到丝毫影响。
他们有许多工具可以更轻松地解密你的代码,而你所做的混淆则相对较难。最好说服广大用户购买你的软件,并将盗版视为一种可能将“窃贼”转变为真正用户的机会。
例如,找出他们为什么不为你的软件支付费用并尝试解决这个问题。你永远无法将所有人转化为用户,一些人只是为了好玩而盗版代码。
查看在techdirt上发布的有关CwF+RtB(与粉丝联系加上理由购买)系列文章。我发现其中提出的许多观点可能适用于软件行业。
简单的方法:购买一个打包器/加密器/混淆器产品。有些用于游戏且价格昂贵,有些则不是。通过“剽窃保护”等关键词在Google上搜索。
快速的方法:使用UPX进行打包,然后在某个位置对头部信息进行混淆,以便仍然可以在内存中加载并正常运行,但upx实用程序会失败并显示错误(尝试版本字段)。如果upx实用程序失败,95%的人会放弃。
困难的方法:编写自己的打包器。
哦,我忘了:
真正简单的方法:就按原样发布。不要误解 - 无论你做什么,人们仍然可以反向工程你的代码。你投入的精力只限制了多少人能够反向工程它。
进行全面优化编译。
反编译(没有更多的跳转)以及混淆实践(流表)和理论(不可区分混淆)都是活跃的研究领域,因此没有解决方案 - 只有工具、技术和专业知识。如果您真的希望您的代码对反编译无懈可击,创建一个Web应用程序,并将敏感代码放在服务器端。但是,如果您坚持给某人提供二进制文件的模式,则必须明智地权衡您想要在安全性和性能之间做出的折衷。混淆是有代价的,而且仍然不完美。一些选项
不要因Barak等人关于黑盒混淆的不可能性的开创性工作而感到沮丧。他只证明了黑盒混淆器的不可能性,而不是许多实际和有价值的混淆。 (黑盒混淆是程序的内部工作完全不可理解)也不要因海盗而气馁。总有一些人会特意购买您的产品,如果它很好。
要让它更难?好的。但请不要这样做。
要预防它?不行。任何运行您二进制文件的系统都需要软件来解密您想出的任何方案。他们将能够反编译它,然后看到您的模糊二进制文件如何被解释。
混淆的可执行文件"没有意义。硬件必须能够“理解”代码才能执行它,如果硬件可以理解它,那么逆向工程人员也可以理解它。你最多只能使其更加繁琐,但代价可能不小。
"