Red de conocimiento informático - Material del sitio web - ¿Cómo abrir ViewServer en el teléfono móvil de Root para que HierachyViewer pueda conectarse?

¿Cómo abrir ViewServer en el teléfono móvil de Root para que HierachyViewer pueda conectarse?

Preparación:

Para obtener información sobre qué es un visor de jerarquía, consulte la documentación oficial:/tools/debugging/debugging-ui.html. Comprensión personal: Hierarchy Viewer puede obtener información de la interfaz de usuario en tiempo real del teléfono móvil actual, lo que brinda una gran comodidad a los diseñadores de interfaces y evaluadores automatizados.

La documentación oficial de Android menciona:

Para proteger la seguridad, Hierarchy Viewer solo se puede conectar a dispositivos que ejecutan la versión de desarrollo del sistema Android.

Por razones de seguridad, el visor de jerarquía solo puede conectarse a teléfonos de desarrollo o emuladores de Android (para ser precisos, solo puede conectarse a sistemas Android con parámetros ro.secure iguales a 0 y ro.debuggable igual a 1). ). Cuando el visor de jerarquía está conectado a un teléfono móvil, se debe iniciar un cliente llamado View Server en el teléfono móvil para poder comunicarse con él a través de sockets. En teléfonos comerciales, el servidor de visualización no se puede abrir, por lo que el visor de jerarquía no se puede conectar a teléfonos comerciales normales.

El código fuente de Android implementa esta restricción:

Directorio raíz del código fuente de ANDROID\frameworks\base\services\Java\com\ANDROID\server\WM\WindowManageservice.java.

Un párrafo en:

================================= == ================================================== == ====

startViewServer booleano público (puerto int){

if (isSystemSecure()) {

return false

}

if (!checkCallingPermission(manifest . permiso . dump, " startViewServer ") {

return false

}

. .. .

========================================= == ============================================

El método para verificar si View Server se ha abierto en el teléfono móvil es el siguiente:

Ventana 3 de llamada al servicio ADB Shell

Si el valor de retorno es: resultado: paquete ( 00000000000000 '... ')", El servidor de visualización está cerrado.

Si el valor de retorno es:result:parcel(00000000001 '...'), el servidor de visualización está abierto.

Si es un teléfono móvil que puede abrir View Server. Desarrollar teléfonos móviles, simuladores o teléfonos móviles con parches del sistema según los pasos de esta publicación), podemos usar el siguiente comando para abrir View Server:

Ventana de llamada de servicio de shell ADB 1 i32 4939

Apague el servidor de visualización usando el siguiente comando:

ventana de llamada de servicio de shell adb 2 i32 4939

Pasos de implementación:

Después de un poco de investigación y práctica, descubrí que siempre que el teléfono esté rooteado, instale Busybox y modifique algunos archivos en /system/framework en el teléfono para abrirlo.

Este artículo hace referencia a /tag/viewserver/, y los siguientes son los pasos específicos (estoy basado en Windows, si está ejecutando un sistema operativo Linux, lea la publicación original directamente):

La premisa es que tu teléfono ha obtenido permisos ROOT. Hay BUSYBOX.

Además: lea atentamente los comentarios de esta publicación, tal vez obtenga algo nuevo.

1. Conecte un teléfono móvil comercial a la PC mediante USB para garantizar el funcionamiento normal del servicio adb.

2. Haga una copia de seguridad de los archivos en /system/framework/ del teléfono en la PC. Al realizar una copia de seguridad, asegúrese de que la estructura de carpetas donde se guardan los archivos de copia de seguridad en su PC sea la misma que /system/framework en su teléfono.

Por ejemplo, cree una nueva carpeta ANDROID_SDK_ROOT\system\framework (ANDROID_SDK_ROOT en este artículo se refiere al directorio raíz donde está instalado el SDK de Android).

Luego salta a la carpeta Android_SDK_root\platform-tools en cmd e ingresa el siguiente código para la copia de seguridad:

ADB pull/system/framework ANDROID_SDK_ ROOT \ system \ framework

3. Ingrese a adb shell y genere BOOTCLASSPATH:

Práctica recomendada:

1.echo $ ruta de clase de arranque en adb shell >:/tarjeta SD/ruta de clase de arranque.

2. Regrese al cmd de Windows e ingrese ADB pull/SD card/boot class path.

3.bootclasspath.txt se guardará en la carpeta C:\Users\ su nombre de usuario.

El contenido de este txt se utilizará en el paso 15.

4. Descargue las herramientas baksmali y smali. Estas dos herramientas se utilizan para descompilar y compilar archivos odex.

Dirección de descarga:

/u/5055823/baks Mali-1 . 2. jar

Supongamos que descargué ambos archivos jar al directorio raíz del SDK de ANDROID.

5. Ejecute baksmali para descompilar el archivo services.odex en \system\framework:

Java-jar ANDROID _ SDK _ ROOT \ baks Mali-1 . -a 17-x ANDROID _ SDK _ ROOT \ system \ framework \ servicios . -d ANDROID _ SDK _ ROOT \ system \ framework

Descripción de parámetros:/p/smali/wiki/deodexin construcciones

Especialmente el número después de "-a" indica el nivel de API de su sistema (relacionado con la versión de su sistema). La comparación de la versión del sistema y el nivel de API es la siguiente:

Además, ni siquiera puedes ejecutar java -jar, ¿verdad? ¡Ve a instalar jdk! )

Si este paso es exitoso, se generará una carpeta de salida en la misma carpeta (para mí es ANDROID_SDK_ROOT).

Aquí se ofrece una breve explicación de los archivos odex y los archivos dex.

Archivo Dex: Dex es el nombre completo de Dalvik VM ejecutado, es decir, el programa Android Dalvik Executive, que no es un código de bytes de Java sino un código de bytes de Dalvik y 16 instrucciones de máquina.

Archivo Odex: el archivo dex optimizado se forma optimizando el archivo dex según el modelo específico, lo que mejora la velocidad de ejecución del software y reduce el uso de RAM cuando el software se está ejecutando.

Archivo pequeño: convierte archivos dex en un formato de código legible, un formato común para archivos descompilados.

6. Utilice Eclipse para abrir el archivo out\com\Android\server\WM\windowmanagerservice.smali.

Encuentra la función. El método privado es seguro para el sistema.

============================================ === ======================

. Método privado isSystemSecure()Z

. Regístrate 4

. Prefacio

. Línea 5965

Cadena constante v0, " 1 "

Cadena constante v1, " ro.secure "

Cadena constante v2, " 1 "

invocar-estático {v1, v2}, Landroid/os/SystemProperties. ->get(Ljava/lang/String;ljava/lang/String;)Ljava/lang/String;

Mover objeto de resultado v1

invocar-virtual {v0, v1 } ,Ljava/lang/String;->equals(Ljava/lang/Object;)Z

Mover resultado v0

if-eqz v0,:cond_22

Cadena constante v0, "0"

Cadena constante v1, "ro.debuggable"

Cadena constante v2, "0"

invoke-static {v1 , v2}, Landroid/os/SystemProperties. ->get(Ljava/lang/String;ljava/lang/String;)Ljava/lang/String;

Mover objeto de resultado v1

invocar-virtual {v0, v1 } ,Ljava/lang/String;->equals(Ljava/lang/Object;)Z

Mover resultado v0

if-eqz v0,:cond_22

const/4 v0, 0x1

:goto_21

Devolver v0

:Condition_22

Constante/4 v0, 0x0

ir a :goto_21

. Método de finalización

========================================== === =======================

Agregue una línea "const/" entre las líneas 7 y 8 desde la parte inferior de este código 4 v0, 0x 0": goto _ 21" y "return v0". De esta manera, el valor devuelto por v0 siempre será 0x0, lo cual es falso, omitiendo así el juicio de WindowManagerService.java isSystemSecure

.

El método privado isSystemSecure()Z finalmente se convierte en:

================================= == =================================

. Método privado isSystemSecure()Z

. Regístrate 4

. Prefacio

. Línea 6276

Cadena constante v0, " 1 "

Cadena constante v1, " ro.secure "

Cadena constante v2, " 1 "

invocar-estático {v1, v2}, Landroid/os/SystemProperties. ->get(Ljava/lang/String;ljava/lang/String;)Ljava/lang/String;

Mover objeto de resultado v1

invocar-virtual {v0, v1} ,Ljava/lang/String;->equals(Ljava/lang/Object;)Z

Mover resultado v0

if-eqz v0,:cond_22

Cadena constante v0, "0"

Cadena constante v1, "ro.debuggable"

Cadena constante v2, "0"

invoke-static {v1 , v2}, Landroid/os/SystemProperties. ->get(Ljava/lang/String;ljava/lang/String;)Ljava/lang/String;

Mover objeto de resultado v1

invocar-virtual {v0, v1} ,Ljava/lang/String;->equals(Ljava/lang/Object;)Z

Mover resultado v0

if-eqz v0,:cond_22

const/4 v0, 0x1

:goto_21

Const/4 v0, 0x0

Devolver v0

:Condición_ 22

Constante/4 v0, 0x0

goto:goto_21

. Método de finalización

========================================== === =============================================

7. Ahora ejecute SMALI y vuelva a compilar:

Java-jar SMALI-1 4 2 . El archivo dex debería aparecer en la carpeta ANDROID_SDK_ROOT.

8. Descargue la herramienta de compresión en Windows:

/u/5055823/zip.exe

Supongamos que también coloco zip.exe en la carpeta ANDROID_SDK_ROOT del medio. .

9. Confirme que el directorio de ejecución de la línea de comando cmd actual es ANDROID_SDK_ROOT, ejecute:

zip.exe service_hacked.jar. /classes.dex

En este momento, el paquete services_hacked.jar aparece en la carpeta ANDROID_SDK_ROOT.

10. Ingrese a adb shell e ingrese su para obtener permisos ROOT.

11. Vuelva a montar /system y cambie los permisos del /system.

Pasos de referencia (solo como referencia, asegúrese de utilizar el método correcto adecuado para su teléfono móvil.

Consulte la siguiente respuesta del usuario del "blog de galfordq":

Ingrese mount para verificar qué partición se ha montado /system. Por ejemplo, el mío es:

B. Escriba los siguientes comandos para volver a montar /system y cambiar los permisos de /system (reemplace "/dev/block/mmcblk0p25" con su partición de montaje /system):

mount -o rw, re mount-t yaffs 2/dev/block/mmcblk 0 p 25

Chmod -R 777 /system permite modificar /system a voluntad.

El propósito de este paso es reemplazar servicios.odex en /system/framework en el paso 17. Si este paso no tiene éxito, en el paso 17, es posible que haya un sistema de archivos de solo lectura con permisos insuficientes.

12. Descargue el archivo de empaquetado dexopt.

/u/5055823/dexopt-wrapper

También colocaremos el archivo dexopt-wrapper en la carpeta ANDROID_SDK_ROOT.

13. Copie services_hacked.jar y dexopt-wrapper a la carpeta /data/local/tmp del teléfono.

adb envía ANDROID_SDK_ROOT/services_hacked . jar/data/local/tmp

adb envía ANDROID_SDK_ROOT/dex opt-wrapper/data/local/tmp

14. Ingrese adb shell, ingrese su y cambie los permisos de dexopt-wrapper a 777.

chmod 777/data/local/tmp/dex opt-wrapper

15 En adb shell, en la carpeta cd to /data/local/tmp, ejecute:

. /dexopt-contenedor. /services_hacked.jar. /services _ hacked .odex <La dirección se guardó en el tercer paso de este artículo, pero ":/system/framework/services.jar" debe eliminarse>

Este paso es para optimizar el séptimo dex. archivo en el archivo odex.

============================================ === ================================================= === ======

Por ejemplo, mi comando es:. /dex opt-wrapper.

/services_hacked .jar ./services _ hacked .odex/system/framework/core .jar:/system/framework/ext . /system/framework/

marco . jar:/system/framework/framework 2 . jar:/system/framework/Android política . -XML jar:/system/framework/HTC dev .jar:/system/framework/HTC extension . Android .jar:/system/framework/WiMAX.

/system/framework/USB net.jar:/system/framework/com. p>

============================================= = ================================================== = ======

Esto genera nuestro propio odex: servicios _ hacked.odex en la carpeta /data/local/tmp.

16. Firme nuestro propio service_hacked.odex:

busybox DD if =/system/framework/services . bs = 1 count = 20 skip = 52 seek = 52 conv = not runc

Explicación del parámetro:

if = archivo de entrada

of = archivo de salida

bs = tamaño de bloque (1 byte)

count = número de bloques

skip = desplazamiento del archivo de entrada

seek = desplazamiento del archivo de salida

conv = not runc: no trunca el archivo de salida.

17. ¡Reemplace services.odex en /system/framework con nuestro propio services_hacked.odex!

DD if =/data/local/tmp/services _ hacked . odex of =/system/framework/services

Después de este paso, el teléfono estará en breve. tiempo (dentro de 1 minuto) ¡se reinicia automáticamente! ¡Espera un momento!

18. Después de un reinicio exitoso, use el siguiente comando para abrir View Server:

Ventana de llamada del servicio de shell ADB 1 i32 4939

Use el siguiente comando para compruebe si Ver servidor está abierto:

Ventana 3 de llamada al servicio Shell de ADB

Si el valor de retorno es resultado:parcel(000000000001 '...'), ¡levántese!

(Si un determinado paso falla y es necesario restaurar el sistema, consulte el paso 16 en /tag/viewserver/ o comuníquese con mi correo electrónico: czxttkl@gmail.com para obtener más información).

A continuación, compile y ejecute HierarchyViewer en Eclipse para ver el árbol de interfaz de usuario en tiempo real del teléfono móvil.

Consulte:/255485243.html