OS X:__TEXT段中的部分是否被其他程序修改?

Car*_*org 2 binary macos mach-o

无论出于何种原因,某些程序(甚至操作系统本身)是否会更改可执行文件__TEXT段的内容?

  • 注意:这里,我指的是"__TEXT"段,而不是"__text"段.

换句话说:我可以依赖可执行文件的__TEXT段中的字节来检测我的可执行文件是否已被损坏(例如通过计算该段上的校验和),或者是否有可能出现误报,因为此段可能被修改程序安装在用户的计算机上后?

谢谢!

Nic*_*ley 6

段实际上是一个虚拟内存构造:它们通常在页面边界上对齐,因此最终可能包含比应用程序代码更多的内容.鉴于__TEXT段通常从Mach-O文件的开头开始,这通常也包括Mach-O头.

在OS X 10.3及更早版本中,预绑定可能会影响该__TEXT段(此处将详细介绍).在以后的版本中,代码签名也可以修改__TEXT段.

您可能想要使用OS X的内置代码签名机制(问题的原因和解决方案?)进行调查.一些推荐参考:

您可能会发现macholib在探索中很有用.(它包含在最近的OS X版本中以支持py2app.)这是我用来提取__TEXT段的简单脚本.

from macholib.MachO import MachO

m = MachO('foo')
__TEXT = (cmd for load_cmd, cmd, data in m.headers[0].commands
          if getattr(cmd, 'segname', '').rstrip('\0') == '__TEXT').next()
print '__TEXT segment: offset %x size %x' % (__TEXT.fileoff, __TEXT.filesize)
f = open('foo', 'rb')
f.seek(__TEXT.fileoff)

open('foo__TEXT', 'wb').write(f.read(__TEXT.filesize))
Run Code Online (Sandbox Code Playgroud)

当然,你也可以使用otool -lv,但输出有点乱,难以解析.