viernes, 17 de agosto de 2018

Youku ckey hacked

Youku es un site chino que emula a youtube. Los videos son gratuitos y para obtener los enlaces se llama a una api de esta manera:

https://ups.youku.com/ups/get.json?vid=XMzM4NTU3OTc4OA==&ccode=0512&client_ip=192.168.1.1&utid=oen9EwHFFzcCAVpEyXRtWpPj&client_ts=1534524310&client_id=0edbfd2e4fc91b72&r=TJXNtWdcb6ky%2FowezfVSuUNq2wCtMaQ8fD6MHS%2Fh3vg%3D&ckey=110%23U6akAUkfk9jjcb152wgAMuy2kMUIc7gOmkm2hQ7%2F8xbQouyzcodyjwH1tka38cnQaUqB323CNnaZlkNQ7giCDGs2gpXj5er%2Fmwk2hQj12gJmbToEbc1qfr8eAr3vH0u1%2FUbSmV2DfwKijTkiLbnD%2F%2BQis9kk4EKQsvKwjsMQ9KXI7pUXCpT9DBnI7OM4KSwQ7EvesKkUGTsijTki4w2FFJlis9T4Uc%2F8ZlX84AcOtLBXj9gGk9Js9BjM2pUkDoqJgyj%2Fnnq3GUaNzQcqcG1NCht6DtXLykcUQU8FKCHtAkGcUeYMWInh8xGY4lyFqrY92NYK4C%2Bxxo0G5UsMek52qeTp8Sr1Eu%2F3KXx5uLCjnL%2BQwL7w99ocHsznYd9SVwZ9ukHyW2T7ggCwPWuOo0KyJFOto0cAAS2bGpg4eqKqF7BeXA1X3Gvu&site=1&wintype=BDskin&p=1&fu=0&vs=1.0&rst=mp4&dq=auto&os=win&osv=&d=0&bt=pc&aw=w&needbf=1&atm=&partnerid=0edbfd2e4fc91b72&callback=&_t=

La clave de la llamada es el parámetro ckey

ckey=110%23U6akAUkfk9jjcb152wgAMuy2kMUIc7gOmkm2hQ7%2F8xbQouyzcodyjwH1tka38cnQaUqB323CNnaZlkNQ7giCDGs2gpXj5er%2Fmwk2hQj12gJmbToEbc1qfr8eAr3vH0u1%2FUbSmV2DfwKijTkiLbnD%2F%2BQis9kk4EKQsvKwjsMQ9KXI7pUXCpT9DBnI7OM4KSwQ7EvesKkUGTsijTki4w2FFJlis9T4Uc%2F8ZlX84AcOtLBXj9gGk9Js9BjM2pUkDoqJgyj%2Fnnq3GUaNzQcqcG1NCht6DtXLykcUQU8FKCHtAkGcUeYMWInh8xGY4lyFqrY92NYK4C%2Bxxo0G5UsMek52qeTp8Sr1Eu%2F3KXx5uLCjnL%2BQwL7w99ocHsznYd9SVwZ9ukHyW2T7ggCwPWuOo0KyJFOto0cAAS2bGpg4eqKqF7BeXA1X3Gvu

Se genera en el javascript

https://aeu.alicdn.com/js/cj/110.js

que tiene el código ofuscado para evitar su fácil comprensión. Realmente es pesado depurarlo paso a paso. Aunque todo tiene un punto débil y en este caso es su dependencia del código y página del video. El resto de información que se condensa en ckey tiene que ver con time y user agent. No se trata de romperse la cabeza averiguando el algoritmo, sino dejando que su ejecución ciega nos lo diga. Para ello faltan marcadores.

Averiguamos que la clave es la línea de código

x = document[S];

g = 5, S = "hr", S += "ef", re = location[S], g = 8, S = P[10], ta = S ? 2141 : 5141;

que devuelve en re la url de partida. Por ejemplo

https://v.youku.com/v_show/id_XMzM4NTU3OTc4OA==.html

La idea es ejecutar el javascript en modo local para obtener ckey (que externamente puede leerse creando un servidor local como 127.0.0.2 y cualquier puerto)

Para la ejecución en local necesitamos los siguientes archivos:

el 110.js ya visto
iframeapi.js
player-collina.min.js
uac.js

y un html que emule el de la página original, cuyo contenido quedará así

<!DOCTYPE html>
<html>
<head>
    <title>Adownloader Youku Universal Player</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        html, body { height:100%; }
        body { margin:0; padding:0;}
html { overflow-x:hidden; overflow-y:hidden;}
    </style>
</head>
<body>
<div id="youku-playerBox" style="width:100%;height:100%;"></div>
<script id='_youkujs_' type="text/javascript"></script>
<script type="text/javascript" src="iframeapi.js"></script>
<script src="player-collina.min.js"></script>

    <script language="javascript">
    var _QS = QS();
    var arr = ["", "embed", "XNTIwNzUyNDgw"];
    var _vid = 0;
    if(arr.length == 3 && arr[1] == 'embed' && arr[2].charAt(0) == 'X' ){
    _vid = arr[2];
    }
_vid=arr[2];
    _QS.target = "youku-playerBox";
    _QS.client_id = "0edbfd2e4fc91b72";//"youkuind_";
    _QS.autoplay = false;
   
    var _collina;
    // document.onreadystatechange = function(){
    //   if(document.readyState == 'complete'){
   
    window.onload = function(){
      _collina = new PlayerCollina({callback:function(ckey){
    var player = new YKU.Player('youku-playerBox',{
      styleid: '0',
      client_id: _QS.client_id,
      vid: _vid,
      autoplay:_QS.autoplay,
      password:_QS.password,
    //  newPlayer: true
    //  events:_QS.events,
      onPlayStart:_QS.onPlayStart,
      onPlayEnd:_QS.onPlayEnd,
      doubleSpeed:1,
      ckey:_collina.getCkey()
             });
      }});
    };//当页面加载状态改变的时候执行这个方法.
   
   
    </script>
    </body>
    </html>

La línea

var arr = ["", "embed", "XNTIwNzUyNDgw"];

la modificamos con el id del video que queramos


El archivo 110 lo modificamos añadiendo después de la línea indicada el valor querido de re como si fuera embebido

re = "http://player.youku.com/embed/XNTIwNzUyNDgw";

uac.js lo modificamos para que la llamada a 110.js sea en local (lo mismo con los demás)

y en player-collina el código

                key: "getCkey",
                value: function() {
                    var t = window[window.UA_Opt.LogVal];
return window.UA_Opt.Token = (new Date).getTime() + ":" + Math.random(), window.UA_Opt.reload && window.UA_Opt.reload(), this.ckey = t || this.ckey, this.ckey ? this.ckey : this.defaultCkey
                }

lo modificamos añadiendo

document.write(btoa(t));location.href="http://127.0.0.2:8235?ckey="+btoa(t);fail;

a

var t = window[window.UA_Opt.LogVal];

Se puede ver su funcionamiento con el programa Adownloader v19

http://www.mediafire.com/file/u1ydjy811d1eaot/a3toMP4v19.exe/file








No hay comentarios:

Publicar un comentario