Emuladores y granjas de móviles en apps de recompensas: cómo detectarlos sin bloquear a usuarios reales
Un solo equipo con diez emuladores de Android puede parecer diez móviles en diez casas distintas. Las granjas de móviles van más allá, con estanterías enteras de dispositivos reales. Esta guía explica cómo funcionan ambos, las pistas de hardware que no pueden ocultar y una forma justa de actuar ante ellas.
Respuesta corta
Detecta emuladores y granjas de móviles comparando lo que el dispositivo dice ser con lo que revela su hardware: un modelo de móvil con una GPU que nunca trae de fábrica, perfiles de emulador por defecto, GPUs por software y dispositivos borrados que vuelven a aparecer. Bloquea en el clic en la oferta los perfiles de emulador claros, manda a revisión cualquier incoherencia aislada y actúa sobre el grupo vinculado.
- La señal más clara
- Una combinación imposible de modelo y GPU, como un Pixel 8 que muestra una GPU Adreno.
- Lo que delata a un emulador
- Modelos de emulador por defecto, versiones de Android muy antiguas con un Chrome actual, GPUs por software y pantallas de tamaño de escritorio en un modelo de móvil.
- Granjas de móviles
- Reutilizan hardware, borran el almacenamiento, compran modelos baratos que solo se venden en China y completan las mismas ofertas en el mismo orden.
- Qué evitar
- Banear marcas enteras o bloquear por una sola incoherencia de modelo.
Por qué los emuladores y las granjas atacan las apps de recompensas
Las ofertas móviles pagan bien. Instala un juego, llega al nivel 20 y gana unos cuantos dólares. Los anunciantes pagan tanto porque esperan un jugador real en un móvil real. Una granja falsifica al jugador y se queda con el pago.
Hay dos montajes principales. El primero es el emulador: software como LDPlayer, Nox, MEmu, BlueStacks o Genymotion que ejecuta Android en un PC. Un solo equipo potente puede ejecutar muchos a la vez. El segundo es la granja de móviles: estanterías de móviles reales y baratos, a menudo restablecidos entre una cuenta y otra y a veces controlados por scripts.
Los dos buscan el mismo resultado: muchas cuentas, cada una con aspecto de ser una persona distinta en un dispositivo distinto, y todas completando las mismas ofertas que mejor pagan. La red revierte las conversiones semanas después, a menudo cuando ya pagaste.
Lo que el dispositivo dice ser frente a lo que muestra
Todo navegador o WebView te dice qué es. El user agent y los client hints dan un nombre de modelo como Pixel 8 o SM-S918U. Ese dato es fácil de cambiar: las herramientas de las granjas rotan los nombres de modelo con un clic.
El hardware es más difícil de falsificar. A través de WebGL, el dispositivo revela su chip gráfico (GPU). Los móviles reales salen de fábrica con una GPU conocida. Un Pixel 8 usa una GPU Mali. Un Samsung Galaxy S vendido en EE. UU. usa un chip Snapdragon con GPU Adreno. Cuando el modelo declarado y la GPU detectada no coinciden, el dispositivo miente sobre lo que es.
| Modelo declarado | GPU detectada | Veredicto |
|---|---|---|
| Pixel 8 | Mali-G715 | Coherente: un Pixel 8 real sale de fábrica con esta familia |
| Pixel 8 | Adreno 740 | Falsificado: el Pixel 8 nunca lleva Adreno |
| Pixel 5 | Mali-G76 | Falsificado: el Pixel 5 lleva Adreno |
| SM-S918U (Galaxy de EE. UU.) | Mali-G710 | Falsificado: los modelos de EE. UU. usan Snapdragon y Adreno |
| iPhone | Adreno o Mali | Falsificado: los iPhone muestran una GPU de Apple |
| Móvil Android | GPU de Apple | Falsificado: a menudo es un iPhone o un Mac disfrazado |
Perfiles de emulador por defecto
Los emuladores tienen que declarar algún modelo de móvil. La mayoría de los usuarios nunca cambia el que viene por defecto, y esos valores por defecto son bien conocidos. Varios emuladores populares se presentan como modelos de Samsung del mercado coreano (el sufijo N, como SM-G977N) o como modelos antiguos de Asus y vivo. Las imágenes para desarrolladores muestran nombres como sdk_gphone o vbox86.
Otra pista es la compilación de Android. Los emuladores suelen ejecutar versiones antiguas de Android, como la 5.1 o la 7.1, con un número de compilación que solo existe en la imagen del emulador. Si a eso le sumas una versión moderna de Chrome, tienes una combinación que los móviles reales casi nunca muestran.
- Modelo de Samsung coreano con una IP de EE. UU. o de Europa. Posible en alguien que viaja, habitual en un emulador.
- Compilación de Android muy antigua con un Chrome actual. Los móviles reales tan antiguos rara vez reciben versiones nuevas de Chrome.
- GPU por software, como SwiftShader o llvmpipe. Un móvil sin chip gráfico real es una máquina virtual.
- Pantalla de tamaño de escritorio en un modelo de móvil, o un móvil que declara un mouse pero no una pantalla táctil.
Modelos exclusivos de China fuera de China
Algunos móviles solo se venden en China continental. Es el caso de los modelos de OPPO y OnePlus con códigos como PJx, los de Xiaomi que terminan en C, los de vivo que terminan en A y los de Huawei u Honor que terminan en -AN00 o -AL00. Son modelos baratos de comprar al por mayor y habituales en las granjas de móviles.
Un modelo exclusivo de China que se conecta desde Estados Unidos no es una prueba de fraude. La gente viaja e importa móviles. Pero cuando muchas cuentas de tu sitio muestran modelos exclusivos de China con IPs de EE. UU., Reino Unido o Canadá, es una señal fuerte de que el tráfico viene de una granja y las IPs, de un proxy.
Restablecimientos del dispositivo y borrado del almacenamiento
Las granjas saben que los sitios guardan un ID de dispositivo. Por eso borran los datos de la app, limpian el navegador o restablecen el móvil antes de cada cuenta nueva. Aparece un ID nuevo y el sitio cree que tiene delante un dispositivo nuevo.
El restablecimiento elimina el ID guardado, pero no el hardware. La misma GPU, el mismo tamaño de pantalla, la misma compilación de Android y las mismas fuentes instaladas vuelven cada vez. Un dispositivo con el almacenamiento vacío, pero con los mismos rasgos de hardware que uno que viste hace una hora, casi con seguridad ha sido borrado.
- Almacenamiento vacío, hardware conocido. Márcalo y vincúlalo al dispositivo anterior.
- Muchas cuentas por perfil de hardware en poco tiempo, cada una con un ID nuevo.
- Mismo orden de ofertas en esas cuentas, señal de un único script o de un único trabajador.
Actúa sin bloquear a usuarios reales
Las señales de dispositivo son potentes, pero no perfectas. Las huellas del navegador se pueden falsificar y los móviles baratos a veces muestran valores extraños. Una política justa usa estas señales para frenar la salida del dinero, no para castigar por una sola pista.
- Bloquea en el clic en la oferta solo los perfiles de emulador claros y las GPUs por software. Los jugadores reales en móviles reales no se ven afectados.
- Ante una sola incoherencia de modelo, revisa en lugar de bloquear. Manda el retiro a una cola con la evidencia.
- Actúa sobre el grupo. Si diez cuentas comparten un mismo perfil falsificado, decide sobre las diez a la vez.
- Mantén una lista de permitidos. A los testers, al personal y a los buenos usuarios conocidos con hardware poco habitual no se les debería marcar cada semana.
- Mide primero. Ejecuta las comprobaciones sin bloquear durante unos días y mira cuántos retiros se verían afectados.
Cómo lo automatiza CashoutGuard
El colector JavaScript de CashoutGuard lee el modelo, la GPU, la pantalla y la compilación. Tu servidor llama a /v1/evaluate en el registro, el clic en la oferta, la conversión y el retiro, y recibe una puntuación de 0 a 100 con sus motivos.
device_spoofedcuando el modelo declarado y la GPU no pueden pertenecer al mismo móvil.emulator_profilepara modelos de emulador por defecto y compilaciones de Android que solo existen en emuladores.emulator_or_vmyautomation_detectedpara máquinas virtuales y navegadores controlados por scripts.device_market_mismatchpara modelos exclusivos de China fuera de China.storage_cleared_reappearedydevice_shared_with_accountspara dispositivos borrados y hardware compartido.
La vista de Redes de fraude vincula cuentas por dispositivo, dirección de pago, email e IP, así que una granja aparece como un solo grupo. Los sitios nuevos empiezan en modo sombra, para que puedas ver los resultados antes de que se bloquee nada. Lee la documentación o compara los planes en la página de precios.
Apps nativas de Android: comprobaciones que un navegador no puede hacer
Una app de recompensas creada para Android puede ver más que una página web. El SDK de Android de CashoutGuard se ejecuta dentro de tu app y comprueba el propio móvil: propiedades y archivos de emulador, un sistema rooteado, frameworks de hooking como Frida y Xposed que manipulan lo que lee la app, un depurador, apps para falsear la ubicación y una VPN activa en el dispositivo aunque la IP parezca residencial.
También asigna a cada móvil un ID que sobrevive a la desinstalación y reinstalación de la app, derivado del Android ID y combinado con tu clave como salt, de modo que no le sirve a nadie más. Si alguien de una granja restablece la app para crear una cuenta nueva, vuelve como el mismo dispositivo y la cuenta nueva queda vinculada a las anteriores.
| Comprobación | Código de motivo | Por qué importa en una app de recompensas |
|---|---|---|
| Propiedades, archivos y hardware de emulador | emulator_or_vm | Las granjas de emuladores completan instalaciones de pago y ofertas de playtime a toda hora |
| Móvil rooteado | device_rooted | El root permite que una app falsee su ID de dispositivo y su ubicación; débil por sí solo, fuerte junto a otras señales |
| Frida, Xposed o Substrate en la app | automation_detected | Los hooks reescriben lo que ve tu app, incluida cualquier otra comprobación |
| VPN activa en el móvil | ip_vpn | Desbloquea ofertas de países más ricos aunque la IP de salida parezca residencial |
| El mismo móvil tras una reinstalación | device_shared_with_accounts | Una persona, muchas cuentas, un pago tras otro |
La integración es una sola llamada antes de cada pago: la app obtiene un request_id en el registro, el clic en la oferta y el retiro, y tu servidor consulta /v1/evaluate. En integraciones tienes el código en Kotlin.