如何在macOS中使用Clang从可执行文件中剥离所有本地符号名称?

bn31dyow  于 11个月前  发布在  Mac
关注(0)|答案(1)|浏览(89)

如何在macOS中从可执行文件中剥离所有本地符号名称?
我想从我的可执行文件中删除所有本地符号,这样nm就不能显示任何由可执行文件定义的函数名等。
我无法使用链接器-s开关:

$ gcc -fno-stack-protector myprog.c -Wl,-no_pie -Wl,-s -o myprog
ld: warning: option -s is obsolete and being ignored

字符串
使用strip -x删除所有本地符号不会删除符号。
如何删除所有局部符号,使函数名(如_decrypt_username)不显示?

$ nm crackme0x0 -extern-only
                 U ___stdinp
                 U ___strncpy_chk
0000000100000000 A __mh_execute_header
0000000100001750 T _crash
0000000100001710 T _decrypt_username
                 U _exit
                 U _fgets
                 U _free
00000001000018b0 T _get_vault_contents
                 U _getpass
0000000100002190 D _invalid_password_str
                 U _isxdigit
0000000100001af0 T _main
                 U _malloc
                 U _printf
                 U _rand
00000001000013b0 T _rot13
00000001000021aa D _secret_stored_for_user_str
                 U _sleep
                 U _srand
                 U _strcmp
                 U _strdup
                 U _strlen
                 U _strncmp
                 U _strtol
                 U _time
00000001000020a0 D _user_vaults
0000000100001a40 T _validate_password
0000000100001570 T _xor_with_fixed_key
0000000100001500 T _xor_with_sliding_byte_key
                 U dyld_stub_binder

rm5edbpk

rm5edbpk1#

这一点在不久前就被问到了。我需要在Xcode 14中完成它。要做到这一点,需要在项目设置中将Deployment Postprocessing设置为true。这将从二进制文件中删除私有符号。请记住,默认情况下不会设置该设置。

相关问题