Página 1 de 1

Captcha en Pordede

Publicado: 24 Mar 2017, 19:26
por tormund
Acabo de ver que han añadido un el reCaptcha de Google en el login de Pordede, así que la forma en la que hasta ahora se hacía logon no funciona. Alguna pista de cómo saltarse esta validación?

Re: Captcha en Pordede

Publicado: 24 Mar 2017, 20:07
por Cmos
Pufff, lo peor que podían haber hecho xD

Hace un tiempo, para otra web que pedía el captcha al mostrar los enlaces, estuve probando con ello y después de varios intentos cuando estaba cerca de conseguirlo lo que pasó es que ya el captcha no pedía la comprobación de "No soy un robot", sino que también pedía lo típico de señalar las imágenes... En teoría sería posible emularlo e incluso mostrar una ventana con las imágenes cuando las pida (aunque esto solo serviría para Kodi probablemente), pero es un jardín de los grandes donde yo ni me asomaría :lol:

Re: Captcha en Pordede

Publicado: 24 Mar 2017, 23:10
por tormund
He estado investigando y creo he entendido el funcionamiento del captcha: primero envía una solicitud a una URL de google que devuelve un JSON, donde se indica si es necesario captcha o no. Si es necesario se llama a otra URL que devuelve la imagen para que el usuario conteste a la pregunta y resuelva el problema. Imagino que podré capturar esta imagen y mostrarla al usuario tal y como dices que se hace en Kodi. Por último llamaría a una tercera URL que entiendo es la que valida el captcha y devuelve el ok.

Tengo varias dudas del proceso:

- He llegado a llamar a la primera URL pero me devuelve el JSON con todo a null. Creo que me falta el Referer pero el que envía el navegador tiene un parámetro que no sé de donde lo obtiene: v=r20170320152239. Imagino que será un parámetro que debo capturar pero no sé de dónde.

- Si no pide captcha, ¿qué debería enviar a Pordede para que valide el login?¿Capturando la cookie de que envíe Google?

- Si pide captcha, ¿cómo podría capturar la respuesta del usuario al pulsar sobre la image?

Como me has dicho que estuviste probando un bypass para el captcha quizá me puedas orientar para, al menos, intentar conseguir algo.

Saludos.

Re: Captcha en Pordede

Publicado: 25 Mar 2017, 01:40
por Cmos
Ahora que he refrescado un poco el proceso, ya recuerdo por qué lo mandé a tomar por... :lol: Resulta que el método que se usa para resolver el captcha sin imágenes en el navegador es muy difícil de replicar en código, ya que en uno de los pasos se necesita un valor llamado bgdata que se saca resolviendo un código en javascript que no hay manera de meterle mano (yo ni siquiera sé donde está, y seguramente quien lo haya hecho se ha montado una web premium anti captcha xD)

Por lo tanto la única manera es resolviendo el captcha de imágenes. El problema es que hay que montar un sistema de botones donde el usuario pinche sobre el trozo/trozos de imagen correcta, y puede ser que haya que hacerlo varias veces hasta que el recaptcha se quede tranquilo xD

Bien, este es el código en sucio que tenía, ligeramente modificado para adaptarlo a pordede. A este código le faltan varias partes, porque no llegué tan lejos, pero como verás no es tan sencillo como encadenar dos o tres llamadas a diferentes urls, ojalá :mrgreen:

Código: Seleccionar todo

    import base64, time
    from core import httptools
    url_login = "http://www.pordede.com/site/login"
    data = httptools.downloadpage(url_origin).data
    
    api_js = httptools.downloadpage("http://www.google.com/recaptcha/api.js?hl=es").data

    a = scrapertools.find_single_match(api_js, 'po.src = \'(.*?)\';')
    version = a.split("/")[5]
    key = scrapertools.find_single_match(data, 'data-sitekey="([^"]+)"')
    co = base64.b64encode('http://www.pordede.com:80').replace("=", ".")

    headers= {"User-Agent": "Mozilla/5.0",
             "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
             "Referer": "https://www.google.com/recaptcha/api2/demo/",
             "Accept-Language": 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3'}
    params = "k=%s&hl=es&v=%s&co=%s&cb=418nrq4cd5m&size=normal" % (key, version, co)
    url = "https://www.google.com/recaptcha/api2/anchor?%s" % params
    data = httptools.downloadpage(url, headers=headers, replace_headers=True).data
    
    token = scrapertools.find_single_match(data, 'id="recaptcha-token" value="([^"]+)">')
    params = "k=%s&hl=es&v=%s&bg=!A&c=%s" % (key, version, token)
    headers["Referer"] = url
    data = httptools.downloadpage("https://www.google.com/recaptcha/api2/frame?%s" % params, headers=headers, replace_headers=True).data
    data = data.decode("unicode-escape")

    token = scrapertools.find_single_match(data, '"rresp","([^"]+)"')
    params2 = "k=%s&c=%s" % (key, token)
    url_imagen = "https://www.google.com/recaptcha/api2/payload?%s" % params2
    # Esta es la url de la imagen (puede haber varias)
    # Desde aqui encapsular con un while
    # captcha_response = resolver_captcha()
    # Ejemplo de respuesta: [[5,9]] -  Recuadro 5 y 9
    # response = base64.b64encode('{"response":"%s" % captcha_response}')

    url = "https://www.google.com/recaptcha/api2/userverify?k=%s" % key
    time1 = int(round(time.time() * 1000)) - int(round(time.time() * 1000))
    post = "v=%s&c=%s&response=%s&t=%s&ct=%s&bg=!A" % (version, token, response, time1, time1)
    headers["Referer"] = "https://www.google.com/recaptcha/api2/frame?k=%s&hl=es&v=%s" % (key, version)
    data = httptools.downloadpage(url, post, headers=headers, replace_headers=True).data
    # Si en este data se devuelve un string bgdata, hay que volver a sacar una nueva imagen

    result = scrapertools.find_single_match(data, '"uvresp","([^"]+)"')
    post = "LoginForm[username]="+config.get_setting("pordedeuser", "pordede")+"&LoginForm[password]="+config.get_setting("pordedepassword", "pordede")
    post += "&LoginForm[verifyCode]=%s&g-recaptcha-response=%s" % (result, result)

    data = httptools.downloadpage(url_login, post, add_referer=True)
No sé si te sirve porque como ves es bastante relioso y está "organizado" a mi manera. Sobre tus preguntas, el parámetro v se extra de la api de recaptcha y lo que se debe capturar para enviárselo a la página al hacer el login es la variable result que pongo en el código, pero claro, si se intenta sacar eso sin pasar el captcha de imágenes, ese resultado no es válido.

Por mi parte yo intentaré mirarlo cuando tenga tiempo pero no sé si la cosa saldrá bien...

Re: Captcha en Pordede

Publicado: 25 Mar 2017, 14:35
por Cmos
tormund, al final me he liado la manta a la cabeza y lo he sacado por coj... :lol: Resulta que el método es más sencillo es cargar el captcha con un user-agent del pleistoceno, para que así el código que se recibe sea mucho más directo y sencillo de parsear y la solución también mucho más fácil. De esto me di cuenta al probar la web cargándola en el chrome con el user-agent cambiado, se me iluminó la bombilla y el resto ha sido "coser y cantar" (o eso me gustaría decir xDD)

He colgado los archivos en el subforo de pelisalacarta, por si quieres echarles un ojo y te sirven para portarlo a java que es donde imagino quieres usarlo ;)

Re: Captcha en Pordede

Publicado: 26 Mar 2017, 09:19
por tormund
Qué grande eres. Voy a intentar pasarlo a Java y ya te cuento.