ربط ملفين apk في واحد

الصورة

لقد قررت بطريقة ما أن ألصق ملفين لملف apk ، ولكن ليس هناك الكثير من المعلومات حول كيفية القيام بذلك على الإنترنت. ثم مسلحًا بـ Ahmyth Trojan for android ( مصدره ) ، بدأت رحلة إلى عالم لصق apk بأيديكم. لفترة وجيزة حول هذا أبعد ...

باختصار عن جوهر المشكلة:

هناك ملفان لملف apk (لنفترض 1.apk و 2. apk). تتمثل المهمة في إنشاء ملف apk 3.apk ، والذي سيتم لصقه بـ 1 و 2 apk (وسيؤدي وظائفه).

باختصار (كود بيثون):


لدينا:


1. مجلد apk - للملفات مع apk.
2. مجلد tmp - للملفات المترجمة ؛
3. مجلد الأدوات - مع برامج إضافية (مثل apktool.jar ، sign.jar ، testkey).

أولاً ، نحدد المجلد الحالي الذي نعمل فيه والمجلدات التي سنقوم بفكها:

#!/usr/bin/python # -*- coding: utf-8 -*- import re import codecs import os from os import listdir import shutil import subprocess import datetime pwd = os.getenv("PWD", os.getcwd()) #   apkFolder1=pwd+"/tmp/1" #  apk1 apkFolder2=pwd+"/tmp/2" #  apk2 

ثم نقوم بفك ملفات apk إلى مجلد tmp:

 print " "+pwd+"/apk/1.apk" subprocess.call("java -jar "+ pwd+"/tools/apktool.jar d "+pwd+"/apk/1.apk -f -o " + pwd+"/tmp/1" , shell=True ) print " "+pwd+"/apk/2.apk" subprocess.call("java -jar " + pwd+"/tools/apktool.jar d "+pwd+"/apk/2.apk -f -o " + pwd+"/tmp/2" , shell=True ) 

بعد هذه الخطوة ، لدينا مجلدين / tmp / 1 و / tmp / 2 مع ملفات غير مجمعة. الآن الجزء الممتع هو اتحاد البيانات !

 print "  " mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read() #   ,       service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")] #      permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")]#    mainfest2 = open(apkFolder2+"/AndroidManifest.xml", "r").read() #       new_mainfest2 = mainfest2[0:mainfest2.find("<application")] +permission1+ mainfest2[mainfest2.find("<application"):mainfest2.find("</application")] +service1 + mainfest2[mainfest2.find("</application>"):mainfest2.find("</manifest>")+len("</manifest>")] #    new_mainfest = open(apkFolder2+"/AndroidManifest.xml", "w") new_mainfest.write(new_mainfest2 ) new_mainfest.close() 

الآن بالترتيب في هذا الرمز:

نجد ملف AndroidManifest.xml في المجلد / tmp / 1:

 mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read() 

في هذا الملف نجد جميع الخدمات والفئات المعلنة:

 service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")] 

في مجلد AndroidManifest.xml / tmp / 1 ، انسخ كل شيء من العلامة "<استخدام-إذن" إلى العلامة "<تطبيق". فيما يلي جميع الأذونات التي يحتاجها البرنامج:

 permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")] 

نجد ملف AndroidManifest.xml في مجلد / tmp / 2:

 mainfest1 = open(apkFolder2+"/AndroidManifest.xml", "r").read() 

بعد ذلك ، نحتاج إلى دمج كل هذا في ملف واحد ، بحيث يكون كل شيء في مكانه.

يتكون البيان الجديد (new_mainfest2) من:

  1. بداية تطبيق AndroidManifest.xml 2.apk (من البداية إلى نهاية الأذونات اللازمة) ؛
  2. نضيف هنا أذونات التطبيق 1.apk (إذن 1) ؛
  3. أضف كل ما هو موجود في AndroidManifest.xml من تطبيق 2.apk من "<application" إلى "

إضافة جميع خدمات التطبيق 1. apk (service1)؛
أضف بقايا تطبيق AndroidManifest.xml 2.apk.

 new_mainfest2 = mainfest2[0:mainfest2.find("<application")] +permission1+ mainfest2[mainfest2.find("<application"):mainfest2.find("</application")] +service1 + mainfest2[mainfest2.find("</application>"):mainfest2.find("</manifest>")+len("</manifest>")] 

استبدال AndroidManifest.xml في المجلد / tmp / 2:

 #    new_mainfest = open(apkFolder2+"/AndroidManifest.xml", "w") new_mainfest.write(new_mainfest2 ) new_mainfest.close() 

هذا يكمل بناء AndroidManifest. يبقى نسخ جميع الفئات من / tmp / 1 إلى / tmp / 2. بتعبير أدق ، سنقوم بنسخ مجلدات smali (هنا جميع فئات التطبيق) وغير معروفة :

 subprocess.call("cp -rn "+apkFolder1+"/smali "+apkFolder2 , shell=True ) #   /smali apkFolder1  /smali apkFolder2 subprocess.call("cp -rn "+apkFolder1+"/unknown "+apkFolder2 , shell=True ) #   /unknown apkFolder1  /unknown apkFolder2 

حسنًا ، في الختام ، تحتاج إلى جمع كل هذا في ملف apk ، وتوقيع:

  print " apk   "+ pwd+"/tmp/3.apk" subprocess.call("java -jar " + pwd+"/tools/apktool.jar b "+pwd+"/tmp/2 -o " + pwd+"/tmp/3.apk" , shell=True ) print "  "+ pwd+"/tmp/3.apk" subprocess.call("java -jar " + pwd+"/tools/sign.jar "+pwd+"/tmp/3.apk --override", shell=True ) 

ونتيجة لذلك ، يظهر ملف 3.apk في مجلد tmp ، وهو لصق الاثنين الآخرين.

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

مصادر:

AhMyth-Android-RAT

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


All Articles