
دليل خطوة بخطوة لبناء نوى Kali NetHunter مخصصة لنظام Android: جلب المصدر، اختيار سلسلة الأدوات، التجميع المتقاطع، والحرق.
أكبر عقبة أمام معظم الأشخاص الذين يرغبون في إعداد جهاز Nethunter هي متطلبات النواة. ما لم يكن جهازك يحتوي بالفعل على نواة مبنية مسبقًا (ومُصانة)، فسيُطلب منك بناء واحدة بنفسك. هناك الكثير من التوثيق حول هذه العملية بالفعل، لكن من تجربتي قد يكون من الصعب معرفة ما ينطبق على حالتك وما لا ينطبق.
تتفاقم هذه المشكلة بسبب الأوغاد الأشخاص الذين يكتبون أدلة بعناوين جاذبة للنقر مثل «ابنِ نواة Nethunter لأي جهاز Android!» أو بوعود كاذبة مثل «تعلّم كيفية ترجمة نواة Nethunter في عشر دقائق!» ومن المؤسف أيضًا أن واقع الإنترنت في 2025 هو أن كثيرًا من الأغبياء الأشخاص يعتقدون أن ChatGPT أو غيرها من نماذج اللغة الكبيرة لديها إجابات موثوقة على أسئلتهم، في حين أن كل ما تملكه تلك النماذج حقًا هو معلومات جمعتها من الأوغاد المذكورين أعلاه.
أكتب هذا الدليل بأكبر قدر ممكن من الشمول والصدق. ومع ذلك، ليس المقصود منه أن يكون الوثيقة الوحيدة التي ستحتاج إلى قراءتها لهذه العملية – بالتأكيد ستكون لديك أسئلة لا يمكن لهذا المستند الإجابة عنها. أود أن أشجعك على البحث عن إجابات لهذه الأسئلة في توثيق البرمجيات ذي الصلة، وليس على YouTube أو من ChatGPT.
قبل أن تبدأ أي جزء من هذه العملية، يجب أن تكون قد فعلت مسبقًا:
apt update && apt upgrade -y (اختياري: أضفت حزمًا وصفية (metapackages))لإكمال هذه العملية، ستحتاج إلى:
cd, rm, ls, mkdir, find, diff, grep, إلخ)vim للأشخاص الرائعين، وإلا فـ nano)build-devel على التوزيعات المبنية على Arch، build-essential على المبنية على Debian) – كما أنصحك بتثبيت Perl + Python3 لأن بعض ملفات Makefile الخاصة بالنواة تتطلب ذلكهل سيكون هذا ممكنًا لجهازي؟
نواة Linux مرخصة بموجب رخصة GNU العامة 2.0، وهي رخصة copyleft. هذا يعني أن الكود المصدري لنواة Linux موزع بحرية ويمكنك تعديل الكود المصدري كما تشاء (كما فعلت كل شركة مصنعة لأجهزة Android)، ومع ذلك، يجب أيضًا توزيع الكود المصدري الناتج بحرية.
على نحو لا يفاجئ أحدًا إطلاقًا، فإن العديد من الشركات العملاقة التي تستخدم كودًا مرخصًا بـ GPL تتجاهل شروط هذه الرخصة. فهي إما ترفض توزيع كودها المصدري أو تطلق جزءًا منه فقط (عادةً ما يكون معطوبًا، قديمًا، ويحتوي على كتل ثنائية مضمّنة). إذا لم يتوفر كود مصدري لنواة جهازك، فلا توجد طريقة لإنشاء نواة Nethunter له.
قدرتك على فتح قفل محمّل الإقلاع وتثبيت ROM مخصص تعتمد أيضًا بشكل كبير على مزاج الشركة المصنعة لجهازك. حتى لو سمحت بفتح قفل محمّل الإقلاع وتمكنت من عمل روت لهاتفك عبر Magisk، فإذا لم تنشر أشجار الأجهزة (device trees)، فمن المرجح ألا توجد ROMs مخصصة لجهازك. في هذه الحالة، من المشكوك فيه جدًا أن يكون الكود المصدري للنواة الذي نشرته (إن وُجد) قد حظي بأي صيانة منذ إصداره، أو أنه سيُبنى حتى دون تعديلات. إذا لم ترَ أي شخص آخر يصون أي شيء (نواة، ROMs، استردادات) لجهازك، فسيكون من الصعب، إن لم يكن مستحيلًا، تحويل هذا الجهاز إلى Nethunter كامل.
ملاحظة حول إصدارات النواة
لنتخيل أن هناك ROMs/نواة/استردادات مخصصة يتم تحديثها وصيانتها بانتظام لجهازك، لكن ببساطة لا توجد نواة Nethunter. في هذه الحالة، يجب أن تكون قادرًا على إكمال هذه العملية، لكنها ستختلف اعتمادًا على إصدار نواة Linux الذي يستخدمه جهازك.
المعلومات الواردة في هذا الدليل مبنية على تجربتي في تعديل نوى 4.14.x. هناك أدلة أقدم كُتبت تتحدث عن استخدام أدوات GCC (بدلاً من LLVM/clang، كما سنستخدم) وتنطبق على نوى 3.x. إذا كان جهازك يستخدم إصدار 5.x/6.x من نواة Linux، فلن تكون المعلومات الواردة في هذا الدليل كافية لإكمال هذه العملية. تتغير طريقة بناء Android باستمرار، ويجب أن تبحث عن دليل يغطي نوى GKI واستخدام Bazel/Kleaf.
من الطرق الجيدة للعثور على مستودعات تحتوي على الكود المصدري لنواة جهازك هي استخدام اسمه الرمزي (codename). يمتلك كل جهاز Android اسمًا رمزيًا، على الرغم من أن بعض الشركات المصنعة (مثل OnePlus) تتعامل مع هذا بمرح أكثر من غيرها (مثل Samsung). الاسم الرمزي لهاتفي Xiaomi Poco X3 NFC هو "surya"، بينما الاسم الرمزي لهاتفي Samsung A51 هو "SM-A515F". عادةً ما تتبع مستودعات الكود المصدري للنواة اصطلاح التسمية android_kernel_MANUFACTURER_CODENAME حيث تكون الشركة المصنعة هي الشركة الأم، أي android_kernel_xiaomi_surya وليس android_kernel_poco_surya. ومع ذلك، قد توجد أيضًا مستودعات مبنية حول SoC (نظام على رقاقة) لجهازك، وأحيانًا تكون "موحّدة" لتضمين ملفات مصدرية لأجهزة أخرى بنفس SoC. هذا هو الحال بالنسبة لجهاز Samsung الذي ذكرته، والذي يُسمى مستودع مصادره android_kernel_samsung_exynos9611. اطّلع على github/gitlab وشاهد ما يمكنك العثور عليه.
لأغراض هذا الدليل، سأستخدم أحدث إصدار من LineageOS 22.2 (مُبنى في 2025-08-04) على جهاز surya، لذلك سأرغب في استنساخ الكود المصدري للنواة من مستودع LineageOS. لكن قبل القيام بذلك، أريد نسخ ملفين من جهازي إلى الكمبيوتر الذي سأستخدمه لبناء النواة: /proc/config.gz و /proc/version. كان يمكنني نسخ الملف الأول، /proc/config.gz، إلى /sdcard، ثم سحبه من الجهاز عبر ADB، وفك ضغطه بـ gunzip، وإعادة تسميته. لكن ذلك يبدو كثيرًا من الخطوات، لذا ما فعلته بدلًا من ذلك هو:

ثم، على الجهاز نفسه، نفّذت (بصلاحيات الجذر)

ماذا يحدث هنا؟
على جهاز الكمبيوتر المحمول: nc (netcat) -l (الاستماع للاتصالات الواردة) -p (المنفذ) 4545 (في الحقيقة يمكن أن يكون أي رقم بين 1024-65535، لكنني عادةً ما أستخدم 4545) > (الكتابة إلى ملف) surya-defconfig-lineageos22.2-20250804 (اسم ملف وصفي) < (إدخال من ملف) /dev/null (جهاز فارغ – يضمن ذلك أنه إذا لمست لوحة المفاتيح فلن تُرسل ضغطة المفتاح إلى الملف الذي أستقبله، مما قد يفسده).
على الهاتف: zcat (مثل الأمر cat للدمج لكن لملفات gzipped) /proc/config.gz (إعدادات النواة التي بُنيت بها النواة قيد التشغيل حاليًا) | (إرسال مخرجات تلك العملية كمدخلات للعملية التالية) nc (netcat مجددًا) 192.168.1.42 (عنوان IP المحلي لجهاز الكمبيوتر المحمول) 4545 (المنفذ الذي حددته سابقًا)