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

Obfuscation of variable and function names in C++ to prevent basic reverse engineering

本文关键字:逆向工程 变量 函数 C++      更新时间:2023-10-16

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

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

void thisFunctionReverseAString(std::string& mystring);

我希望确保无法从程序集中获取名称thisFunctionReverseAStringmystring。在g++clang++中有编译选项吗?

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

逆向工程的过程包括:

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

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

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

在Linux中使用strip从可执行文件中删除符号。在Windows上,简单地删除pdb文件。