首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为本机代码实现代码混淆?

如何为本机代码实现代码混淆?
EN

Software Engineering用户
提问于 2013-08-21 07:09:42
回答 2查看 4K关注 0票数 3

我有兴趣将代码混淆(本机代码,以明确“本机代码”的含义: x86/x64/arm可执行文件中的实际机器代码- PE、ELF、Macho等,而不是源代码)作为构建过程的一部分。我能想到几种方法:

  1. 编写一个编译器插件,在所有优化阶段之后得到内部表示,然后转换它,然后将它发送到编译器的后端。在这种情况下,你能建议我一些编译器支持这样的插件吗?编程语言并不重要,但我想尝试一下C/C++以外的其他东西(我知道GCC和Clang都支持插件,但我永远无法在Windows上正常工作)。
  2. 将所有优化阶段后的内部表示转储到文件中,用我的混淆工具解析并处理它,并将其传回编译器。我无法找到如何使用GCC (我成功地放弃了不同的内部表示,但我无法找到如何使编译器生成代码)。我知道Clang能够生成LLVM,它可以用LLVM编译器处理和编译,但我还是不能让它在Windows上正常工作。你知道有什么编译器允许做这样的事情吗?
  3. 目前,我正在通过预处理源进行混淆,它可以工作,但是对于一个庞大的代码库来说,这需要花费太长的时间。因此,我正在寻找替代的方法来做它,我想阅读您的意见,什么是最好的方式做本机代码混淆。

请记住,我正在问一个具体的问题。我不是在问我是否需要混淆。混淆是有原因的,我也有理由这样做。我不是在问如何执行实际的本机代码混淆或代码混淆的算法。我知道怎么做怎么打破它。

我问的是本地代码编译器,它们要么对插件有很好的支持,要么可以转储和重新编译一些低级的内部表示,比如AST (抽象语法树)、RTL (寄存器传输语言)、三地址代码等等。

EN

回答 2

Software Engineering用户

发布于 2013-08-21 11:19:18

查看一下Stuxnet作为起点。我知道你并没有暗示或询问恶意软件技术,但这是我唯一能想到的符合你要求的例子。无论Stuxnet的政治意图如何,技术结构都是非常有趣的。

赛门铁克分析非常好地介绍了该恶意软件的结构。有相当多的其他分析可以深入到代码中。

Stuxnet的核心由一个大型.dll文件组成,该文件包含许多不同的导出和资源。除了大型.dll文件外,Stuxnet还包含两个加密配置块。 ( Stuxnet的滴管组件)是一个包装程序,它包含存储在自己内部的所有组件,节名为“stub”。这个存根部分对于Stuxnet的工作是不可或缺的。执行威胁时,包装器从存根部分提取.dll文件,将其作为模块映射到内存中,并调用导出之一。

我认为广义的方法会对你有用。您将拥有承载应用程序的存根或包装器。每个可分离的组件都被加密并封装在包装器中。然后,攻击者需要解密打包组件(S),然后才能读取其中包含的机器代码。

对于其他混淆,请为每个组件使用单独的加密密钥。请记住,攻击者仍然可以访问密钥,因为您必须包含密钥,包装器才能解密这些组件。但是,如果您是基于许可模型分发的,那么您就不必分发所有的密钥。同样,您也可以在每个客户端发行版上设置密钥,因此,如果代码的副本外逃,您可能会找到转义的源。

或者,看看以前的大型机程序员是如何处理覆盖自己的代码的。

条件将跳转到另一个位置,该位置将在刚刚执行的区域中插入指令。然后,代码跳回修改区域的开头。当需要将修补程序应用于系统时,它是“有用的”。它也经常对应用程序的健康造成危险,所以对这种技术要小心。

混淆起作用是因为程序必须在“实际”程序能够运行之前运行和重写现有的指令。我不认为这会扩大到一个更大的项目

票数 5
EN

Software Engineering用户

发布于 2013-08-21 07:25:11

你好像很困惑。

代码混淆是一种(弱的)方法,以保护您的源代码不被别人理解,如果他们得到它的手。当变量名称、格式等被扭曲为“不可读”时,这可能是业余爱好者的一个表面障碍,但你应该担心的攻击者--黑客和破解者--不会被这些表面上的变化所困扰。他们只会自动地将代码规范化,并轻松地阅读它。

混淆本地代码就更没有意义了。只有这么多的方法可以添加两个数字,如果您的程序需要添加,它将不得不使用其中之一。汇编程序代码只以标准化的一行操作格式打印,而且一开始很少使用长而有意义的标识符。换句话说,混淆的本机代码看起来就像正常的本机代码。(是的,专业的软件窃贼可以像读报纸一样阅读机器代码。)虽然有可能使程序执行的实际操作变得更加模糊和不必要地复杂,但这会带来引入错误和效率低下的巨大风险。这真的值得对代码盗贼提供额外的安全保护吗?

简而言之,我建议你重新考虑一下你的威胁模式到底是什么,以及采取什么措施来保护自己。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/208987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档