Web-Bot detection

Iniciado por alvaca, 19 Julio 2020, 15:25 PM

0 Miembros y 1 Visitante están viendo este tema.

alvaca

En el desarrollo de juegos online se hace un gran esfuerzo por detectar si se están inclumpliendo las normas, especialmente con el uso de bots. Estoy intentando crear un bot en Android que simule la navegación a través de un juego online que funciona con js. El caso es que como se menciona antes este debe evitar ser detectado.

Por ese motivo me gustaría saber que formas tiene el servidor de detectar el uso de bot-scripts.
Hasta ahora he valorado las siguientes casuisticas:

  • Conexión mediante una librería que usa de forma síncrona javascrpit para obtener la información deseada y realizar clics, tal y como haría una persona en el navegador
  • Configurado el User Agent para que muestre un acceso desde un móvil y en caso de ser necesario el uso de un proxy
  • Simulación de comportamiento humano con tiempos de espera aleatorios y conexiones periódicas también con rangos aleatorios

Estos pasos me parecen importantes a la hora de evitar ser detectado. Sin embargo, el juego hizo una actualización y en el propio navegador se resaltan ciertos campos cliqueables cuando el puntero se situa sobre ellos. Esto me hace pensar que puede que en las cookies o en algún request se envien las coordenadas del clic. En ese caso el uso de javascripts haría que el bot fuese detectado, ya que una persona rara vez clica siempre en el mismo punto de los botones o ni los clica (tengo mis dudas al ejecutar el js).
No sé muy bien si me estoy preocupando en exceso pero es esencial que el bot no sea detectable. Cualquier cosa que se me pueda escapar agradecería muchisimo que me lo comentasen. Incluso alguna fuente donde se explique en detalle la información necesaria para entender las comunicaciones cliente - servidor.

Muchas gracias

Alvaca

@XSStringManolo

Captura el tráfico y analízalo hasta que lo entiendas.

El servidor no es una entidad mágica que adivina cuando le das a un botón. Se lo dices tú. Monta un esquema MITM.

alvaca

Lo siento pero soy medianamente nuevo en esto. He leído los Request que se rwlaixna durante el juego y se resumen en unos recursos almacenados en la cache y un GET o POST en cada cambio de página. El caso es que no sé leer muy bien los headers y no se si el propio browser enviar información que diferencia entre un js de la línea de comandos y un click manual.

El MITM que es?? He intentado buscar información pero no entiendo casi nada. Si pudieses orientarme un pcoo te lo agradecería.

Muchas gracias

el-brujo

en los juegos no tengo ni ideas de cómo detectar un bot, lo siento.

Pero en páginas web si domino el tema y hay varias cosas a tener en cuenta. Pero vaya, si usa User-Agent es que son peticiones vía web, entiendo yo.

Lo ideal es montar un servidor de juegos igual, hacer las peticiones y mirar los logs, para saber todo lo que captura de ti.

Por ejemplo CloudFlare tiene una cosa que se llama "IP reputation", que sólo viendo la IP ya "sabe" si esta Ip es usada por bots o no, si es un proxy, red de tor, etc.


CitarConfigurado el User Agent para que muestre un acceso desde un móvil y en caso de ser necesario el uso de un proxy

User Agent es muy importante, y recuerda una IP, un User Agent, si vas cambiando de User-Agent con la misma IP resultará siempre fallido. Y si el User-Agent pues que sea actual y real.

Tendrás que analizar si el servidor manda cookies y aceptarlas. Pueden tener muchos otros métodos de detección de bots.


CloudFlare (web) mira:

- JS Challenge (si el navegador acepta e interpreta javascript) aunque es fácil saltárselo
- User-Agent
- HTTP Method (GET, POST, OPTIONS, PUT DELETE)
- HTTP Version (1.1 1.0 2.0)

alvaca

Hola el-brujo,

Sí, se trata de un browser game que se ejecuta en Internet como una web más. Por ese motivo quería conocer como saber que tipo de información se envía al servidor.

Al querer automatizar la navegación por dicha web uso javascript para recoger textos, rellenar formularios y clicsr botones (por ej. Document.getElementById("s1").click()) No se si el servidor puede detectar si ha sido automatizado o si lo ve igual que un click normal.
De ser así donde me tendría que fijar para ver si lo detecta??

Respexti a montar un servidor de juegos igual, que es eso?? Osea puedo replicar el html y el js que veo desde mi navegador y ejecutarlo de forma local?? O desde el propio navegador hay forma de ver eso??





[u]nsigned

Por ejemplo la app web de wsp https://web.whatsapp.com/ tiene proteccion contra bots, yo intente hacer un scripts de automatización de envío de mensajes con greasemonkey pero no funcionaba, creo que para hacer eso lo que hacen es meter el código dentro de funciones auto-ejecutables de js y asi se encapsula el scope de forma que no se puede acceder desde afuera, por ejemplo con greasemonkey o 'inyectando' código por la consola del navegador.

Asi que fui un paso mas allá y me cree un bot que usa puppeteer para lanzar el chrome de mi sistema (no la modalidad headless, con esa tampoco funciono), con mis sesiones, cookies y toda mi data se usuario, en lugar de interactuar por js directamente con el dom (tampoco funciono) lo que hago es simular pulsaciones de teclado o clicks de ratón reales, puppeteer tiene esa feature por suerte, y ahi si ya no pudo defenderse y ahí tengo a mi bot spameando a dos manos  :xD

y si wsp no pudo lograrlo nadie puede defenderse de eso, mas allá de poner un captcha, pero eso solo agregaria un paso de intervención humana, una vez resuelto el mismo podría dársele el control de las tareas al bot de todas formas, ya que poner un capta para cada acción (enviar un mensaje en mi caso) haria que la app en si sea inútil para un humano por se poco practica.

Como lo tuyo es a nivel de movil, te recomiendo que mientras corres tu bot (no se que metodo usaras) uses la aplicación HTTP Canary que es un sniffer para Android, asi luego vas a poder ver con lujo de detalle todo lo que el juego le esta mandando a sus servidores y viceversa. Esta es la unica app de este tipo que puede snifar ppor https y http2, al menos asi lo era hace dos meses cuando yo estuve con ese tema, te la recomiendo porque ya se que funciona, lo unico malo es que tiene un trial de 14 dias en su version free.

Por ultimo si investigas en google sobre como protegerte contra bots (o mejor dicho web-scrapping) veras que no existe una forma optima de hacerlo al dia de hoy, asi que si usas tiempos de respuesta aleatorios y humanos, un user-agent consistente y un proxy no deberias preocuparte. Ademas esto no es un delito per se y siempre tendras la excusa de que lo haces con "fines didácticos o de investigación".

PD: no se molesten en pedirme el bot de wsp web porque no lo comparto ni está a la venta,  ya les di todo los detalles para hacer el suyo propio.  :xD

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

rub'n

[quote author=nsigned link=topic=505898.msg2225508#msg2225508 date=1595572854]
Por ejemplo la app web de wsp https://web.whatsapp.com/ tiene proteccion contra bots, yo intente hacer un scripts de automatización de envío de mensajes con greasemonkey pero no funcionaba, creo que para hacer eso lo que hacen es meter el código dentro de funciones auto-ejecutables de js y asi se encapsula el scope de forma que no se puede acceder desde afuera, por ejemplo con greasemonkey o 'inyectando' código por la consola del navegador.

Asi que fui un paso mas allá y me cree un bot que usa puppeteer para lanzar el chrome de mi sistema (no la modalidad headless, con esa tampoco funciono), con mis sesiones, cookies y toda mi data se usuario, en lugar de interactuar por js directamente con el dom (tampoco funciono) lo que hago es simular pulsaciones de teclado o clicks de ratón reales, puppeteer tiene esa feature por suerte, y ahi si ya no pudo defenderse y ahí tengo a mi bot spameando a dos manos  :xD

y si wsp no pudo lograrlo nadie puede defenderse de eso, mas allá de poner un captcha, pero eso solo agregaria un paso de intervención humana, una vez resuelto el mismo podría dársele el control de las tareas al bot de todas formas, ya que poner un capta para cada acción (enviar un mensaje en mi caso) haria que la app en si sea inútil para un humano por se poco practica.

Como lo tuyo es a nivel de movil, te recomiendo que mientras corres tu bot (no se que metodo usaras) uses la aplicación HTTP Canary que es un sniffer para Android, asi luego vas a poder ver con lujo de detalle todo lo que el juego le esta mandando a sus servidores y viceversa. Esta es la unica app de este tipo que puede snifar ppor https y http2, al menos asi lo era hace dos meses cuando yo estuve con ese tema, te la recomiendo porque ya se que funciona, lo unico malo es que tiene un trial de 14 dias en su version free.

Por ultimo si investigas en google sobre como protegerte contra bots (o mejor dicho web-scrapping) veras que no existe una forma optima de hacerlo al dia de hoy, asi que si usas tiempos de respuesta aleatorios y humanos, un user-agent consistente y un proxy no deberias preocuparte. Ademas esto no es un delito per se y siempre tendras la excusa de que lo haces con "fines didácticos o de investigación".

PD: no se molesten en pedirme el bot de wsp web porque no lo comparto ni está a la venta,  ya les di todo los detalles para hacer el suyo propio.  :xD
[/quote]

Hola por casualidad tendras un bot de wuasap web ? lo necesito, estoy comenzando en informática. quiero ser crackJuanker.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

FFernandez

#7
Si yo quisiera detectar un boot, que maneje el ratón, pondría esas trampas que detecten el paso del ratón de un punto a otro. por la media recibida de los usuarios banearía a los que estén por debajo del umbral.

Al utilizar las pulsaciones por codigo de un botón a otro no hay rastro.................jeje

alvaca

Muchas gracias unsigned, me ha sido de mucha ayuda. Aún así no se como ves fácil el modo de hacer web-scraping sin ser detectado. No hago más que ver nuevas formas de detectar un bot (aunque algunas veces no explican como  :-()

Citaren lugar de interactuar por js directamente con el dom (tampoco funciono) lo que hago es simular pulsaciones de teclado o clicks de ratón reales, puppeteer tiene esa feature por suerte,

Entiendo que lo óptimo es simular clicks con coordenadas como haces tu  con puppeteer, aunque yo no se como podría hacerlo desde una app de móvil. En mi caso solo he encontrado una forma de navegar de forma automatizada. Esta forma es mediante un WebView que una vez ha cargado la página ejecuta un javascript como este:

javascript: document.getElementsById('id').click()

De esta forma entiendo que navego como un usuario normal con sus tiempos y demás. Aún así tengo mis dudas ya que no se si estoy inyectando scripts detectables al crear en java un JavascriptInterface para guardar los datos obtenidos en la aplicación.

Me he metido ya en mucho detalle pero a lo mejor alguno sabe sobre el tema.
Muchas gracias de adelantado

alvaca

[

Muchas gracias unsigned, me ha sido de mucha ayuda. Aún así no se como ves fácil el modo de hacer web-scraping sin ser detectado. No hago más que ver nuevas formas de detectar un bot (aunque algunas veces no explican como  :-()

[quote author=nsigned link=topic=505898.msg2225508#msg2225508 date=1595572854]
en lugar de interactuar por js directamente con el dom (tampoco funciono) lo que hago es simular pulsaciones de teclado o clicks de ratón reales, puppeteer tiene esa feature por suerte
[/quote]

Entiendo que lo óptimo es simular clicks con coordenadas como haces tu  con puppeteer, aunque yo no se como podría hacerlo desde una app de móvil. En mi caso solo he encontrado una forma de navegar de forma automatizada. Esta forma es mediante un WebView que una vez ha cargado la página ejecuta un javascript como este:

javascript: document.getElementsById('id').click()

De esta forma entiendo que navego como un usuario normal con sus tiempos y demás. Aún así tengo mis dudas ya que no se si estoy inyectando scripts detectables al crear en java un JavascriptInterface para guardar los datos obtenidos en la aplicación.

Me he metido ya en mucho detalle pero a lo mejor alguno sabe sobre el tema.
Muchas gracias de adelantado