OS X: هل يتم تعديل الأقسام في قطاع __Text بواسطة برامج أخرى؟
سؤال
هل يحدث ذلك أن بعض البرامج (أو حتى نظام التشغيل نفسه) يغير محتويات شريحة __Text القابلة للتنفيذ، لأي سبب من الأسباب؟
- ملاحظة: هنا، أشير إلى شريحة "__Text"، وليس قسم "__Text".
بمعنى آخر: هل يمكنني الاعتماد على البايتات في شريحة __Text من قابلة للتنفيذي للكشف عن التالفة القابلة للتنفيذ (على سبيل المثال عن طريق حساب المجموع الاختباري على هذا القطاع)، أم أن هناك فرصة يمكنني الحصول على إيجابيات خاطئة لأن هذا الجزء قد يتم تعديله بعد تثبيت البرنامج على كمبيوتر المستخدم؟
شكرا!
المحلول
شرائح هي أساسا بناء ذاكرة افتراضية: إنهم يتماشى عادة على حدود الصفحة، لذلك قد ينتهي بهم الأمر بما في ذلك أكثر قليلا من رمز التطبيق الخاص بك. نظرا إلى __TEXT
يبدأ الجزء عادة في بداية ملف mach-o، وهذا يشمل عموما رؤوس mach-o، أيضا.
في نظام التشغيل × 10.3 والإصدارات السابقة، يمكن أن يؤثر مسبقا على __TEXT
الجزء (الذي هو موضح بالتفصيل هنا). في الإصدارات الأحدث، يمكن توقيع التعليمات البرمجية أيضا تعديل __TEXT
قطعة.
قد ترغب في التحقيق في استخدام آلية توقيع رمز OS X المدمج (سبب أو حل مشكلتك؟). بعض المراجع الموصى بها:
- ملاحظة تقنية TN2206: رمز Mac OS X توقيع عمق
- رمز التوقيع وأنت (تجاهل بت iPhone)
- توقيع رمز مرحلة التنمية
قد تجد 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
, ، ولكن الإخراج فوضوي بعض الشيء ويصعب تحليلها.