Muchos han visto un video de demostración del asistente personal de Hound, que es lo más poderoso posible e incluso está por delante de aplicaciones tan conocidas como Google Now y Siri. Hound también está disponible para su descarga gratuita en Google Play (en los Estados Unidos), pero, desafortunadamente, está en desarrollo y requiere una invitación al inicio.Inmediatamente me peinaron las manos con urgencia para probar este milagro y, cansado de esperar una invitación por correo (aproximadamente un minuto después), tomé el depurador ... que nunca necesité, porque todo resultó ser más simple, pero sobre esto en orden.Nota: No soy un desarrollador profesional de Android, cracker, etc., todo se hace para satisfacer mi propia curiosidad y bajo mi propio riesgo. Informe cualquier inexactitud en los comentarios o en los mensajes privados.En primer lugar, debe obtener el archivo apk con la aplicación. Puede buscar en Internet, pero no estamos buscando formas fáciles. Descargué la última versión de Google Play y saqué la aplicación de la carpeta /data/app/com.hound.android.app-1 (se requieren derechos de administrador, es decir, root).Cualquier aplicación para Andoid es un archivo apk, que en realidad es un archivo zip renombrado. Si lo abre con cualquier archivador, veremos la siguiente imagen:
Considere los contenidos con más detalle:- assets — , , ,
- lib — .so .
- META-INF — apk , SHA1 . , , . , , Android , .
- res — , xml , .
- AndroidManifest.xml — , , .
- classes.dex — , (), Java.
- resources.arsc — , , , res, .
Somos afortunados de que casi toda la aplicación, con la excepción de las bibliotecas de terceros, esté escrita en Java, lo que significa que no necesitamos sentarnos en el depurador y desensamblar el código de bajo nivel.Ahora debe descomprimir classes.dex e intentar extraer el código. Para esto usamos Apktool . Desde la página "Instalar", descargue el archivo jar ejecutable, así como un contenedor para usarlo desde la línea de comandos. Es suficiente copiar ambos archivos a la carpeta de la aplicación (o agregarlos a la variable de entorno) y ejecutar el siguiente comando:apktool -r decode _.apk
La opción -r es necesaria para no perder tiempo desempacando recursos que no editaremos.Ahora en la carpeta del mismo nombre con el nombre de la aplicación, ya vemos un poco más que en el archivador. Ahora falta el archivo classes.dex, y en su lugar aparece la carpeta pequeña, en la que las clases se almacenan como archivos de texto. Pero bueno, ¿dónde está Java? Alrededor hay algunos archivos con la extensión .smali, que almacenan algo remotamente similar al ensamblador.Este es el lenguaje de código de operación Dalvik en el que se compila el código Java. Hay aplicaciones que pueden intentar restaurar el código fuente de estos archivos, pero luego debe cambiar este código, y la reconstrucción desde el código Java es una tarea ingrata. Por lo tanto, entenderemos el código smali, ya que es bastante comprensible, y también los nombres de las funciones permanecieron intactos. Que usaremos.Encuentra el código responsable de acceder a la aplicación. Al conocer el nombre de la aplicación y el idioma inglés, queda claro que las clases principales de la aplicación están en la carpeta smali / com / hound / android / appcommon . El problema es encontrar el lugar donde se verifica la invitación. La búsqueda de archivos nos ayudará, por ejemplo, en Windows puede usar el comando:findstr /s /i /m _ *.*
El código puede contener "invitar" o "invitación", por lo que eliminaremos la última letra de la palabra y buscaremos "invitar". Bingo, aquí está, el método isInvitationComplete () en el archivo smali / com / hound / android / appcommon / app / Config.smali :.method public isInvitationComplete()Z
.locals 2
.prologue
.line 578
const v0, 0x7f080174
const v1, 0x7f0b001f
invoke-direct {p0, v0, v1}, Lcom/hound/android/appcommon/app/Config;->getBoolean(II)Z
move-result v0
return v0
.end method
Solicita una variable booleana de los parámetros de la aplicación y devuelve su valor. ¡Pero por qué necesitamos tales dificultades! Siempre regresemos cierto . Reemplace "move-result v0" con "const / 4 v0, 0x1" y guarde el archivo. Esperemos que toda la aplicación se base en esta pequeña función, que a partir de ahora nos considerará probadores beta completos.Solo queda ensamblar la aplicación nuevamente. Usamos la maravillosa utilidad Apktool nuevamente:apktool -r build _
No olvide que necesitamos desempacar toda la carpeta antes de eso, y no solo smali . Después de que apktool termine de funcionar, vaya a esta carpeta, luego a dist , donde se encuentra el archivo apk ensamblado.Y no funcionará, o más bien, no se instalará. Cambiamos el contenido de la aplicación, lo que significa que la firma ahora no es válida. Debe volver a firmar la solicitud. Si es un desarrollador de Android, puede usar su propia firma y Android SDK. Pero muchos no tienen ninguno, pueden usar una firma de prueba, y se toman por separado de la utilidad SDK signapk.jar. También hay una utilidad sign.jar que ya tiene una firma incorporada. Es suficiente ejecutar el siguiente comando:java -jar sign.jar _.apk
Luego aparece el archivo nombre_archivo.s.apk , que será la aplicación firmada. ¡Lo cargamos en el dispositivo, lo instalamos y disfrutamos de la aplicación totalmente funcional!
Y puede encontrar en Internet una versión parcheada que alguien publicó recientemente.