Skip to content

Latest commit

 

History

History
103 lines (74 loc) · 4.73 KB

File metadata and controls

103 lines (74 loc) · 4.73 KB

اللغات: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

← أمثلة NeverC

Android Kernel Function Interpose

ربط do_faccessat عند نقطة الدخول باستخدام neverc_krt_interpose_register. يوضح:

  • التسلسل التلقائي: عدة معالجات على نفس الهدف، تُنفَّذ حسب الأولوية
  • نمط استدعاء الأصلي: يستقبل المعالج مؤشر orig لاستدعاء الدالة الأصلية
  • التحكم بالأولوية: قيمة أقل = تنفيذ أولاً؛ استخدم قيم سالبة للتنفيذ قبل الخطافات الأخرى
  • التعايش: يعمل حتى لو كان الهدف مُربوطاً مسبقاً بواسطة وحدة أخرى

API

int neverc_krt_interpose_register(void *target, void *handler, int priority,
                             void **orig, struct neverc_krt_interpose_ref *ref);
int neverc_krt_interpose_unregister(struct neverc_krt_interpose_ref *ref);

توقيع المعالج:

long my_interpose(void *orig, void *a0, void *a1, void *a2, void *a3, void *a4, void *a5);

البناء

cd examples/android-kernel-inline-interpose
neverc make          # debug: ‏-g (الافتراضي في أول بناء)
neverc make release  # release: ‏-O2 --strip
neverc make debug    # العودة إلى debug

اختر إعداد نواة آخر، مثلاً، بواسطة neverc make KERNEL=612 release. يتوسع الأمر neverc make release إلى -O2 --strip. يسجل Makefile قيمتي KERNEL وPROFILE المختارتين في .nvk-build-flags، ولذلك تستخدم أوامر make push وmake run وmake بلا هدف الأثر نفسه لاحقًا. عند غياب ملف الحالة هذا، يستخدم make بناء debug افتراضيًا. يحدّث make debug أو PROFILE=... الصريح ملف التعريف المحفوظ، ويحذف make clean ملف الحالة ليعود البناء التالي إلى debug.

تكتب NeverC خمس فئات من أسماء الإصدار المستوحاة من IDA من دون استخدام بادئاتها المحجوزة: الدوال fn_HEX، والتسميات التنفيذية عديمة النوع code_HEX، والكائنات obj_HEX، والتسميات الأخرى عديمة النوع sym_HEX، والرموز المطلقة abs_HEX. في التعريف العادي المخصص يكون HEX هو analysis EA حتميًا مشتقًا من التخطيط النهائي لأقسام SHF_ALLOC (أما abs_HEX فيستخدم st_value المطلق)؛ وهو ليس hash (تجزئة)، ولا encryption (تشفيرًا)، ولا file offset (إزاحة ملف)، ولا ELF virtual address (عنوان ELF افتراضيًا)، ولا runtime kernel address (عنوان النواة وقت التشغيل). ولا تخزن NeverC صيغ sub_/loc_ المحجوزة أو أسماء عادية فارغة عمدًا.

راجع سياسة الإصدار والتجريد لمعرفة الأسماء الواجب إبقاؤها كما هي، ومعنى عرض extern التركيبي في IDA، وحدود الأمان، وترتيب الإنهاء والتوقيع.

النشر والتشغيل

neverc make run

أو يدوياً:

adb push nvk_interpose_demo.ko /data/local/tests/
adb shell su -c 'insmod /data/local/tests/nvk_interpose_demo.ko'
adb shell su -c 'dmesg | grep neverc_krt_interpose_demo'

سجل النواة (مباشر)

على الجهاز، يبث cat /proc/kmsg مخزن حلقة النواة في الوقت الفعلي — شبيه بـ DbgView على Windows. استخدمه عندما يفشل insmod برسالة غامضة أو تحتاج سبب الرفض الحقيقي (vermagic وmodversions وحجم القسم، إلخ).

الطرفية 1 (اتركها تعمل):

adb shell
su
cat /proc/kmsg

الطرفية 2:

adb shell su -c 'insmod /data/local/tests/nvk_interpose_demo.ko'

تظهر الأسطر الجديدة في الطرفية 1 لحظة التحميل. اضغط Ctrl+C للإيقاف.

ملاحظة: dmesg -w غير متوفر على بعض إصدارات Android؛ /proc/kmsg يحتاج root لكنه أكثر موثوقية لتصحيح تحميل الوحدات.

إلغاء التحميل

neverc make rmmod