OS X: هل يتم تعديل الأقسام في قطاع __Text بواسطة برامج أخرى؟

StackOverflow https://stackoverflow.com/questions/1688831

  •  18-09-2019
  •  | 
  •  

سؤال

هل يحدث ذلك أن بعض البرامج (أو حتى نظام التشغيل نفسه) يغير محتويات شريحة __Text القابلة للتنفيذ، لأي سبب من الأسباب؟

  • ملاحظة: هنا، أشير إلى شريحة "__Text"، وليس قسم "__Text".

بمعنى آخر: هل يمكنني الاعتماد على البايتات في شريحة __Text من قابلة للتنفيذي للكشف عن التالفة القابلة للتنفيذ (على سبيل المثال عن طريق حساب المجموع الاختباري على هذا القطاع)، أم أن هناك فرصة يمكنني الحصول على إيجابيات خاطئة لأن هذا الجزء قد يتم تعديله بعد تثبيت البرنامج على كمبيوتر المستخدم؟

شكرا!

هل كانت مفيدة؟

المحلول

شرائح هي أساسا بناء ذاكرة افتراضية: إنهم يتماشى عادة على حدود الصفحة، لذلك قد ينتهي بهم الأمر بما في ذلك أكثر قليلا من رمز التطبيق الخاص بك. نظرا إلى __TEXT يبدأ الجزء عادة في بداية ملف mach-o، وهذا يشمل عموما رؤوس mach-o، أيضا.

في نظام التشغيل × 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))

بالطبع، يمكنك أيضا استخدام otool -lv, ، ولكن الإخراج فوضوي بعض الشيء ويصعب تحليلها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top