2009-11-06 41 views
0

這是否發生了某些程序(甚至操作系統本身)更改可執行文件的__TEXT段的內容,無論出於何種原因?OS X:__TEXT段中的段是否被其他程序修改過?

  • 注意:這裏,我指的是「__TEXT」段,而不是「__text」段。

換句話說:我可以依靠我的可執行文件的__TEXT段中的字節來檢測(通過計算在該段的校驗和說)我的可執行文件是否已被損壞,或者是有一個機會,我得到誤報因爲該程序在用戶計算機上安裝後可能會被修改?

謝謝!

回答

4

段本質上是一個虛擬內存構造:它們通常在頁面邊界上對齊,所以它們最終可能包含比應用程序代碼更多的內容。鑑於__TEXT段通常從Mach-O文件的開頭開始,它通常也包括Mach-O頭文件。

在OS X 10.3及更早版本中,預先綁定可能會影響__TEXT段(詳細描述在here中)。在更高版本中,代碼簽名還可以修改__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)) 

當然,你也可以使用otool -lv,但輸出是有點亂,難以解析。

+0

謝謝尼古拉斯,這是一個真實記錄的答案!我一回去工作就會調查所有這一切。 –

+0

是的,原來代碼簽名,基本上每次下載應用程序時都會發生,並在彈出窗口上單擊「授權」,詢問您是否運行此安全,是__TEXT更改的常見原因。 –

相關問題