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

问题描述 投票:0回答:3

在业余时间,我正在和一些朋友一起做一些逆向工程游戏,我想知道如何尽可能地防止

asm
可读性。我不想“阻止”逆向工程(毕竟它总是可能的),我只是想通过在汇编代码中混淆函数/变量来防止对它们的简单理解。

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

void thisFunctionReverseAString(std::string& mystring);

我想确保不可能从程序集中获取名称

thisFunctionReverseAString
mystring
。是否有任何编译选项可以在
g++
clang++
中执行此操作?

c++ assembly g++ obfuscation reverse-engineering
3个回答
5
投票

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

逆向工程的过程将涉及:

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

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

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


4
投票
strip

从 Linux 中的可执行文件中删除符号。 在 Windows 上,只需删除

pdb
文件即可。
    


0
投票
NSA的Ghidra

等常用工具从可执行文件中提取 由于类和函数名称通常具有有意义的助记符,因此对于那些尝试对应用程序逻辑进行逆向工程的人来说,它们绝对是一个巨大的帮助。这就是为什么在这种情况下剥离符号是一个好主意,例如这是删除符号后函数列表在 Ghidra 中的样子:

enter image description here 将“strip”命令应用于可执行文件后,类名也可以观察到同样的情况。在下图中,您可以看到只有标准 C++ 类可见

enter image description here 总的来说,Ghidra 是一个很棒的工具,可用于对可执行文件进行逆向工程并回答许多类似 OP 的问题

© www.soinside.com 2019 - 2024. All rights reserved.