代码之家  ›  专栏  ›  技术社区  ›  Carl Seleborg

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

  •  2
  • Carl Seleborg  · 技术社区  · 15 年前

    是否有某些程序(甚至是操作系统本身)出于任何原因更改了可执行文件的文本段的内容?

    • 注意:这里,我指的是“文本”部分,而不是“文本”部分。

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

    谢谢!

    1 回复  |  直到 15 年前
        1
  •  6
  •   Nicholas Riley    15 年前

    段本质上是一个虚拟内存结构:它们通常在页面边界上对齐,因此最终可能会包含比应用程序代码多一点的内容。鉴于 __TEXT 段通常从mach-o文件的开头开始,这通常也包括mach-o头段。

    在OS X 10.3及更早版本中,预绑定可能会影响 文字文字 段(详细描述 here )。在以后的版本中,代码签名还可以修改 文字文字 段。

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

    你可能会发现 macholib 有助于探索。(它包含在最新的OS X版本中以支持py2app。)下面是一个我用来提取 文字文字 段。

    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))
    

    当然,你也可以用 otool -lv 但是输出有点混乱,很难解析。