Definiciones BasicasEste sera un tutorial muy completo, en explicar este tema y mostarles un tutorial sobre este. Este es un punto mas avanzado de android, que todo programador amateur quiere conocer.
No soy el mejor en el tema, pero si tengo un gran conocimiento en este, asi que los guiare en lo mas basico y interesante sobre el tema.
Para comenzar, que es la ingenieria inversa?
Definición
La ingeniería inversa (en inglés, reverse engineering) es el proceso de descubrir los principios tecnológicos de un objeto, herramienta, dispositivo o sistema, mediante el razonamiento abductivo (haciendo conjeturas) de su estructura, función y operación. En el caso concreto del software, se conoce por ingeniería inversa a la actividad que se ocupa de descubrir cómo funciona un programa, función o característica de cuyo código fuente no se dispone, hasta el punto de poder modificar ese código o generar código propio que cumpla las mismas funciones..
Como aqui se explica, este proceso consiste en ver como funciona algo viendolo por dentro. en este caso, lo haremos con una aplicacion de android.
Que significa esto? En pocas palabras revertiremos una apk a su estado original (en codigo java) para saber mas acerca de ella, estudiarla, modificarla eh incluso crear la propia nuestra a base en ella.
La gran mayoría del software de pago incluye en su licencia una prohibición expresa de aplicar ingeniería inversa a su código, con el intento de evitar que se pueda modificar su código y que así los usuarios tengan que pagar si quieren usarlo.
Encarecidamente les pido usar este tutorial con software de libre distribucion.
Este tutorial es con fines educativos, por lo cual no me responsabilizo por mal uso del mismo.
Con este proceso podremos ver el codigo de una aplicacion, pero no sera su codigo limpio y completo. solo sera un codigo donde veremos sus funciones, y de ahi podran basarse en caso de que quieran hacer sus propias aplicaciones (gran apoyo para programadores entuciastas).
Ingenieria inversa para extraer el codigoEn este proceso usaremos 2 aplicaciones.
Dex2Jar y
JDGui para windows. Encontraran los links en el siguiente post
Para revertir una aplicaciones necesitaremos extraer el
classes.dex que viene dentro de la aplicacion, este no es gran problema ya que podemos hacerlo con winrar. seleccionamos con
click derecho > abrir con > win rar y extraeremos el classes.dex que veremos.

Para este tuto entraremos al codigo de opciones de desarrollador, que esta dentro el apk de
settingsExtraeremos el
classes.dex usando win rar y lo copiaremos en la carpeta del
Dex2Jar, luego abriremos una ventana de comandos dentro de esa carpeta, para eso mantendremos presionada la tecla
shift, y daremos
click derecho en un espacio vacio dentro de la carpeta.

Y seleccionaremos
Abrir ventana de comandos aqui
luego ejecutaremos el siguiente codigo
d2j-dex2jar.bat classes.dex
Y esperamos hasta que el programa acabe, y nos cree un archivo llamado
classes.dex2jar que ya tendra la extencion
.jar
Una vez echo esto, nos dirigiremos a la carpeta del
JDGui y abriremos el
jd-gui.exe, luego abriremos el archivo jar con este programa. Seleccionaremos
File > Open File > Ruta y buscaremos la ruta donde se creo nuestro archivo
.jar que esta dentro de la carpeta
Dex2Jar.

Una vez echo esto buscaremos el
.class que queremos ver/extraer. en mi caso, el .class de Opciones de desarrollador. Llamado
DevelopmentSettings.class
Despues seleccionamos el class que queremos extraer, y seleccionamos
File > Save y elegimos el lugar donde queramos guardar el codigo del class, que quedara en formato
.javaSi seleccionamos
Save All Sources guardaremos todo el codigo de la aplicacion que viene en el classes ( en este caso el codigo de settings ).
Una vez guardemos el codigo del class, lo abriremos con el
Notepad++ seleccionandolo con
click derecho > edit whith Notepad++ al abrirlo, tendremos el codigo en java para estudiar/modificar segun sea su necesidad.

Con esto ya abremos extraido el codigo original en su formato nativo
java.