magic

Archivos DEX (Dalvik Executable): La Cabecera

La cabecera es como cabe de esperar, una de las partes mas importantes de la estructura el archivo .dex. Contiene el magic que nos permite identificar el formato de archivo, además de diferentes chechsums y hashes para comprobar la integridad del propio archivo. Pero lo que es mas importante, en la cabecera se encuentra el “mapa” para entender y descomponer el formato .dex en sus diferentes partes, ya que contiene una lista con los offsets y longitud de las diferentes parte de el archivo que comentábamos en el artículo anterior.

  • Tabla con las posiciones de los Strings
  • Tabla con las posiciones de los Tipos
  • Tabla con las posiciones de las estructuras/Prototipos de los métodos
  • Tabla con las posiciones de las Propiedades de las clases o Campos de los métodos
  • Tabla con las posiciones de los Métodos
  • Tabla con las posiciones de las Clases
  • Datos



Name Format Description
magic ubyte[8] Este valor es el que identifica el tipo de fichero.
checksum uint Checksum (adler32) calculado en base a todo el fichero, menos magic y checksum.
signature ubyte[20] Firma HashSHA-1 de todo el fichero menos magic, checksum y la propia firma.
file_size uint Tamaño de todo el fichero incluida la cabecera (en bytes).
header_size uint Tamañode la cabecera (en bytes). Actualmente siempre toma el valor de 0×70 (112)
endian_tag uint Nos indica que tipo de formato endian usa el fichero. Importante de cara a interpretar los valores de los datos del archivo, pero defecto es litle-endian. [aclaración]
link_size uint Indicael tamaño de la sección de enlace (link section) o 0, si elfichero es enlazado de forma dinámica.
link_off uint Desplazamientoal comienzo de la sección de enlace desde el inicio del ficheroo 0 si link_size == 0.
map_off uint Desplazamientoal map_list en caso que éste exista o 0 en caso contrario. Elmap_list es una lista con todo el contenido del fichero. Estaestructura de datos puede contener datos redundantes, pero laintención de la misma es el poder recorrer el contenido delfichero de una forma más cómoda. Esta lista está ordenada.
string_ids_size uint Númerode elementos en la lista de strings.
string_ids_off uint Desplazamientoa la lista de strings o 0 en caso que dicha lista este vacía,circunstancia que raramente se va a dar.
type_ids_size uint Númerode elementos en la lista de tipos (type).
type_ids_off uint Desplazamientoa la lista de tipos o 0 en caso que dicha lista este vacía. Casoque raramente también se dará.
proto_ids_size uint Númerode elementos en la lista de prototipos.
proto_ids_off uint Desplazamientoa la lista de prototipos. 0 en caso que dicha lista este vacía.De nuevo, situación que raramente se dará.
field_ids_size uint Númerode elementos en la lista de campos.
field_ids_off uint Desplazamientoa la lista de campos o 0 en caso que dicha lista esté vacía.
method_ids_size uint Númerode elementos en la lista de métodos.
method_ids_off uint Desplazamientoa la lista de métodos. 0 si la lista está vacía.
class_defs_size uint Númerode elementos en la lista de clases.
class_defs_off uint Desplazamientoa la lista de clases. 0 en caso dicha lista este vacía,situación poco probable.
data_size uint Tamañoen bytes de la sección de datos. Debe ser un número parmúltiplo del tamaño de un uint (sizeof(uint)).
data_off uint Desplazamientoa la sección de datos.


ENDIAN_CONSTANT y REVERSE_ENDIAN_CONSTANT

En caso de que el valor se el campo endian_tag sea igual a REVERSE_ENDIAN_CONSTANT (0×78563412), consideraremos que el archivo esta en formato litle-endian, lo cual es el estandar y lo mas común. A pesar de ello, es posible usar otras configuraciones, tipo big-endian, en tal caso el campo endian_tag tomara el valor ENDIAN_CONSTANT (0×12345678).

Fuente: http://www.netmite.com/android/mydroid/dalvik/docs/dex-format.html

Vodafone hace “magia” con el HTC Magic

Si señores, parece que Vodafone ha decidido que conectar tu SIM a un HTC Magic es suficiente para darte de alta un servicio de tarifa plana de datos sin ningún tipo de firma de contrato ni consentimiento del usuario. Es decir, que si alguien te presta su HTC Magic por alguna razón (te has quedado sin batería, te lo ha prestado temporalmente porque se te ha roto el tuyo…) Vodafone es capaz de detectar que tu SIM esta conectada a un HTC Magic y da de alta automáticamente la tarifa plana de datos.

Todo empezó hace un mes cuando mi novia me presto su HTC Magic para hacer unas pruebas con unas aplicaciones que estaba desarrollando yo mismo. Como sabia que yo no tenía ninguna tarifa plana asociada, para que no me saliera la torta un pan, instale APNDroid para evitar que el terminal se conectara a Internet ya que para las pruebas usaría la red WIFI local mía. La verdad es que no me podía quejar, las pruebas iban bien y el terminal, aunque quizá un poco justo de recursos funcionaba correctamente con mis aplicaciones.

Tengo la mala costumbre de no leer las facturas, pero ayer me llego una factura de Vodafone y se me ocurrió mirar los importes. En la factura aparecía un importe de 24€ en la sección otros servicios, por lo que llamé a Vodafone para informarme. Tras hablar con un agente me comenta que tengo mi SIM conectada a un HTC Magic y que ese teléfono tiene asociada una Tarifa plana de datos. Le digo que el terminal no es mío, que lo tengo prestado y que la tarifa plana la tendrá el dueño del terminal que fue quien firmo el contrato de adquisición del terminal. Me dice que eso es igual, el terminal parece ser tiene un efecto “Vírico” (no se conforman con distribuir mariposas y confickers) y a cada SIM que se conecta al terminal se le da de alta la tarifa plana de datos. Ante mi asombro, le pregunto como es posible que insertar una SIM en un teléfono me comprometa a un servicio sin que haya ninguna intervención mía o contrato de por medio. El agente me comenta que eso es así y que no hay mas vueltas que darle, por tanto, le solicito que me remitan una carta o documento en el que se me confirme que la respuesta oficial de Vodafone es esa, a fin de presentarlo como prueba donde fuera necesario. El agente me confirma que Vodafone no remite ningún tipo de documento, por lo que paso a preguntarle su nombre completo. El agente solo me facilita su nombre de pila y cuando la insisto en solicitarle su apellido la llamada se cuelga inesperadamente.

Aun así no entiendo porque me aparece 24€ si la tarifa son 15€, e intentando acceder a el servicio Mi Vodafone para comprobar las facturas, veo que la pagina esta inaccesible. Por tanto vuelvo a llamar a Vodafone para solicitar más información y dar de baja el servicio. El agente me comunica que el servicio de gestión interna esta caído y que deja un aviso para que en cuanto este disponible se me de de baja el servicio. Como no es posible acceder a mis facturas, el agente no es capaz de darme la información sobre la facturación en ese momento. Le pregunto si es cierto que si vuelvo a conectar mi SIM al terminal se me volverá a dar de alta la tarifa de datos y el me confirma que “en principio si”.

Al de una hora recibo un mensaje en el que se me confirma la baja del servicio de datos. Pero hoy estoy con unas facturas en las que se me ha cobrado unos servicios que no uso y la duda de que pasara si vuelvo a conectar mi SIM o de otra persona a este terminal.

Esta mañana iré a la oficina del consumidor a informarme con lo que actualizare este post con mas información a lo largo de la mañana.

Actualización [16/03/2010 14:00]:

He llamado de nuevo a Vodafone y no se si el articulo habrá tenido efecto o ha sido que ayer les pille en una hora mala, pero la chica que me ha atendido muy amablemente me ha pasado a anular la tarifa y a abonarme la diferencia. En cuanto a los 24€ me han confirmado lo que alguien ya había dicho en algún post de menéame: son lo 15€ + 9€ de consumo mínimo que luego se descuentan.

Por ultimo estaría bien que Vodafone aclarara cual es su política o que redefiniera su protocolo de actuación en estos casos. Sí entiendo que ante los problemas que podrían surgir de facturas astronómicas, esta sea la mejor solución para ellos, pero no es la mejor solución para todos sus clientes. Desde el que no sabe ni que tiene un Android hasta el que hace ingeniería inversa.

 Scroll to top