كيفية التوقيع على APK باستخدام Gradle. نشر تطبيق كيفية تغيير توقيع تطبيق Android

11.08.2020

في بعض الأحيان، لا تناسب بعض التطبيقات على Android المستخدم بطريقة ما. مثال على ذلك إعلان مزعج. ويحدث أيضًا أن البرنامج مفيد للجميع ولكن الترجمة فيه إما ملتوية أو غائبة تمامًا. أو، على سبيل المثال، البرنامج تجريبي، ولكن الحصول عليه النسخة الكاملةلا يوجد أي احتمال. كيفية تغيير الوضع؟

مقدمة

في هذه المقالة، سنتحدث عن كيفية تفكيك حزمة APK مع أحد التطبيقات، وسوف ننظر إليها الهيكل الداخلي، قم بتفكيك وتفكيك الكود الثانوي، وحاول أيضًا إجراء العديد من التغييرات على التطبيقات التي يمكن أن تجلب لنا فائدة أو أخرى.

للقيام بكل هذا بنفسك، ستحتاج على الأقل إلى معرفة أساسية بلغة Java، التي تُكتب بها تطبيقات Android، ولغة XML، المستخدمة في كل مكان في Android - بدءًا من وصف التطبيق نفسه وحقوق الوصول إليه إلى تخزين السلاسل التي سيتم عرضها على الشاشة. ستحتاج أيضًا إلى القدرة على استخدام برامج وحدة التحكم المتخصصة.

إذًا، ما هي حزمة APK التي يتم من خلالها توزيع جميع برامج Android؟

تفكيك التطبيق

في هذه المقالة، عملنا فقط مع كود التطبيق المفكك، ولكن إذا تم إجراء تغييرات أكثر جدية على التطبيقات الكبيرة، فسيكون فهم كود smali أكثر صعوبة. لحسن الحظ، يمكننا فك كود dex إلى كود Java، والذي، على الرغم من أنه ليس أصليًا ولم يتم تجميعه مرة أخرى، إلا أنه من الأسهل قراءة وفهم منطق التطبيق. للقيام بذلك، سنحتاج إلى أداتين:

  • dex2jar هو مترجم Dalvik bytecode إلى JVM bytecode، وعلى أساسه يمكننا الحصول على كود بلغة Java؛
  • jd-gui هو برنامج فك ترجمات بحد ذاته يسمح لك بالحصول على كود Java قابل للقراءة من كود JVM الثانوي. وكبديل، يمكنك استخدام جاد (www.varaneckas.com/jad)؛ على الرغم من أنها قديمة جدًا، إلا أنها في بعض الحالات تولد تعليمات برمجية أكثر قابلية للقراءة من Jd-gui.

هذه هي الطريقة التي ينبغي استخدامها. أولاً، أطلقنا dex2jar، مع تحديد المسار إلى حزمة APK كوسيطة:

% dex2jar.sh mail.apk

ونتيجة لذلك، ستظهر حزمة Java mail.jar في الدليل الحالي، والذي يمكن فتحه بالفعل في jd-gui لعرض كود Java.

ترتيب حزم APK واستلامها

كيس من البلاستيك تطبيقات أندرويد، في الواقع، هو ملف ZIP عادي، ولا يلزم وجود أدوات خاصة لعرض محتوياته واستخراجه. يكفي أن يكون لديك برنامج أرشيفي - 7zip لنظام التشغيل Windows أو وحدة تحكم لفك الضغط على Linux. ولكن هذا يتعلق بالمغلف. ماذا يوجد بالداخل؟ بشكل عام، لدينا الهيكل التالي في الداخل:

  • معلومات التعريف/- يحتوي على شهادة رقمية للتطبيق، مع تحديد منشئه، والمجاميع الاختبارية لملفات الحزمة؛
  • الدقة/ - الموارد المختلفة التي يستخدمها التطبيق في عمله، مثل الصور والوصف التعريفي للواجهة، بالإضافة إلى البيانات الأخرى؛
  • AndroidManifest.xml- وصف التطبيق. يتضمن ذلك، على سبيل المثال، قائمة الأذونات المطلوبة نسخة أندرويدو الإذن المطلوبشاشة؛
  • classs.dex- رمز بايت للتطبيق المترجم لـ الآلة الافتراضيةدالفيك.
  • الموارد.arsc- أيضًا موارد، ولكن من نوع مختلف - على وجه الخصوص، السلاسل (نعم، يمكن استخدام هذا الملف للترويس!).

الملفات والأدلة المدرجة موجودة، إن لم تكن كلها، فربما تكون موجودة في الغالبية العظمى من ملفات APK. ومع ذلك، هناك عدد قليل من الملفات/الأدلة غير الشائعة الجديرة بالذكر:

  • أصول- التناظرية للموارد. يتمثل الاختلاف الرئيسي في أنه للوصول إلى مورد ما، يجب عليك معرفة معرفه، ولكن يمكن الحصول على قائمة الأصول ديناميكيًا باستخدام طريقة AssetManager.list() في كود التطبيق؛
  • ليب- مكتبات Linux الأصلية المكتوبة باستخدام NDK (Native Development Kit).

يتم استخدام هذا الدليل من قبل الشركات المصنعة للألعاب، حيث يضع هناك محرك اللعبة المكتوب بلغة C/C++، وكذلك من قبل منشئي التطبيقات عالية الأداء (على سبيل المثال، جوجل كروم). اكتشفنا الجهاز. ولكن كيف يمكنك الحصول على ملف الحزمة الخاص بالتطبيق الذي تهتم به؟ نظرًا لأنه من غير الممكن التقاط ملفات APK من الجهاز بدون الجذر (فهي موجودة في الدليل /data/app)، ولا يُنصح دائمًا بالتجذير، فهناك ثلاث طرق على الأقل لتوصيل ملف التطبيق إلى جهاز الكمبيوتر الخاص بك:

  • ملحق تنزيل APK لمتصفح Chrome؛
  • التطبيق الحقيقي APK Leecher.
  • استضافة الملفات المختلفة وVarezniks.

أيهما يجب استخدامه هو مسألة ذوق؛ نحن نفضل استخدام تطبيقات منفصلة، ​​لذلك سنصف استخدام Real APK Leecher، خاصة أنه مكتوب بلغة Java وبالتالي سيعمل إما في Windows أو Nix.

بعد بدء البرنامج، تحتاج إلى ملء ثلاثة حقول: البريد الإلكتروني وكلمة المرور ومعرف الجهاز - واختيار اللغة. الأولان هما البريد الإلكتروني وكلمة المرور لحساب Google الخاص بك الذي تستخدمه على الجهاز. والثالث هو معرف الجهاز، ويمكن الحصول عليه عن طريق كتابة الرمز على برنامج الاتصال # #8255## ثم ابحث عن سطر معرف الجهاز. عند ملئه، ما عليك سوى إدخال المعرف بدون البادئة android.

بعد ملء البيانات وحفظها، تظهر غالبًا رسالة "خطأ أثناء الاتصال بالخادم". لا علاقة له به جوجل بلايلذا لا تتردد في تجاهلها والبحث عن الحزم التي تهمك.

عرض وتعديل

لنفترض أنك عثرت على حزمة تثير اهتمامك، وقمت بتنزيلها وفك ضغطها... وعندما حاولت عرض بعض ملفات XML، تفاجأت باكتشاف أن الملف لم يكن نصًا. كيفية فكها وكيفية العمل مع الحزم بشكل عام؟ هل من الضروري حقًا تثبيت SDK؟ لا، ليس من الضروري تثبيت SDK على الإطلاق. في الواقع، تتطلب جميع خطوات استخراج حزم APK وتعديلها وتعبئتها الأدوات التالية:

  • أرشيف ZIPللتفريغ والتعبئة.
  • سمالي- مجمع/مفكك كود البايت للجهاز الظاهري Dalvik (code.google.com/p/smali);
  • ملائمة- أداة لتعبئة الموارد (افتراضيًا، يتم تخزين الموارد في شكل ثنائي لتحسين أداء التطبيق). مضمن في Android SDK، ولكن يمكن الحصول عليه بشكل منفصل؛
  • الموقع- أداة للتوقيع الرقمي على الحزمة المعدلة (bit.ly/Rmrv4M).

يمكنك استخدام كل هذه الأدوات بشكل منفصل، ولكن هذا غير مريح، لذلك من الأفضل استخدام برامج عالية المستوى مبنية على أساسها. إذا كنت تعمل على Linux أو Mac OS X، فهناك أداة تسمى apktool. فهو يسمح لك بتفريغ الموارد في شكلها الأصلي (بما في ذلك ملفات XML وarsc الثنائية)، وإعادة بناء حزمة بموارد تم تغييرها، لكنه لا يعرف كيفية توقيع الحزم، لذلك سيتعين عليك تشغيل أداة التوقيع يدويًا. على الرغم من أن الأداة المساعدة مكتوبة بلغة Java، إلا أن تثبيتها غير قياسي تمامًا. تحتاج أولاً إلى الحصول على ملف الجرة نفسه:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $export PATH=~/bin:$PATH

إذا كنت تعمل على نظام Windows، فهناك أداة ممتازة لها تسمى Virtious Ten Studio، والتي تقوم أيضًا بتجميع كل هذه الأدوات (بما في ذلك apktool نفسها)، ولكن بدلاً من واجهة CLI فهي توفر للمستخدم واجهة رسومية بديهية يمكنك من خلالها إجراء عمليات التفريغ والتفكيك والتفكيك ببضع نقرات. هذه الأداة عبارة عن أداة تبرع، أي أنه في بعض الأحيان تظهر نوافذ تطلب منك الحصول على ترخيص، ولكن في النهاية يمكن التسامح مع ذلك. لا فائدة من وصفها، لأنه يمكنك فهم الواجهة في بضع دقائق. ولكن يجب مناقشة أداة apktool بمزيد من التفاصيل نظرًا لطبيعة وحدة التحكم الخاصة بها.


دعونا نلقي نظرة على خيارات apktool. باختصار، هناك ثلاثة الأوامر الأساسية: d (فك التشفير)، b (البناء)، وإذا (تثبيت الإطار). إذا كان كل شيء واضحًا في الأمرين الأولين، فماذا تفعل العبارة الشرطية الثالثة؟ يقوم بتفكيك إطار عمل واجهة المستخدم المحدد، وهو أمر ضروري في الحالات التي تقوم فيها بتشريح أي حزمة نظام.

دعونا نلقي نظرة على الخيارات الأكثر إثارة للاهتمام في الأمر الأول:

  • - لا تقم بتفكيك ملفات dex؛
  • - لا تفريغ الموارد؛
  • - لا تقم بإدراج معلومات التصحيح في نتائج تفكيك ملف dex؛
  • --مسار الإطار- استخدم إطار عمل واجهة المستخدم المحدد بدلاً من الإطار المدمج في أداة apktool. الآن دعونا نلقي نظرة على خيارين للأمر b:
  • - التجميع القسري دون التحقق من التغييرات؛
  • - حدد المسار إلى aapt (أداة لإنشاء أرشيف APK)، إذا كنت تريد استخدامه من مصدر آخر لسبب ما.

يعد استخدام apktool أمرًا بسيطًا للغاية للقيام بذلك، ما عليك سوى تحديد أحد الأوامر والمسار إلى APK، على سبيل المثال:

$ apktool د mail.apk

بعد ذلك، ستظهر جميع ملفات الحزمة المستخرجة والمفككة في دليل البريد.

تحضير. تعطيل الإعلانات

النظرية جيدة بالطبع، ولكن لماذا نحتاجها إذا كنا لا نعرف ماذا نفعل بالحزمة غير المعبأة؟ دعونا نحاول تطبيق النظرية لصالحنا، وهي تعديل بعض البرامج بحيث لا تظهر لنا إعلانات. على سبيل المثال، فليكن الشعلة الافتراضية - الشعلة الافتراضية. يعد هذا البرنامج مثاليًا بالنسبة لنا، لأنه مليء بالإعلانات المزعجة إلى أقصى حد، علاوة على ذلك، فهو بسيط بما يكفي حتى لا يضيع في غابة التعليمات البرمجية.


لذلك، باستخدام إحدى الطرق المذكورة أعلاه، قم بتنزيل التطبيق من السوق. إذا قررت استخدام Virtious Ten Studio، فما عليك سوى فتح ملف APK في التطبيق واستخراجه، وإنشاء مشروع له (ملف -> مشروع جديد)، ثم في قائمة السياقالمشروع، حدد استيراد ملف. إذا وقع اختيارك على apktool، فما عليك سوى تشغيل أمر واحد:

$ apktool d com.kauf.particle.virtualtorch.apk

بعد ذلك، ستظهر شجرة ملفات مشابهة لتلك الموضحة في القسم السابق في الدليل com.kauf.particle.virtualtorch، ولكن مع دليل smali إضافي بدلاً من ملفات dex وملف apktool.yml. يحتوي الأول على كود مفكك لملف dex القابل للتنفيذ الخاص بالتطبيق، والثاني يحتوي على معلومات الخدمة اللازمة لأداة apktool لتجميع الحزمة مرة أخرى.

المكان الأول الذي يجب أن ننظر إليه هو بالطبع AndroidManifest.xml. وهنا نواجه على الفور السطر التالي:

ليس من الصعب تخمين أنه المسؤول عن منح التطبيق أذونات استخدام الاتصال بالإنترنت. في الواقع، إذا أردنا فقط التخلص من الإعلانات، فسنحتاج على الأرجح إلى حظر التطبيق من الإنترنت. دعونا نحاول القيام بذلك. نحذف السطر المحدد ونحاول إنشاء البرنامج باستخدام apktool:

$ apktool b com.kauf.particle.virtualtorch

سيظهر ملف APK الناتج في الدليل com.kauf.particle.virtualtorch/build/. ومع ذلك، لن يكون من الممكن تثبيته، لأنه غير موقع رقميًا و المجاميع الاختباريةالملفات (ببساطة لا يوجد دليل META-INF/ فيه). يجب علينا التوقيع على الحزمة باستخدام الأداة المساعدة apk-signer. انطلقت. تتكون الواجهة من علامتي تبويب - في الأولى (Key Generator) نقوم بإنشاء المفاتيح، وفي الثانية (APK Signer) نقوم بالتوقيع. لإنشاء مفتاحنا الخاص، املأ الحقول التالية:

  • الملف الهدف- ملف إخراج مخزن المفاتيح؛ وعادةً ما يقوم بتخزين زوج واحد من المفاتيح؛
  • كلمة المرورو يتأكد- كلمة المرور للتخزين.
  • الاسم المستعار- اسم المفتاح الموجود في المخزن؛
  • كلمة المرور المستعارةو يتأكد- كلمة مرور المفتاح السري؛
  • صحة- مدة الصلاحية (بالسنوات). القيمة الافتراضية هي الأمثل.

الحقول المتبقية اختيارية بشكل عام - ولكن يجب ملء واحد منها على الأقل.


تحذير

لتوقيع تطبيق باستخدام apk-signer، يجب عليك تثبيت Android SDK وتحديد المسار الكامل له في إعدادات التطبيق.

يتم توفير جميع المعلومات لأغراض إعلامية فقط. لا يتحمل المحررون ولا المؤلف مسؤولية أي ضرر محتمل ناتج عن مواد هذه المقالة.

يمكنك الآن التوقيع على APK باستخدام هذا المفتاح. في علامة التبويب APK Signer، حدد الملف الذي تم إنشاؤه حديثًا، وأدخل كلمة المرور والاسم المستعار للمفتاح وكلمة المرور، ثم ابحث عن ملف APK وانقر فوق الزر "تسجيل" بجرأة. إذا سارت الأمور على ما يرام، فسيتم التوقيع على الحزمة.

معلومات

نظرًا لأننا وقعنا على الحزمة بمفتاحنا الخاص، فسوف تتعارض مع التطبيق الأصلي، مما يعني أنه عندما نحاول تحديث البرنامج من خلال السوق، سنتلقى خطأ.

التوقيع الرقمي مطلوب فقط لبرامج الطرف الثالث، لذلك إذا كنت تقوم بالتعديل تطبيقات النظام، والتي يتم تثبيتها عن طريق النسخ إلى الدليل /system/app/، فلن تحتاج إلى التوقيع عليها.

بعد ذلك، قم بتنزيل الحزمة على هاتفك الذكي، وقم بتثبيتها وتشغيلها. فويلا، لقد انتهى الإعلان! ولكن بدلا من ذلك، ظهرت رسالة مفادها أننا لا نملك الإنترنت أو ليس لدينا الأذونات المناسبة. من الناحية النظرية، قد يكون هذا كافيًا، لكن الرسالة تبدو مزعجة، وبصراحة، لقد حالفنا الحظ بتطبيق غبي. من المرجح أن تقوم البرامج المكتوبة عادةً بتوضيح بيانات الاعتماد الخاصة بها أو التحقق من الاتصال بالإنترنت وبخلاف ذلك ترفض ببساطة التشغيل. ماذا تفعل في هذه الحالة؟ طبعا قم بتعديل الكود

عادةً ما يقوم مؤلفو التطبيق بإنشاء فئات خاصة لعرض الإعلانات وطرق الاتصال لهذه الفئات عند تشغيل التطبيق أو أحد "أنشطته" (بعبارات بسيطة، شاشات التطبيق). دعونا نحاول العثور على هذه الفئات. نذهب إلى الدليل smali، ثم com (في org لا يوجد سوى open مكتبة الرسومات cocos2d)، ثم kauf (هناك بالضبط، لأن هذا هو اسم المطور وجميع الأكواد الخاصة به موجودة) - وها هو دليل التسويق. نجد في الداخل مجموعة من الملفات ذات الامتداد smali. هذه فئات، وأبرزها فئة Ad.smali، ومن اسمها يسهل تخمين أنها هي التي تعرض الإعلانات.

يمكننا تغيير منطق عمله، ولكن سيكون من الأسهل بكثير إزالة الاستدعاءات لأي من أساليبه من التطبيق نفسه. لذلك، نترك دليل التسويق وننتقل إلى دليل الجسيمات المجاور، ثم إلى Virtualtorch. يستحق الملف MainActivity.smali اهتمامًا خاصًا هنا. هذه فئة Android قياسية تم إنشاؤها بواسطة Android SDK وتعيينها كنقطة دخول إلى التطبيق (على غرار الوظائف الرئيسيةشركة). افتح الملف للتحرير.

يوجد بالداخل كود smali (المجمع المحلي). إنه أمر محير للغاية ويصعب قراءته نظرًا لطبيعته ذات المستوى المنخفض، لذلك لن ندرسه، ولكننا سنجد ببساطة جميع الإشارات إلى فئة الإعلان في الكود ونعلق عليها. ندخل سطر "إعلان" في البحث ونصل إلى السطر 25:

إعلان خاص ميداني:Lcom/kauf/marketing/Ad;

هنا يتم إنشاء حقل إعلان لتخزين كائن فئة الإعلان. نعلق بوضع علامة ### أمام السطر. نواصل البحث. السطر 423:

المثيل الجديد v3، Lcom/kauf/marketing/Ad؛

هذا هو المكان الذي يحدث فيه إنشاء الكائن. دعونا التعليق. نواصل البحث ونجد في السطور 433، 435، 466، 468، 738، 740، 800 و 802 استدعاءات لطرق فئة الإعلان. دعونا التعليق. يبدو أن هذا هو الحال. يحفظ. الآن يجب إعادة تجميع الحزمة معًا والتحقق من وظائفها ووجود الإعلانات. لنقاء التجربة، نعيد السطر الذي تمت إزالته من AndroidManifest.xml، ونجمع الحزمة، ونوقعها ونثبتها.

خنزير غينيا لدينا. الإعلان مرئي

أُووبس! اختفت الإعلانات فقط أثناء تشغيل التطبيق، ولكنها ظلت في القائمة الرئيسية، والتي نراها عند تشغيل البرنامج. إذن، انتظر، ولكن نقطة الدخول هي فئة MainActivity، وقد اختفى الإعلان أثناء تشغيل التطبيق، لكنه بقي في القائمة الرئيسية، فهل نقطة الدخول مختلفة؟ لتحديد نقطة الإدخال الحقيقية، أعد فتح ملف AndroidManifest.xml. و نعم يحتوي على الأسطر التالية:

يخبروننا (والأهم من ذلك، android) أنه يجب إطلاق نشاط يسمى Start استجابةً لإنشاء هدف (حدث) android.intent.action.MAIN من فئة android.intent.category.LAUNCHER. يتم إنشاء هذا الحدث عند النقر على أيقونة التطبيق في المشغل، لذلك فهو يحدد نقطة الدخول، وهي فئة البداية. على الأرجح، قام المبرمج أولاً بكتابة تطبيق بدون قائمة رئيسية، كانت نقطة الدخول إليها هي فئة MainActivity القياسية، ثم أضاف نافذة جديدة (نشاط) تحتوي على القائمة والموصوفة في فئة Start، وجعلها الإدخال يدويًا نقطة.

افتح ملف Start.smali وابحث مرة أخرى عن السطر "Ad"، نجد في السطرين 153 و155 ذكرًا لفئة FirstAd. وهو موجود أيضًا في الكود المصدري، ووفقًا للاسم، فهو مسؤول عن عرض الإعلانات على الشاشة الرئيسية. دعونا ننظر إلى أبعد من ذلك، هناك إنشاء مثيل لفئة FirstAd ونية، والتي ترتبط في السياق بهذا المثيل، ثم تسمية cond_10، والتي يتم تنفيذ الانتقال الشرطي إليها بالضبط قبل إنشاء مثيل للفئة :

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

على الأرجح، يقوم البرنامج بشكل عشوائي بحساب ما إذا كان يجب عرض الإعلانات على الشاشة الرئيسية، وإذا لم يكن الأمر كذلك، فإنه يقفز مباشرة إلى cond_10. حسنًا، دعونا نبسط مهمتها ونستبدل الانتقال المشروط بانتقال غير مشروط:

#if-ne p1, v0, :cond_10 goto:cond_10

لم يعد هناك أي ذكر لـ FirstAd في الكود، لذلك نغلق الملف ونعيد تجميع الشعلة الافتراضية باستخدام apktool. انسخه على هاتفك الذكي، ثم قم بتثبيته، ثم قم بتشغيله. لقد اختفت جميع الإعلانات، ونحن نهنئنا عليها جميعًا.

نتائج

هذه المقالة مجرد مقدمة مختصرة عن طرق اختراق تطبيقات الاندرويد وتعديلها. ظلت العديد من المشكلات خلف الكواليس، مثل إزالة الحماية، وتحليل التعليمات البرمجية المبهمة، وترجمة موارد التطبيق واستبدالها، بالإضافة إلى تعديل التطبيقات المكتوبة باستخدام Android NDK. ومع ذلك، مع وجود المعرفة الأساسية، فهي مسألة وقت فقط لمعرفة كل شيء.

لقد عملت لعدة أيام (وربما ليالٍ)، والآن أصبح أول تطبيق مختلط للهاتف المحمول جاهزًا. إنه مستقر تمامًا، ويتم إغلاق معظم الأخطاء الحرجة. لم يتبق سوى القليل، ولكن عندما تتذكر أن الكمالية شر، فإنك تتخذ قرارًا قويًا بنشر التطبيق.

الشرط الأساسي لذلك هو وجود ملف APK موقّع. سوف تتعلم كيفية التوقيع على ملف APK في هذه المقالة.

تراجع صغير

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

البيانات الأولية

أفترض أن لديك كل شيء جاهزًا لتطوير تطبيقات الهاتف المحمول المختلطة باستخدام Apache Cordova. يجب التثبيت:
  • أباتشي كوردوفا
  • مجموعة تطوير جافا
  • أدوات أندرويد SDK
اسم المشروع والتطبيق هو lcf. استبدل باسم مشروعك عند الضرورة.

دعنا نذهب

تحتاج أولاً إلى إنشاء إصدار إصدار لتطبيقك. ولكن قبل ذلك، دعونا نتأكد من إزالة جميع المكونات الإضافية غير الضرورية. على سبيل المثال، لا نحتاج إلى مكون إضافي يقوم بإخراج معلومات تصحيح الأخطاء إلى وحدة التحكم. فلنحذفها:

$ cordova plugin rm cordova-plugin-console
لإنشاء نسخة إصدار لنظام Android، استخدم الأمر يبنيمع العلم --يطلق:

بناء كوردوفا $ - إصدار android
سيتم إنشاء هذا الأمر غير موقعةملف APK في الدليل:

المنصات/أندرويد/بناء/المخرجات/apk
على سبيل المثال، المنصات/android/build/outputs/apk/ android-release-unsigned.apk. ثم سنحتاج إلى التوقيع على هذا الملف وتشغيل الأداة المساعدة com.zipalignلتحسين وإعداد الملف لـ Google Play.

للتوقيع على ملف تحتاج إلى شهادة. لنقم بإنشائه باستخدام الأداة المساعدة com.keytoolوالذي تم تضمينه في JDK:

$ keytool -genkey -v -keystore lcf.keystore - الاسم المستعار lcf -keyalg RSA -keysize 2048 -صلاحية 10000
مهم

يجب تذكر قيمة المعلمة -alias، أو من الأفضل تدوينها. في المثال أعلاه، يساوي lcf (استنادًا إلى الأحرف الأولى من اسم التطبيق Loyal Client Free). لن أقدم تفاصيل هنا، ولكن إذا كنت مهتمًا، فاكتب في التعليقات وسأخبرك بالمزيد.

يتم استخدام الاسم المستعار في كل مرة تقوم فيها بالتوقيع * التطبيقات. لتسهيل تذكره، استخدم اسم ملف تخزين المفاتيح كاسم مستعار، على سبيل المثال:


-keystore hello-world.keystore - الاسم المستعار hello-world -keystore Weather-app.keystore - الاسم المستعار Weather-App -keystore todo.keystore - الاسم المستعار Todo
* تحتاج إلى التوقيع على التطبيق في كل مرة يتم فيها إصدار التحديثات

جدوى com.keytoolيسأل سلسلة من الأسئلة. سيكون هناك 8 منهم في المجموع. للحصول على فكرة عن الأسئلة والإجابات التقريبية مقدمًا، يتم تقديمها جميعًا أدناه، تحت المفسد.

أسئلة Keytool والإجابات النموذجية لها

1. أدخل كلمة مرور مخزن المفاتيح:
هنا يجب عليك إدخال كلمة مرور للملف (6 أحرف على الأقل). يجب تدوين كلمة المرور المدخلة في مكان آمن، حيث تكون ضرورية في كل مرة تقوم فيها بالتوقيع على الطلب.

2. أعد إدخال كلمة المرور الجديدة:
أعد إدخال كلمة المرور الخاصة بك.

3. ما هو اسمك الأول والأخير؟
: إيفان بيتروف
اسمك الأول والأخير. القيمة الموجودة بين قوسين مربعين هي القيمة الافتراضية.

4. ما اسم وحدتك التنظيمية؟
: هو - هي
اسم القسم الخاص بشركتك. يمكنك تركها فارغة، وأشير إليها.

5. ما هو اسم مؤسستك؟
: 2مطورين
اسم مؤسستك. يرجى الإشارة إلى إن وجدت.

6. ما هو اسم مدينتك أو منطقتك؟
: موسكو
اسم المدينة

7. ما هو اسم ولايتك أو مقاطعتك؟
: شهر.
اسم المنطقة

8. ما هو رمز البلد المكون من حرفين لهذه الوحدة؟
: رو
رمز البلد. أشير إلى RU.

: ذ

تأكد مما إذا كان كل شيء صحيحًا أو اضغط على Enter للدخول مرة أخرى.


في النهاية، ستظهر رسالة تشير إلى نجاح إنشاء المفتاح. سيُطلب منك تعيين كلمة مرور للمفتاح الخاص (إذا كنت تريد تركها كما هي للشهادة، فاضغط على Enter):

إنشاء زوج مفاتيح RSA 2048 بت وشهادة موقعة ذاتيًا (SHA256withRSA) بصلاحية 10000 يوم لـ: CN=Ivan Petrov، OU=IT، O=2developers، L=Moscow، ST=MO، C=RU مفتاح الإدخال كلمة المرور ل (العودة إذا كانت نفس كلمة مرور ملف تخزين المفاتيح):
سيتم إنشاء ملف في الدليل الحالي lcf.keystore.

مهم

يجب حفظ الملف الذي تم إنشاؤه في مكان آمن. إذا كنت تستخدم مستودعًا خاصًا، فيمكن الالتزام بالملف مع الكود المصدري للتطبيق. بشكل عام، من الأفضل تخزين الشهادات بشكل منفصل. إذا فقدت الشهادة، فلن تتمكن من إصدار تحديثات التطبيق.

هناك خطوتان متبقيتان وسيكون لديك ملف APK جاهز للتوزيع. دعنا ننتقل إلى التوقيع.

لتوقيع ملف APK الخاص بك، استخدم الأداة المساعدة jarsigner، والذي تم تضمينه أيضًا في JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
تتم الإشارة إلى اسم الشهادة بعد المعلمة -متجر المفاتيحالاسم المستعار - بعد اسم الملف.

أخيرًا، لتحسين ملف APK، سنستخدم الأداة المساعدة com.zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
المعلمة الأخيرة هي اسم الملف الذي ستقوم بتحميله إلى Google Play.

مهم.

جدوى com.zipalignإنه جزء من أدوات Android SDK ويمكن العثور عليه هنا:

/path/to/Android/sdk/build-tools/VERSION/zipalign

خاتمة

لديك الآن ملف APK جاهز للتوزيع ويمكن تحميله على Google Play. املأ الوصف وحدد تقييم طلبك ولا تتردد في النقر فوق "نشر".

لقد عملت لعدة أيام (وربما ليالٍ)، والآن أصبح أول تطبيق مختلط للهاتف المحمول جاهزًا. إنه مستقر تمامًا، ويتم إغلاق معظم الأخطاء الحرجة. لم يتبق سوى القليل، ولكن عندما تتذكر أن الكمالية شر، فإنك تتخذ قرارًا قويًا بنشر التطبيق.

الشرط الأساسي لذلك هو وجود ملف APK موقّع. سوف تتعلم كيفية التوقيع على ملف APK في هذه المقالة.

تراجع صغير

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

البيانات الأولية

أفترض أن لديك كل شيء جاهزًا لتطوير تطبيقات الهاتف المحمول المختلطة باستخدام Apache Cordova. يجب التثبيت:
  • أباتشي كوردوفا
  • مجموعة تطوير جافا
  • أدوات أندرويد SDK
اسم المشروع والتطبيق هو lcf. استبدل باسم مشروعك عند الضرورة.

دعنا نذهب

تحتاج أولاً إلى إنشاء إصدار إصدار لتطبيقك. ولكن قبل ذلك، دعونا نتأكد من إزالة جميع المكونات الإضافية غير الضرورية. على سبيل المثال، لا نحتاج إلى مكون إضافي يقوم بإخراج معلومات تصحيح الأخطاء إلى وحدة التحكم. فلنحذفها:

$ cordova plugin rm cordova-plugin-console
لإنشاء نسخة إصدار لنظام Android، استخدم الأمر يبنيمع العلم --يطلق:

بناء كوردوفا $ - إصدار android
سيتم إنشاء هذا الأمر غير موقعةملف APK في الدليل:

المنصات/أندرويد/بناء/المخرجات/apk
على سبيل المثال، المنصات/android/build/outputs/apk/ android-release-unsigned.apk. ثم سنحتاج إلى التوقيع على هذا الملف وتشغيل الأداة المساعدة com.zipalignلتحسين وإعداد الملف لـ Google Play.

للتوقيع على ملف تحتاج إلى شهادة. لنقم بإنشائه باستخدام الأداة المساعدة com.keytoolوالذي تم تضمينه في JDK:

$ keytool -genkey -v -keystore lcf.keystore - الاسم المستعار lcf -keyalg RSA -keysize 2048 -صلاحية 10000
مهم

يجب تذكر قيمة المعلمة -alias، أو من الأفضل تدوينها. في المثال أعلاه، يساوي lcf (استنادًا إلى الأحرف الأولى من اسم التطبيق Loyal Client Free). لن أقدم تفاصيل هنا، ولكن إذا كنت مهتمًا، فاكتب في التعليقات وسأخبرك بالمزيد.

يتم استخدام الاسم المستعار في كل مرة تقوم فيها بالتوقيع * التطبيقات. لتسهيل تذكره، استخدم اسم ملف تخزين المفاتيح كاسم مستعار، على سبيل المثال:


-keystore hello-world.keystore - الاسم المستعار hello-world -keystore Weather-app.keystore - الاسم المستعار Weather-App -keystore todo.keystore - الاسم المستعار Todo
* تحتاج إلى التوقيع على التطبيق في كل مرة يتم فيها إصدار التحديثات

جدوى com.keytoolيسأل سلسلة من الأسئلة. سيكون هناك 8 منهم في المجموع. للحصول على فكرة عن الأسئلة والإجابات التقريبية مقدمًا، يتم تقديمها جميعًا أدناه، تحت المفسد.

أسئلة Keytool والإجابات النموذجية لها

1. أدخل كلمة مرور مخزن المفاتيح:
هنا يجب عليك إدخال كلمة مرور للملف (6 أحرف على الأقل). يجب تدوين كلمة المرور المدخلة في مكان آمن، حيث تكون ضرورية في كل مرة تقوم فيها بالتوقيع على الطلب.

2. أعد إدخال كلمة المرور الجديدة:
أعد إدخال كلمة المرور الخاصة بك.

3. ما هو اسمك الأول والأخير؟
: إيفان بيتروف
اسمك الأول والأخير. القيمة الموجودة بين قوسين مربعين هي القيمة الافتراضية.

4. ما اسم وحدتك التنظيمية؟
: هو - هي
اسم القسم الخاص بشركتك. يمكنك تركها فارغة، وأشير إليها.

5. ما هو اسم مؤسستك؟
: 2مطورين
اسم مؤسستك. يرجى الإشارة إلى إن وجدت.

6. ما هو اسم مدينتك أو منطقتك؟
: موسكو
اسم المدينة

7. ما هو اسم ولايتك أو مقاطعتك؟
: شهر.
اسم المنطقة

8. ما هو رمز البلد المكون من حرفين لهذه الوحدة؟
: رو
رمز البلد. أشير إلى RU.

: ذ

تأكد مما إذا كان كل شيء صحيحًا أو اضغط على Enter للدخول مرة أخرى.


في النهاية، ستظهر رسالة تشير إلى نجاح إنشاء المفتاح. سيُطلب منك تعيين كلمة مرور للمفتاح الخاص (إذا كنت تريد تركها كما هي للشهادة، فاضغط على Enter):

إنشاء زوج مفاتيح RSA 2048 بت وشهادة موقعة ذاتيًا (SHA256withRSA) بصلاحية 10000 يوم لـ: CN=Ivan Petrov، OU=IT، O=2developers، L=Moscow، ST=MO، C=RU مفتاح الإدخال كلمة المرور ل (العودة إذا كانت نفس كلمة مرور ملف تخزين المفاتيح):
سيتم إنشاء ملف في الدليل الحالي lcf.keystore.

مهم

يجب حفظ الملف الذي تم إنشاؤه في مكان آمن. إذا كنت تستخدم مستودعًا خاصًا، فيمكن الالتزام بالملف مع الكود المصدري للتطبيق. بشكل عام، من الأفضل تخزين الشهادات بشكل منفصل. إذا فقدت الشهادة، فلن تتمكن من إصدار تحديثات التطبيق.

هناك خطوتان متبقيتان وسيكون لديك ملف APK جاهز للتوزيع. دعنا ننتقل إلى التوقيع.

لتوقيع ملف APK الخاص بك، استخدم الأداة المساعدة jarsigner، والذي تم تضمينه أيضًا في JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
تتم الإشارة إلى اسم الشهادة بعد المعلمة -متجر المفاتيحالاسم المستعار - بعد اسم الملف.

أخيرًا، لتحسين ملف APK، سنستخدم الأداة المساعدة com.zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
المعلمة الأخيرة هي اسم الملف الذي ستقوم بتحميله إلى Google Play.

مهم.

جدوى com.zipalignإنه جزء من أدوات Android SDK ويمكن العثور عليه هنا:

/path/to/Android/sdk/build-tools/VERSION/zipalign

خاتمة

لديك الآن ملف APK جاهز للتوزيع ويمكن تحميله على Google Play. املأ الوصف وحدد تقييم طلبك ولا تتردد في النقر فوق "نشر".

منذ أن بحثت في Google عن السؤال بنفسي " كيفية التوقيع على ملف apk"، أعلم أن العثور على تعليمات عملية ومفهومة تمامًا ليس بالأمر السهل. ولهذا السبب قررت أن أكتب مادة بنفسي حول كيفية التوقيع بشكل صحيح على برنامجك أو لعبتك على Android.

كما نعلم الآن، بدون التوقيع الرقمي، لن يكون من الممكن طرح إبداعك في السوق، وهذا أمر خطير بالفعل، لقد لاحظت الكثير من مطوري Android الشباب، إذا جاز التعبير، ينسى المبتدئون تمامًا التوقيع على طلباتهم ومحاولة القيام بشيء ما به لاحقًا وهذا ما يتساءل عن سبب عدم قدرتهم على تنفيذ هذا الإجراء أو ذاك باستخدام ملف APK الخاص بهم.

لذلك، دعونا لا نتباطأ ونبدأ على الفور بكيفية التوقيع على ملف APK الخاص بك وما تحتاج إلى استخدامه بالفعل لتحقيق النتيجة المرجوة.

هذه الطريقة هي الأصح من بين جميع الطرق المذكورة، لذلك سنصفها في هذه المادة. سنصنع مفاتيحنا الخاصة باستخدام البيانات والشهادات الخاصة بنا ونستخدمها للتوقيع على التطبيق الذي تقوم بإنشائه.

للعمل سنحتاج إلى: OpenSSL وSignApk.

أولاً، لنقم بإنشاء شهادة ومفتاح توقيع. قم بتثبيت OpenSSL. أثناء التثبيت، سيطالبك برنامج التثبيت بنسخ المكونات إلى مجلد ويندوز، حدد مجلد Bin، والذي سيكون المكان الذي ستقوم فيه بتثبيت كافة ملفات OpenSSL.

افتح الآن باسم مسؤول النظام(وهذا مهم جدًا!) سطر الأوامر. ثم انتقل إلى سطر الأوامر في مجلد بن، الموجود في المجلد الذي قمت بتثبيت OpenSSL فيه (على سبيل المثال، C:\OpenSSL\Bin\أو C:\ملفات البرنامج\OpenSSL\Bin\). إذا كنت لا تعرف، فسيتم التغيير إلى مجلد آخر باستخدام الأمر قرص مضغوط. وهذا هو، من أجل الذهاب إلى المجلد المطلوبيجب عليك تشغيل أمر مثل هذا:

القرص المضغوط C:\OpenSSL\Bin\

بمجرد دخولك إلى مجلد Bin، يمكنك المتابعة مباشرةً لإنشاء الشهادة والمفتاح.

الخطوة 1(نقوم بإنشاء مفتاح بطول 1024 بت)

قم بتشغيل الأمر:

opensl genrsa -out key.pem 1024

الخطوة 2(نقوم بإنشاء طلب شهادة بناءً على المفتاح)

قم بتشغيل الأمر:

opensl req -new -key key.pem -out request.pem

في هذه المرحلة، ستحتاج إلى إدخال بياناتك، والتي ستحدد هويتك في الشهادة.

خطوة 3 (نحن نولد مفتاح خاصحسب الشهادة)

قم بتشغيل الأمر:

openssl x509 -req -days 9999 -in request.pem -signkey key.pem -outcertification.pem

الخطوة 4(نقوم بإنشاء مفتاح عام)

قم بتشغيل الأمر:

openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

في هذه المرحلة، اكتمل إنشاء الملفات التي نحتاجها لتسجيل ألعابك وتطبيقاتك. باستخدام المفتاح والشهادة التي تم إنشاؤها، يمكنك تسجيل أي عدد تريده من الألعاب والتطبيقات على Android.

الآن لنبدأ فعليًا في التوقيع على التطبيق. قم بفك ضغط أرشيف SingApk الذي تم تنزيله من الرابط أعلاه. انقل ملفين من مجلد Bin حيث أنشأنا الشهادة والمفتاح: شهادة.pemو key.pk8إلى المجلد الذي قمت باستخراج SingApk منه. يجب أن يعرض Windows مربع حوار استبدال الملف - استبدال.

الآن للتوقيع ملف apkفريد التوقيع الرقمي، الذي قمت بإنشائه بنفسك، ما عليك سوى استخدام الماوس لسحب ملف APK الخاص بك إليه Sign_APK.bat. لكي لا تقوم بسحب ملف من نافذة إلى أخرى (وهذا ليس مناسبًا)، انقل ملف APK الخاص بك إلى المجلد الذي يحتوي على SingApk. بعد التنفيذ، سيظهر ملف في المجلد مع SingApk apk_signed.apk، والذي سيكون تطبيقك أو لعبتك الموقعة.

تقوم الأداة المساعدة keytool الموضحة في القسم السابق بإنشاء شهادة رقمية، وهي إحدى معلمات أداة jarsigner. المعلمة الأخرى هي حزمة Android التي يجب توقيعها. لإنشاء حزمة Android، يجب عليك استخدام الأداة المساعدة Export Unsigned Application Package من وحدة ADT الخاصة بـ Eclipse. لاستدعاء هذه الأداة المساعدة، ستحتاج إلى النقر بزر الماوس الأيمن على مشروع Android في Eclipse، وتحديد أدوات Android من قائمة السياق، ثم تحديد خيار تصدير حزمة التطبيق غير الموقعة. بمجرد تشغيلها، تقوم هذه الأداة المساعدة بإنشاء ملف .apk غير موقع بشهادة تصحيح الأخطاء.

لتجربة ذلك، قم بتشغيل الأداة المساعدة Export Unsigned Application Package على أحد مشاريع Android لديك واحفظ ملف .apk الذي تم إنشاؤه في مكان ما. في في هذا المثالسنستخدم مجلد تخزين المفاتيح الذي تم إنشاؤه مسبقًا وننشئ ملف .apk باسم C:\android\release\myappraw.apk.

الآن لدينا ملف .apk وعنصر تخزين المفاتيح، يمكننا تشغيل أداة jarsigner لتوقيع ملف .apk (انظر 14.2). في هذه الحالة، يجب تحديد المسارات الكاملة لملف تخزين المفاتيح وملف apk.

للتوقيع على ملف .apk، يتم تمرير الأداة المساعدة jarsigner إلى موقع مخزن المفاتيح وكلمة مرور مخزن المفاتيح وكلمة مرور المفتاح السري والمسار إلى ملف .apk والاسم المستعار لعنصر مخزن المفاتيح. بعد ذلك، يقوم jarsigner بالتوقيع على ملف apk شهادة رقميةمن عنصر تخزين المفاتيح لتشغيل الأداة المساعدة jarsigner، يجب عليك إما فتح نافذة أداة (انظر الفصل 2) أو فتح نافذة سطر الأوامرأو نافذة المحطة الطرفية وافتح المجلد bin في الدليل

JDK (إذا لم يتم تحديد هذا المجلد في متغير بيئة PATH). لأسباب أمنية، من الأفضل عدم تمرير كلمات المرور كوسائط أوامر، وفي هذه الحالة سيطالبك jarsigner بكلمات المرور في وقت التشغيل. في الشكل. يوضح الشكل 14.3 مثالاً على استدعاء الأداة المساعدة jarsigner. ربما لاحظت ذلك في الشكل. 14.3 تطلب الأداة jarsigner كلمة مرور واحدة فقط. وذلك لأنه لا تتم المطالبة بكلمة مرور المفتاح إذا كانت كلمة المرور وكلمة المرور متماثلتين. بالمعنى الدقيق للكلمة، يحتاج أمر jarsigner في e 14.2 فقط إلى تحديد كلمة المرور -keypass عندما تكون مختلفة عن كلمة المرور -storepass.

كما ذكرنا سابقًا، يتطلب Android توقيع تطبيقك رقميًا لمنع المبرمجين الضارين من استبدال تطبيقك بإصدارهم الخاص. للقيام بذلك، يتطلب Android توقيع تحديثات التطبيق بنفس توقيع التطبيق الأصلي. إذا تم توقيع التطبيق بتوقيع مختلف، فإن Android يعتبره تطبيقات مختلفة. لذلك، نذكرك مرة أخرى: تعامل مع ملف تخزين المفاتيح بعناية بحيث يكون متاحًا لك لاحقًا عندما تحتاج إلى إصدار تحديث للتطبيق.