【问题标题】:Prevent from reverse engineering C++ binary防止逆向工程 C++ 二进制文件
【发布时间】:2012-09-05 02:42:50
【问题描述】:

我以this one 阅读了有关该主题的几篇文章,并实现了大部分描述的技术。但我也想在二进制文件中添加一些额外的未引用/从未使用过的代码。理想情况下,我希望能够通过工具将此代码添加到构建的二进制文件中。有这样的工具吗?关于如何构建这样一个工具的任何想法?或者如何生成一些从未使用过的代码并将其添加到我的 C++ 程序中?我应该把它放在哪里?

在对 Skype 内部的分析中,我读到他们尽可能地弄乱了代码。实现它的一种方法是动态计算每个调用:

if ( sin(a) == 42 ) {
   do_dummy_stuff () ;
}

我应该进入虚拟函数吗?还是虚拟函数是从未使用过的代码?

更新:我想将从未使用过的代码添加到二进制文件的原因是因为我们发布了许多电子书。我希望每一个的二进制文件都略有不同,所以如果一个被泄露,其他的则不会(至少不是马上)。

【问题讨论】:

  • 我认为如果有人感兴趣的话,很难找出你程序中的哪些代码实际上被调用了。此外,您的编译器可能需要被告知不要优化它。
  • 聪明的编译器可能会注意到 sin 永远不会像 42 一样大,并消除整个 p.o.c.
  • @Anthony Burleigh:请看更新
  • @Kerrek SB:请看更新

标签: c++ reverse-engineering


【解决方案1】:

如果我没听错,你说的是obfuscation

This question on Stackoverflow 涵盖了该主题。有很多软件可以混淆 C++ 代码,快速谷歌搜索显示了很多这样的应用程序,例如thisthis

【讨论】:

  • 混淆是故事的一部分。我想在二进制文件中添加一些从未使用过的代码。
  • 实际上我们不发布源代码,所以我认为混淆对我们没有任何好处。
【解决方案2】:

有这样的工具吗?

是的,有。它被称为具有适当参数的编译器,并添加一个链接器。添加到这个组合strip,你会得到一个合适的库。

严肃地说,there are no ways to prevent reverse engineering。你只能让饼干变得更难(或更烦人)。你可以看看this article(spyro 的开发者尝试了各种盗版保护)

【讨论】:

  • 这就是我尝试做的,让逆向工程代码变得更加困难。
猜你喜欢
  • 2015-05-06
  • 2012-07-21
  • 2010-12-06
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
相关资源
最近更新 更多