混淆基于C的二进制文件以避免反编译

Jay*_*Jay 23 c obfuscation decompiler

有没有办法混淆基于C的可执行文件或库来防止反编译?

pax*_*blo 35

不.你可以让反编译变得更加困难,但是你无法阻止它.我的建议是不要浪费你的时间,而是集中精力提供具有不断改进功能的出色产品.

然后人们愿意为此付出代价.

您的主要问题是使代码无法解密的唯一方法是使其无法运行.任何可以加载到PC中的东西都可以破解.那些为了娱乐,利润或名望而进行逆向工程的人通常都非常擅长这一点,而且你所做的任何尝试和阻止他们的工作都不会分开.

他们可以访问工具,使得解密代码的工作比模糊处理工作容易得多:-)更好地说服全世界你的软件值得购买,并将盗版视为可能转换的机会"盗贼"给真正的用户.

例如,找出为什么他们不支付你的软件,并尝试解决这个问题.你永远不会转换100%的人,有些人只是为了它的乐趣而盗用你的代码.

退房系列上运行过的文章Techdirt的关于CWF + RTB(连接带风扇和购买理由).我发现那里提出的许多观点可能适用于软件行业.

  • 一个很好的(在我看来是正确的)回应.但你没有回答他的问题. (12认同)
  • @paxdiablo如果目标是阻止反编译,则可能不是为了防止盗版.还有许多其他原因可以反编译:反向设计其功能或查找安全漏洞.@joveha:我同意,一个知情的回答,不知何故无法解决问题的任何部分. (6认同)
  • 反作弊软件需要邪恶的技巧来防止主动篡改,不一定是反反编译技巧(虽然也可以使用它们).这些事情是邪恶的原因是它们阻止你在自己的机器上做合法的事情,尽管它们在不在可靠平台上运行时是必要的. (4认同)
  • Bods,我回答了这个问题,出于同样的原因,我回答了"如何使用冒泡排序来订购一个5000万节点的链表?" 与"不要那样做!".SO上有足够的先例可以提供更好的方法,或者说没有办法,或者你不应该浪费你的时间.我需要明确表示有_no_方法来防止反编译.就像房子安全一样,你可以让那些随意的小偷更加难以控制,但一个坚定的防盗工作将不会被阻止.在我看来,编译本身足以阻止随意类型,不再需要. (4认同)
  • @ Lo'oris所以你也不要锁前门?它可以被破坏所以为什么要麻烦吧?事实是,OP可以以大约10美元的价格购买一台包装机产品,然后生产出大多数人会放弃的二进制产品.他可以在5分钟内做到这一切.锁防止被盗. (2认同)

jov*_*eha 13

简单方法:购买打包机/加密/混淆器产品.有些是昂贵的,在游戏中使用,有些则不然.谷歌为他们提供"复制保护"等流行语.

快速方式:使用UPX打包,然后在某处将标​​题破坏,以便它仍然可以加载到内存中并运行正常,但是upx实用程序将失败并出现错误(尝试使用版本字段).如果upx实用程序失败,95%将放弃.

困难的方法:写自己的包装工.

哦,我忘记了:

真正的简单的方法:只要出货,因为它是.没有 - 无论你做什么,人们仍然可以对你的代码进行逆向工程.你投入的努力量限制了有多少人可以扭转它.


小智 6

反编译(No More Gotos)和混淆实践(Flowtables)和理论(不可区分性混淆)都是活跃的研究领域,因此没有解决方案 - 只有工具、技术和专业知识。如果您确实希望您的代码不受反编译影响,请创建一个 Web 应用程序,并将敏感代码放在服务器端。但是,如果您坚持向某人提供二进制文件的模式,那么您必须明智地判断您想要在安全性和性能之间做出的权衡。混淆是有代价的,而且永远不会是完美的。一些选项

  • 使用 UPX 以外的加壳程序(UPX 已安装在许多 Linux 发行版中)。性能成本较低,大多数人不具备手动解压二进制文件进行静态分析的技能。但对于经验丰富的逆向者来说,拆箱的成本并不重要
  • 查看 Tigress,这是一个多样化的虚拟器/混淆器,具有丰富的 C 源到源混淆功能。为了获得更好的性能,请依赖支持的转换、控制流扁平化、函数合并/拆分、文字编码
  • 如果您想要更好的保护,请查看 Tigress 的主要转换:虚拟化、JITing 等,但我相当确定这些更昂贵,并且如果您使用这些转换,您的用户可能会注意到速度变慢。

不要因为 Barak 等人关于黑盒混淆的不可能性的开创性工作而气馁。他只是证明了黑盒混淆器的不可能性,而不是许多实用且有价值的混淆器的不可能性。(黑盒混淆是程序的内部运作完全难以理解)也不要被盗版者气馁。如果你的产品好的话,总会有人愿意购买。


f4.*_*f4. 5

编译完全优化.

  • 为什么选择SDReyes?如果您不依赖任何未定义的行为,优化不应该对您的程序做任何事情...... (5认同)