Ir al contenido


Foto

Accediendo al hardware del dispositivo (TCC)


  • Por favor identifícate para responder
4 respuestas en este tema

#1 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 08 agosto 2011 - 06:43

[c]/** @author cHackAll */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <linux/input.h>

void main()
{
struct input_event ie;
unsigned short *pixel;
struct fb_var_screeninfo info;
unsigned int fd, fb, pad, scan, size, xy[2], count, vib;

if (setgid(0) || setuid(0) ||
    !(fd = open("/dev/input/event2", O_RDONLY, 0)) ||
    !(fb = open("/dev/graphics/fb0", O_RDWR, 0)) ||
    ioctl(fb, FBIOGET_VSCREENINFO, &info)) return;

scan = (info.xres * (info.bits_per_pixel >> 3)) + 32;
void *buffer = mmap(NULL, size = info.yres * scan, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0);
while (read(fd, &ie, sizeof(ie)))
  if (ie.type)
  {
  if ((ie.type == 3) && (ie.code < 2))
    xy[ie.code] = ie.value;
  count = 0;
  if ((ie.type == 1) && (vib = open("/sys/devices/platform/msm_pmic_vibrator/enable", O_WRONLY, 0)))
  {
    count = 55;
    write(vib, "55\n", 3);
    close(vib);
  }
  do
  {
    for (int y = 0; y < info.yres; y++)
    {
    pixel = buffer + (y * scan);
    for (int x = 0; x < info.xres; x++)
      if ((x == xy[0]) || (y == xy[1]))
    pixel[x] = 0xF800; // 565
    }
    fsync(fb);
    if (count) usleep(55);
  } while (count--);
  }
munmap(buffer, size);
close(fb); close(fd);
}[/c]

Compilamos y ejecutamos;

Imagen Enviada

Verificamos;

Imagen Enviada

Explicación;

El anterior código accede a la pantalla táctil, a la información de pantalla (pixeles) y al vibrador del teléfono móvil. Lo que hace es sencillo; detecta cuando el usuario toca, suelta o mueve su dedo sobre la pantalla táctil realizando una intersección de dos líneas horizontal/vertical en dicho punto. Adicionalmente cuando comienza y finaliza el movimiento (osea ni bien se toca o suelta), enciende por unos milisegundos el motor del vibrador.

Las aplicaciones posibles del anterior ejemplo son; el realizar un pseudo-HOOK detectando una actividad específica en la pantalla táctil sin que nuestra aplicación sea la que esté corriendo en primer plano o tenga interfaz alguna. Y la segunda es la monitorización o grabado de lo que se ve en el display del dispositivo (en el mismo dispositivo claro está).

Salud
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 08 agosto 2011 - 07:02

Gracias cHackAll, muy interesante la aplicación. (y)


Saludos
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 08 agosto 2011 - 07:25

Muy interesante, estos programas, ¿como se ejecutan? como les dices que se ejecuten al iniciar el telefono ?

Salud OS
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 08 agosto 2011 - 07:47

Excelente.  (y)


Saludos.
  • 0

#5 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 08 agosto 2011 - 08:06

Apariencia del ejemplo compilado (aeabi);

Imagen Enviada

...estos programas, ¿como se ejecutan? como les dices que se ejecuten al iniciar el telefono ?...


Estos programas los puedes ejecutar manualmente en la linea de comandos escribiendo su nombre, los puedes ejecutar mediante un paquete que los llame (Ej. al hacer un tap [~click]). Los puedes compilar en una librería que posteriormente usarás en tus paquetes. Los puedes incluir en un ROM personalizado para que tu dispositivo tenga un comportamiento completamente personalizado y si, claro está, cuando el dispositivo está iniciando (ver los dos niveles inferiores del siguiente diagrama).

Imagen Enviada

Salud
  • 0




IP.Board spam blocked by CleanTalk.