我正在制作商业软件,但我不希望它易于破解。它针对Linux,我正在使用GCC(8.2.1)进行编译。问题是,当我编译它时,从技术上讲,任何人都可以使用IDA或Binary Ninja之类的反汇编程序来查看所有函数名称。这是示例(您可以在左侧面板上看到函数名称):
如果进行逆向工程,是否有任何方法可以保护我的程序免受此类侵害?如果这些功能名称和变量可以从代码中自动导出(使用GCC或clang?),是否有任何方法可以导出所有内容,所以我可以编写一个简单的脚本,将它们更改为完全随机的,然后再进行编译?
答案 0 :(得分:2)
因此,您想隐藏/屏蔽二进制文件中的符号名称。您已决定要执行此操作,需要获取它们的列表,以便可以创建脚本来修改它们。好吧,您可以使用nm
来获得该列表,但是您不需要任何列表(将名称重写在已编译的二进制文件中,这样可以避免灾难。)
相反,只要在发行版本和strip
符号中做每个人都可以做!您还将看到一个更小的二进制文件。当然,这并不能阻止逆向工程(什么也不能阻止),尽管可以说使上述任务更加困难。
老实说,无论如何,您都应该剥离发行版二进制文件,而不是为了防止破解。普遍的看法是,不要过分地努力防止破解,因为这将不可避免地导致失败,并以浪费开发时间为代价(并且可能是较复杂的代码库,较难维护/较慢的可执行文件)和/或对诚实的客户有用)。