Resuelto Alfa 2.5.8 Conectores Powvideo y Streamplay

Estado
Cerrado para nuevas respuestas.
Hola.

Lamentablemente es correcto Powvideo y Streamplay no están funcionando por el momento, estamos trabajando en solucionarlo... pero estos servidores son de los mas complejos cuando hacen cambios grandes, por lo tanto quizás lleve un tiempo solucionarlos.

Por el momento aconsejamos que agreguen estos servidores a la lista de servidores bloqueados en Configuración -> Ajustes de servidores -> Servidores Bloqueados, de esta manera estos servidores no se listaran hasta que se vuelvan a activar.

Saludos
 
Creada modificación para los videos alojados en powvideo, de momento en pipcat/addon, pronto en el addon oficial, si se confirma que va bien.

Ha sido difícil pq la obfuscación del código era bastante compleja, pero una vez resuelta, la solución ha sido sencilla.

Me he basado en un par de ejemplos de videos que he analizado, pero habrá que ver si se cumple igual para todos los videos, o habrá que hacer algún retoque...

Powvideo reversing: Por si alguien se lo ha estado mirando y tiene curiosidad, dejo el par de htmls que he analizado, con el código de powvideo que tiene que ver con la obtención de los enlaces, simplificado al máximo. Solo contiene:
- un array con los enlaces iniciales, que se obtiene fácilmente del html original pasando por jsbeautifier.org
- un objeto "l" que se rellena con código ilegible, que es el reponsable de convertir el enlace inicial en el final.

A partir de aquí, hay que ir desgranando que se hace en la función del objeto l, y una vez descifrado, reproducirlo en código python ;-)
 

Adjuntos

@pipcat
Un trabajo muy limpio, muchas gracias.

El método que usan ahora es el mismo que usaron en otra época.

Por lo visto en los html se nota que te gusta trajinar :)

Te paso los archivos recuperados y adaptados para que sean compatibles con mi versión personalida basada en pelialacarta 3.9 y 4.x y con alfa 2.5.x
 

Adjuntos

Muchas gracias @robalo y encantado de leerte de nuevo ;-)
Tu versión es más parecida al javascript, y un poco más adaptada a si hay cambios como que quiten el reverse. Es interesante ver diferentes acercamientos, merci por compartirlo.

Por cierto, he encontrado un par de artículos muy interesantes donde detallan un sistema de obfuscación que se parece mucho a los de powvideo y streamplay. Lectura recomendada para quien quiera entender como funciona...
Breaking down one of the coolest JavaScript obfuscators
Quick analyzing root-me.org's JS native code challenge
 
Última edición:
Para el tipo de ofuscación del primer enlace hicimos lib/aadecode.py con un par de funciones para perfilar el escrape algunas webs.

El segundo enlace es más de lo mismo. No lo tenemos implementado pero si surgiera el caso es posible implementarlo. Solo tenemos que hacer prácticas en html+js separando las definiciones de los datos para crear el algoritmo en python.

Si le echas un ojo al .py verás que la solición no es muy complida de entender.

Te pego una versión de la función decode con tres líneas menos.
Código:
def decode(text):
    text = re.sub(r"\s+|/\*.*?\*/", "", text)
    data = text.split("+(゚Д゚)[゚o゚]")[1]
    chars = data.split("+(゚Д゚)[゚ε゚]+")[1:]

    txt = ""
    for char in chars:
        char = char \
            .replace("(o゚ー゚o)", "u") \
            .replace("c", "0") \
            .replace("゚Θ゚", "1") \
            .replace("!+[]", "1") \
            .replace("o", "3") \
            .replace("_", "3") \
            .replace("゚ー゚", "4")

        c = ""; subchar = ""
        for v in char:
            c+= v
            try: x = c; subchar+= str(eval(x)); c = ""
            except: pass
        if subchar != '': txt+= subchar + "|"

    return "".join([ chr(int(n, 8)) for n in txt[:-1].split('|') ])
 
Gracias, no conocía el aadecode, y veo que este tuyo es un pelín diferente del que hay en alfa. En función de como evolucione la protección habrá que ver si es suficiente con decodificarla manualmente e implementar lo visto (como el ejemplo de powvideo donde el decode solo hace lo de girar y quitar un char). O si hay que implementar una solución más genérica que interprete lo ofuscado y luego el código que encuentre, que es como parece que estaba antes, pero dejó de funcionar, y aquí es donde el aadecode podría ser interesante.
Solo que hicieran el splice variable y no fuera siempre (2,1) obligaría a tirar por aquí y complicaría más las cosas...
Agradecido por tu ayuda ;-)
 
Te pego una versión de la función decode con tres líneas menos.
He probado el aadecode con enlaces de openload, que no hace falta para sacar la url final, pero al ver que era la misma ofuscación he aprovechado para ver como habías sacado el decode. Está cachondo como lo resuelves a base de try/eval, tiene su gracia ;-) Yo lo he hecho un pelín diferente, con un poco más de código, pero se ejecuta más rápido al hacer solo los eval cuando se cierran los paréntesis. No tiene mayor importancia pq uno tarda +/- 0.001 y el otro +/- 0.004. La diferencia está solo al calcular el subchar de cada línea.
Código:
def aadecode2(text):
    text = re.sub(r"\s+|/\*.*?\*/", "", text)
    data = text.split("+(゚Д゚)[゚o゚]")[1]
    chars = data.split("+(゚Д゚)[゚ε゚]+")[1:]

    txt = ""
    for char in chars:
        char = char \
            .replace("(o゚ー゚o)", "u") \
            .replace("c", "0") \
            .replace("゚Θ゚", "1") \
            .replace("!+[]", "1") \
            .replace("o", "3") \
            .replace("_", "3") \
            .replace("゚ー゚", "4")

        n = 0; acum = ''; subchar = '';
        for c in char:
            if c == '+' and acum == '': continue
            acum += str(c)
            if c == '(': n += 1
            elif c == ')':
                n -= 1
                if n == 0:
                    subchar += str(eval(acum))
                    acum = ''

        if subchar != '': txt+= subchar + "|"

    return "".join([ chr(int(n, 8)) for n in txt[:-1].split('|') ])
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba