
J'ai décidé en quelque sorte de coller deux fichiers apk, mais il n'y a pas beaucoup d'informations sur la façon de le faire sur Internet. Puis armé du cheval de Troie Ahmyth pour android (sa
source ), un voyage a commencé dans le monde du collage apk de vos propres mains. Brièvement à ce sujet plus loin ...
Brièvement sur l'essence du problème:
Il existe deux fichiers apk (disons 1.apk et 2.apk). La tâche consiste à créer 3.apk, qui collera 1 et 2 apk (et remplira leurs fonctions).
En résumé (code python):
Nous avons:
1. Dossier
apk - pour les fichiers avec apk;
2. Dossier
tmp - pour les fichiers décompilés;
3. Dossier
Tools - avec des logiciels supplémentaires (tels que apktool.jar, sign.jar, testkey).
Tout d'abord, nous déterminons le dossier courant dans lequel nous travaillons et les dossiers où nous allons décompiler:
Ensuite, nous décompilons les fichiers apk dans le dossier 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 )
Après cette étape, nous avons deux dossiers / tmp / 1 et / tmp / 2 avec des fichiers décompilés. Maintenant, la partie amusante est l'
union des manifestes !
print " " mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read()
Maintenant dans l'ordre dans ce code:Nous trouvons le fichier AndroidManifest.xml dans le dossier / tmp / 1:
mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read()
Dans ce fichier, nous trouvons tous les services et classes déclarés:
service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")]
Dans le dossier AndroidManifest.xml / tmp / 1, copiez tout depuis la balise "<uses-permission" vers la balise "<application". Voici toutes les autorisations dont le programme a besoin:
permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")]
Nous trouvons le fichier AndroidManifest.xml dans le dossier / tmp / 2:
mainfest1 = open(apkFolder2+"/AndroidManifest.xml", "r").read()
Après cela, nous devons
combiner tout cela en un seul fichier , afin que tout soit en place.
Le nouveau manifeste (new_mainfest2) comprend:
- Le début de l'application AndroidManifest.xml 2.apk (du début à la fin des autorisations nécessaires);
- Nous ajoutons ici les autorisations d'application 1.apk (permission1);
- Ajoutez tout ce qui se trouve dans AndroidManifest.xml de l'application 2.apk de "<application" à "
Ajoutez tous les services de l'application 1.apk (service1);
Ajoutez les restes de l'application 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>")]
Remplacer AndroidManifest.xml dans le dossier / tmp / 2:
Ceci termine la construction d'AndroidManifest. Il reste à copier toutes les classes de / tmp / 1 vers / tmp / 2. Plus précisément, nous allons copier les dossiers
smali (voici toutes les classes d'application) et
inconnus :
subprocess.call("cp -rn "+apkFolder1+"/smali "+apkFolder2 , shell=True )
Eh bien, en conclusion, vous devez collecter tout cela dans un fichier apk, signez:
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 )
À la suite de cela, le fichier 3.apk apparaît dans le dossier tmp, qui est le collage des deux autres.
PS Dans ce mode de réalisation, lors du collage des autorisations de deux applications, leur comparaison et l'ajout uniquement de celles qui ne le sont pas n'est pas vérifié. Il peut y avoir (et il y aura) des doublons dans la déclaration de permis. Mais à ce stade, tout fonctionne avec duplication.
Sources:
→
AhMyth-Android-RAT