Aplicación Espía Celular
Monitorear llamadas, SMS, Gps, cámara, fotos, videos, Whatsapp, Facebook, etc.
De hecho, además de analizar los principios de implementación de los lenguajes Java, como las clases internas de Java y las enumeraciones, también es útil en algunos escenarios específicos.Ahora, generalmente se realiza modificando smali, pero también se puede hacer en función del código de bytes. Este artículo se basa en el análisis anterior del código de bytes de Java, por lo que solo se analiza el método del código de bytes.
Muchos juegos independientes, e incluso algunos juegos en línea, ejecutan las operaciones lógicas localmente. El servidor solo recibe los resultados de la operación cargados por el cliente. También hay algunas aplicaciones de cobro, de hecho, las funciones están todas en el código local, solo Pero es para juzgar si hay un pago, y si hay un pago, se mostrará la entrada de la función.
Si podemos modificar su código y cambiar el resultado de carga o el juicio de si pagar a lo que queremos, podemos hacer lo que queramos.
descompilar
Para modificar la lógica del código de la aplicación, primero debemos analizar cuál es la lógica del código original, sin embargo, dado que el código de la aplicación es propiedad privada de cada empresa, a menos que se filtre el código, generalmente no podemos obtenerlo. esta vez solo podemos usar técnicas de descompilación.
Aplicación Espía Celular
Monitorear llamadas, SMS, Gps, cámara, fotos, videos, Whatsapp, Facebook, etc.
Si vas a Internet a buscar la tecnología de descompilación de apk, probablemente encuentres los siguientes métodos:
- Use la herramienta apktool para extraer el apk
- Use la herramienta dex2jar para convertir archivos dex optimizados para Android en clases java
- Use la herramienta jd-gui para ver el código java en la clase
Una operación tan engorrosa en realidad está desactualizada. Presentaré una herramienta de operación tonta de un clic para todos.
jadx es una herramienta de descompilación de Android de código abierto, su código está alojado en github, puede descargarlo y usarlo. El uso es muy simple, después de descargarlo, descomprímalo y luego ingrese al directorio bin para ejecutar jadx-gui (linux/mac ) o jadx-gui.bat (windows), puede iniciar una interfaz visual, luego hacer clic en "Archivo - Abrir", y seleccionar la aplicación que queremos descompilar, puede ver el código en el apk
Una aplicación de demostración se descompila aquí, y su MainActivity.onCreate juzga una variable de bandera y luego muestra Toast. Cuando instalamos este apk y lo ejecutamos, podemos ver que aparece el brindis: "¡Hola mundo!"
Otras aplicaciones son similares, puede ver su código de esta manera. Sin embargo, las aplicaciones lanzadas oficialmente generalmente realizan operaciones de ofuscación. En este momento, el nombre de la clase, el nombre del método y el nombre de la variable del código que descompilamos y procesamos se convertirán en a, b, c es un carácter sin sentido.
Pero solo ha cambiado el nombre, la lógica de ejecución es exactamente la misma, por lo que siempre que sea lo suficientemente cuidadoso, aún puede comprender su lógica de código.
Jadx tiene una función poderosa que puede exportar el proyecto Gradle, hacer clic en "Archivo/Guardar como proyecto Gradle" para exportar el proyecto Gradle y luego cambiar la estructura del directorio, puede usar Android Studio para abrir el proyecto y editar y modificar el código.
Si la compilación es exitosa después de la modificación, entonces se logró nuestro propósito y podemos hacer lo que queramos, pero este proyecto tiene una alta probabilidad de no poder compilar con éxito y hay muchos errores extraños.
A continuación, te llevaré a descifrar este apk paso a paso, modificar su lógica, no jugar "¡hola mundo!" sino jugar "hola java".
Modificar el bytecode de la aplicación
Podemos usar jadx para analizar fácilmente la lógica del código, pero si falla la recompilación, tenemos que ir por otro camino.
Esta es la forma de editar directamente el código de bytes. Si sigues de esta manera, no tendrás que usar operaciones tontas. Vayamos paso a paso honestamente.
1. Descomprimir la apk
- apk es en realidad un paquete comprimido zip, podemos cambiar su sufijo a.zip y luego descomprimirlo directamente
- Ponemos las cosas descomprimidas en el directorio app-release-unsigned:
2. Convertir dex a jar
- Todos sabemos que la máquina virtual de Android no es una máquina virtual ordinaria de Java, no puede ejecutar directamente archivos de clase Java y debe optimizarse en archivos dex.
- Cuando modificamos el bytecode, necesitamos volver a convertirlo.Aquí usamos la función dex2jar de la herramienta dex-tools:
- Aquí solo presento el uso de comandos bajo Linux, no en Windows, de hecho es una versión similar usando.bat, puedes buscar por ti mismo.
- Convierta clases.dex a un archivo jar:
- ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh clases.dex
- Generará el archivo classes-dex2jar.jar:
3. Modificar el bytecode de la clase
- De hecho, el archivo jar también es un paquete comprimido zip, aún podemos cambiar directamente el sufijo a zip y luego descomprimirlo para encontrar MainActivity.class
- En este momento, podemos usar el comando javap mencionado en el artículo anterior para ver el código interno:
- javap -c actividad principal
- Y podemos ver que si continuamos ejecutando, generará ¡hola mundo!, y si saltamos a 32 líneas, generará ¡hola java!
- Aquí podemos cambiar directamente if_icmpne a if_icmpeq, saltar a la línea 32 cuando sea igual, de lo contrario, continuar con la ejecución, por lo que el mensaje original "¡Hola mundo!" se convertirá en "¡Hola Java!"
- Si abre el archivo de clase directamente con un editor, hay algunos valores binarios en él.
- Entonces, ¿cómo lo modificamos?
- Aquí usaremos otra herramienta jbe, el nombre completo es java bytecode editor
- Después de descargarlo, descomprímalo, ingrese al directorio bin y use el siguiente comando para abrir la interfaz gráfica:
- java ee.ioc.cs.jbe.browser.BrowserApplication
- Abra MainActivity.class en la interfaz gráfica y encuentre nuestro código MainActivity.onCreate
- Luego haga clic en la opción Editor de código para modificar el código de bytes, aquí cambiamos if_icmpne a if_icmpeq, y luego hacemos clic en Guardar método:
- Esto completa nuestra modificación lógica.
4. Reempaquetar dex
- A continuación, volveremos a empaquetar el apk, primero comprimiremos la clase en un zip, preste atención a la estructura del directorio:
- Luego cambie el sufijo a jar y use jar2dex para generar dex:
- ~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh clases-dex2jar.jar
- Luego reemplace el archivo classes.dex original con el archivo dex generado y luego elimine todos los archivos temporales recién generados, como los directorios classes-dex2jar.zip y classes-dex2jar.
5. Eliminar la información de la firma
- Generalmente, las aplicaciones que recibimos son aplicaciones firmadas. Luego de que se firma la aplicación, la información de verificación de recursos y códigos se guardará en el apk. Si modificamos el archivo dex, la verificación fallará, por lo que no se podrá instalar el apk..
- Entonces necesitamos eliminar la firma original.El método específico es eliminar los tres archivos en el directorio META-INF:
- CERT.RSA
- CERT.SF
- MANIFIESTO.MF
6. Reempaquetar apk
- A continuación, el mismo archivo comprimido genera un paquete comprimido zip, preste atención a la estructura del directorio:
- Finalmente, cambie el sufijo zip a apk, y nuestro apk está empaquetado
- Dado que nuestro apk reempaquetado ha eliminado la información de la firma, si se instala directamente, fallará y debemos volver a firmarlo.
- Puede usar el siguiente comando para crear un alias como android.keystore, y el nombre del archivo también es el archivo de firma de android.keystore
- keytool -genkeypair -alias android.keystore -keyalg RSA -validez 400 -keystore android.keystore
- Después de presionar Intro, le permitirá ingresar algunas contraseñas, información del desarrollador, etc., y obtendrá un archivo android.keystore después de completarlo.
- Luego usamos el android.keystore obtenido para volver a firmar la aplicación:
- jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore
- Obtenga el release.apk firmado, instálelo y ejecútelo para ver que el brindis se ha convertido en "¡Hola, Java!".