【问题标题】:Conveniently obfuscating all string literals in C++方便地混淆 C++ 中的所有字符串文字
【发布时间】:2020-05-30 15:50:20
【问题描述】:

我见过this questionADVobfuscator git repository。我发现的最接近的东西类似于this repository

但我的问题是我有一个相当大的代码,它使用多个系统调用并根据字符串文字及其连接打印大量消息。正因为如此,许多命令都写在目标代码中,我希望它们在保持可读性的同时保持最小的混乱。

与可以使用OBFUSCATE 宏在本地加密的单个密码不同,我想要一个全局解决方案,这样每个字符串都被混淆,而不必每次都放置这个宏,这样我的代码就可以保留对开发人员和审阅者来说是可读的,而可执行文件对这些字符串有些混淆。

这不是安全问题,而是知识产权保护问题,我只是想避免好奇的最终用户在业余时间对我的可执行文件进行逆向工程。我并不想阻止任何精心策划的攻击。

【问题讨论】:

  • “这不是安全问题,而是知识产权保护问题” 保密是安全的一个分支。保护知识产权是一个安全问题。
  • 看到“方便”和“混淆”一起使用感觉很奇怪。
  • @FrançoisAndrieux :公平点,但我不知道如何改写。我的意思是我不是在代码中存储密码,而是简单的命令。如果一些字符串被解密,我不在乎,问题是如果任何用户会从可执行文件中收集所有字符串并猜测替换我的应用程序的重要部分,从而使应用程序边界无用用户。随着时间的推移,这也将帮助他对很多东西进行逆向工程。
  • "问题在于,如果任何用户从可执行文件中收集所有字符串并猜测替换我的应用程序的重要部分的方式" - 如果这是真正的担忧,你正在以错误的方式解决它。假装你的混淆算法为公众所知。即使您不想要它,它也很快就会出现。您可以对命令进行哈希处理,并且只将哈希值存储在可执行文件中以对其进行一些混淆,但是您如何验证用户(有足够的时间来解压您的程序)是否有权使用它?
  • @TedLyngmo 该软件适用于非常有限的分发,具有永久许可证 + 年度支持 + 为新/自定义功能付费方案。因为最终用户的数量很少,而且预计他们是忙碌的人,我只是假设没有人碰巧有空闲时间和最少的文档来启动逆向工程项目。我确实想避免让一个没有空闲时间的用户以一种太容易做的方式去猜测很多重要的东西。

标签: c++ obfuscation string-literals


【解决方案1】:

一个简单(ish)的解决方案是在分发之前通过可执行文件压缩程序(如 UPX)运行可执行文件。文件压缩应该用于混淆生成的可执行文件中的任何字符串文字。

【讨论】:

  • 您可以在回复中添加 UPX 作为示例。
  • 我不熟悉这些,但是如果它们是压缩的,那么解压缩即提取不是很简单吗?
  • 是的,相当琐碎——但提问者并没有要求任何“安全”的东西,只是为了某种方式来混淆纯文本字符串以阻止业余爱好者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2010-11-02
相关资源
最近更新 更多