在C++中混淆变量和函数名称以防止基本的逆向工程

Vin*_*ent 4 c++ obfuscation assembly g++ reverse-engineering

在我的业余时间,我正在与我的一些朋友做一些逆向工程游戏,我想知道如何尽可能地防止asm可读性.我不想"阻止"逆向工程(毕竟它总是可能的),我只是想通过在汇编代码中混淆它们来阻止对函数/变量的简单理解.

例如,如果我在C++中声明了类似的函数:

void thisFunctionReverseAString(std::string& mystring);
Run Code Online (Sandbox Code Playgroud)

我想确保无法获得名称thisFunctionReverseAStringmystring装配.是否有任何编译选项,这样做的g++还是clang++

Tho*_*ews 5

混淆只会对源代码有所帮助.没有调试信息的可执行文件不包含变量名称或函数名称.

逆向工程的过程包括:

  1. 将可执行文件转换为汇编语言代码.
  2. 将汇编代码转换为高级语言代码.
  3. 理解顺序命名的函数和变量.

例如,在FORTRAN(或编译的BASIC)中获取可执行文件并将其反向工程为C++源代码.

正如其他人所说,有一些函数可以从可执行文件的调试版本中删除符号.您可以从头开始构建一个没有符号的可执行文件,通常称为发布版本.

  • 这个答案是错误的。如果启用 RTTI 或异常,C++ 二进制文件可能包含损坏的函数名称。 (2认同)