MacOS下修改任意二进制可执行文件在活动监视器的进程名方案咨询
macOS 二进制可执行文件静态修改进程名方案
前置说明
本方案为静态修改二进制文件实现活动监视器自定义进程名的效果,等效于C代码中修改argv[0],无需手动逆向工程,全流程使用通用命令行工具完成。
依赖工具
所有工具均为macOS系统自带,无需额外安装特殊软件:
objdump:用于读取二进制的字符串表xxd:用于二进制和十六进制文本的互相转换codesign:系统自带的代码签名工具
操作步骤
- 第一步:定位原始进程名的存储偏移
运行命令导出二进制的C字符串段内容:objdump -s --section=__cstring 目标可执行文件路径
从输出中找到和原始进程名完全匹配的字符串,记录对应的十六进制偏移地址。注意要确认该字符串没有被其他逻辑复用,避免修改后引发其他功能异常。 - 第二步:确认新进程名长度
优先使用长度小于等于原始进程名的新名称,无需调整二进制段结构,操作更稳定。如果需要使用更长的名称,需要先扩容__cstring段,操作复杂度更高。 - 第三步:替换二进制中的字符串
先将二进制转成可编辑的十六进制文本:xxd 目标可执行文件 > tmp.hex
打开tmp.hex,找到之前记录的偏移位置,将对应十六进制值替换为新进程名的ASCII编码,新名称末尾补充00作为字符串结束符,多余的原名称位置也统一用00填充。
替换完成后将十六进制文本转回二进制:xxd -r tmp.hex > 自定义名称的可执行文件 - 第四步:重新签名二进制
macOS的代码签名机制会校验二进制完整性,修改后需要重新签名才能正常运行:codesign -f -s - 自定义名称的可执行文件
如果原二进制带有特殊权限声明,需要先导出权限文件,签名时加上--entitlements 权限文件路径参数。
效果验证
直接运行修改后的可执行文件,打开活动监视器查看对应进程的名称,或运行ps aux查看COMMAND列,确认已替换为自定义名称。
注意:如果目标二进制内部存在硬编码的进程名设置逻辑,而非读取
argv[0]作为进程名,需要按照相同方法找到硬编码的字符串位置替换即可。
内容的提问来源于stack exchange,提问作者Tommy A.
相关产品推荐
相关产品推荐

