2

なんらかの理由で、一部のプログラム (または OS 自体) が実行可能ファイルの __TEXT セグメントの内容を変更することはありますか?

  • 注: ここでは、"__text" セクションではなく、"__TEXT" セグメントについて言及しています。

つまり、実行可能ファイルの __TEXT セグメントのバイトに依存して、実行可能ファイルが破損しているかどうかを検出できますか (たとえば、そのセグメントのチェックサムを計算することによって)、またはこのセグメントが変更されている可能性があるために誤検知が発生する可能性はありますか?プログラムがユーザーのコンピュータにインストールされた後ですか?

ありがとう!

4

1 に答える 1

6

セグメントは基本的に仮想メモリ構造です。通常、セグメントはページ境界に配置されるため、アプリケーションのコードよりも少し多く含まれることになります。セグメント__TEXTは通常、Mach-O ファイルの先頭から始まるため、通常、これには Mach-O ヘッダーも含まれます。

OS X 10.3 以前では、事前バインドがセグメントに影響を与える可能性がありました (詳細はこちら__TEXTで説明されています)。それ以降のバージョンでは、コード署名でもセグメントを変更できます。__TEXT

OS X に組み込まれているコード署名メカニズムを使用して調査することをお勧めします (問題の原因と解決策は?)。いくつかの推奨される参照:

macholibは探索に役立つ場合があります。(py2app をサポートするために最近の OS X バージョンに含まれています。)__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))

もちろん、 も使用できますotool -lvが、出力は少し乱雑で解析が困難です。

于 2009-11-07T05:26:01.730 に答える