1 (2018.10.19 16:46:15 отредактировано satelitas)

Тема: openload.co

Есть ресурс на видео - openload . На линуксе установил пакеты youtube-dl и phantomjs . Там все заработало .
Здесь - https://github.com/rg3/youtube-dl/blob/ … penload.py , вот пробую этот плагин переписать c phyton на php без phantomjs . Сохранил openload.html в tmp.html и cookies в tmp , а что дальше? Парсил на curl .
Читал здесь https://hms.lostcut.net/viewtopic.php?id=430 . Прошу помощи , как раскодировать openload .Спасибо.

2

Re: openload.co

Ооо, опенлоад. Это боги шифрования!
Я его тут давеча вместе со Spell победил. Без всяких PhantomJS. Это было эпично.
Сказал Spell-у, что выложу статью, как такие защиты ломать.. Но несколько раз начав, понял, что это тот ещё труд (статьи писать) и времени так и не хватило. Надеюсь напишу, всё-таки. Вроде простые вещи нужно донести, но пока эти картинки и gif-ы подготовишь, да так, чтобы выглядело прилично - уйма времени уходит.

Чтобы понимали, с чем там сталкиваются люди, которые заглядывают в код страницы, там такое:

+ открыть спойлер
<script type="text/javascript">゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~-~1)+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (-~-~1)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');var _0x9495=['\x5a\x66\x74','\x70\x6f\x77','\x74\x63\x56','\x45\x41\x6b','\x51\x48\x62','\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74','\x31\x31\x7c\x31\x32\x7c\x31\x33\x7c\x30\x7c\x31\x34\x7c\x33\x7c\x32\x7c\x39\x7c\x31\x36\x7c\x31\x7c\x34\x7c\x38\x7c\x35\x7c\x36\x7c\x31\x35\x7c\x31\x30\x7c\x37','\x73\x70\x6c\x69\x74','\x78\x58\x4d','\x6c\x65\x6e\x67\x74\x68','\x6a\x4c\x61','\x73\x75\x62\x73\x74\x72\x69\x6e\x67','\x61\x5a\x50','\x64\x4f\x44','\x50\x6f\x79','\x77\x72\x69\x74\x65','\x70\x75\x73\x68','\x64\x6b\x46','\x74\x65\x78\x74','\x74\x6a\x66','\x48\x49\x5a','\x57\x79\x58','\x66\x61\x7a','\x47\x63\x79','\x75\x63\x73','\x32\x7c\x30\x7c\x35\x7c\x34\x7c\x33\x7c\x31','\x64\x68\x68','\x70\x51\x75','\x65\x4d\x7a','\x5a\x42\x44','\x4c\x6e\x6b','\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65','\x44\x59\x6c','\x34\x7c\x33\x7c\x30\x7c\x35\x7c\x36\x7c\x32\x7c\x31','\x57\x4f\x61','\x67\x7a\x77','\x63\x42\x56'];(function(_0x1f55fe,_0x45ae62){var _0x3d4039=function(_0x32de24){while(--_0x32de24){_0x1f55fe['\x70\x75\x73\x68'](_0x1f55fe['\x73\x68\x69\x66\x74']());}};_0x3d4039(++_0x45ae62);}(_0x9495,0xbf));var _0x5949=function(_0x1f55fe,_0x45ae62){_0x1f55fe=_0x1f55fe-0x0;var _0x3d4039=_0x9495[_0x1f55fe];return _0x3d4039;};$(document)['\x72\x65\x61\x64\x79'](function(){var _0x45ae41={'\x78\x58\x4d':function _0x184df4(_0x3f842b,_0x6062d8){return _0x3f842b<_0x6062d8;},'\x6a\x4c\x61':function _0x3457b8(_0x38f439,_0x457b87){return _0x38f439*_0x457b87;},'\x61\x5a\x50':function _0x961da7(_0x56acea,_0x37f246){return _0x56acea+_0x37f246;},'\x64\x4f\x44':function _0x2dfccb(_0x44ea34,_0xe1a069,_0x49022f){return _0x44ea34(_0xe1a069,_0x49022f);},'\x50\x6f\x79':function _0x170b95(_0x49e0ac,_0x204c53){return _0x49e0ac in _0x204c53;},'\x64\x6b\x46':function _0x275cbe(_0x48d105,_0x930083){return _0x48d105(_0x930083);},'\x74\x6a\x66':function _0x2af2f3(_0x5d6e96,_0x41b58f){return _0x5d6e96*_0x41b58f;},'\x48\x49\x5a':function _0x1ccc24(_0x2f473c,_0xef0da5){return _0x2f473c^_0xef0da5;},'\x57\x79\x58':function _0x83e7c(_0x4fa9eb,_0x4fc60d){return _0x4fa9eb^_0x4fc60d;},'\x66\x61\x7a':function _0x7ec967(_0x1d25ce,_0x2d0418){return _0x1d25ce^_0x2d0418;},'\x47\x63\x79':function _0x3346a1(_0x5cef79,_0x59b5a3){return _0x5cef79%_0x59b5a3;},'\x75\x63\x73':function _0x2f75f3(_0x3e1dda,_0x192d4c){return _0x3e1dda<_0x192d4c;},'\x64\x68\x68':function _0x2cc0da(_0x240c12,_0x5b7c4c){return _0x240c12*_0x5b7c4c;},'\x70\x51\x75':function _0xe29029(_0x45e457,_0x88979d){return _0x45e457/_0x88979d;},'\x65\x4d\x7a':function _0xe40d05(_0x5a668a,_0x2c7bd1){return _0x5a668a<<_0x2c7bd1;},'\x5a\x42\x44':function _0x46f50e(_0x5ba232,_0x312024){return _0x5ba232&_0x312024;},'\x4c\x6e\x6b':function _0x56789d(_0x3aa5f8,_0x3172ef){return _0x3aa5f8!=_0x3172ef;},'\x44\x59\x6c':function _0x19031e(_0x144a2e,_0x309a9f){return _0x144a2e>>_0x309a9f;},'\x57\x4f\x61':function _0x1689bf(_0x39dbf0,_0x42e9f7){return _0x39dbf0 in _0x42e9f7;},'\x67\x7a\x77':function _0x5cedc0(_0x21a7ef,_0x482441){return _0x21a7ef<_0x482441;},'\x63\x42\x56':function _0x47a063(_0x47d3f1,_0x4bebf9){return (parseInt,_0x1fa71e,0x10);continue;}break;}}while(_0x45ae41[_0x5949('0x23')](_0x3d9c8e,_0x5eb93a));continue;case'\x31\x31':var  _1x4bfb36=parseInt('15014242734',8)-26;continue;case'\x31\x32':var _0x1a873b=0x0;continue;case'\x31\x33':var _0x3d9c8e=0x0;continue;}break;}}continue;case'\x31\x31':var _0x531f91=_0x45ae41['\x64\x6b\x46']($,_0x45ae41[_0x5949('0x6')]('\x23',ffff))[_0x5949('0xc')]();continue;case'\x31\x32':var _0x5d72cd=_0x531f91[_0x5949('0x24')](0x0);continue;case'\x31\x33':_0x5d72cd=_0x531f91;continue;case'\x31\x34':var _0x41e0ff=_0x45ae41[_0x5949('0x14')](0x9,0x8);continue;case'\x31\x35':var _0x145894=0x0;continue;case'\x31\x36':var _0x31f4aa={'\x6b':_0x439a49,'\x6b\x65':[]};continue;}break;}});
゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚

Напрочь обфусцированный код. С подсказок Spell, первая и последняя часть кода деобфусцируется декодером https://cat-in-136.github.io/2010/12/aa … ncode.html
А вот среднюю часть приходится декодировать вручную. И это нифига не быстро.

Но суть там следующая. После загрузки кода страницы и исполнения JavaScript в значении тега на странице появляется ссылка на видео (вместо слов Била Гейтса "640K ought to be enough for anybody").

<div class="" style="display:none;">
<p style="" id="baswccx3Pc">81cb6ce07f116636e8a6b5e4987ac42abac7b3ca21c94e06acef26927924d76ca37221b2784d43704402465a63506b01495d5861500344577f496703604458664503607f777752017679406d5e03467e4f5f115f6545506a026665707e70024a5653571d</p>
<p style="" class="" id="DtsBlkVFQx">640K ought to be enough for anybody</p>
</div>

Эта ссылка расшифровывается с помощью кода, привязана к IP и код с каждой загрузкой страницы немного меняется. Точнее меняются значения для дешифрования.

Так вот эти меняющиеся значения сильно добавляли головной боли. Т.е. их можно было получить только после деобфускации. Но я придумал, как получить их значения по уже частично известным данным.
Дело в том, что в зашифрованной ссылке, начало всегда начиналось с кода, который можно получить в открытом виде из html.
Например, ссылка iframe такая:

https://openload.co/embed/CWaAkV9Rp4I/Like.Father.2018.720p.WEBRip.HiWayGrope.mkv.mp4

а зашифрованная ссылка на странице на видео поток получалась такая:

CWaAkV9Rp4I~1540044612~2.94.0.0~eHngQiDs?mime=true

(к ней ещё нужно потом добавить /stream/ в начало, чтобы получилось что-то вроде https://openload.co/stream/CWaAkV9Rp4I~ … ?mime=true)
Так вот этот код: CWaAkV9Rp4I, известен заранее. Что помогает вычислить первоначальные значения magic чисел, с помощью которых идёт дешифрация (которые как раз меняются при каждом обращении к странице).

В общем, на PHP я пока такое не реализовывал, но может быть, поможет код для HMS на C++Script?

+ открыть спойлер
///////////////////////////////////////////////////////////////////////////////
// Расшифровка части ссылки с openload.co
string Decode_Openload(string encoded, string known) {
  string  decoded = ""; int i, encByte; Variant magic4Xor = StrToInt64("0");
  variant arr4Xor = [1,2,3,4,5,6,7,8,9];
  
  for (i=0; i<9; i++) // fill array by first 9 dwords
    arr4Xor[i] = '0x'+Copy(encoded, i*8+1, 8);
  
  encoded = Copy(encoded, i*8+1, 9999); // skip dwords
  
  int dwCount = 0; i = 0;
  while (i < Length(encoded)) {
    int maxByte = 0x40;
    int count2  = 0;
    Variant val4xor = StrToInt64("0");
    do {
      if (i+1 >= Length(encoded)) maxByte = 0x8f;
      encByte = StrToInt('0x'+Copy(encoded, i+1, 2)); // parseInt(s, 16)
      int masked = encByte && 0x3F;
      if (count2 < 30) val4xor += masked << count2;
      else             val4xor += masked * exp(ln(2) * count2); // exp(ln(X) * Y) - возведение в степень на паскале!!
        count2 += 6; i += 2;
    } while (encByte >= maxByte);
    
    // Вот такое извращение для приведения к типу Int64 (другого не придумал)
    Variant i64 = StrToInt64(IntToStr(val4xor));
    Variant deV = i64 ^ StrToInt64(arr4Xor[dwCount % 9]);
    // Если ещё не делали - получаем значения для XOR по известным четырём символам
    if (magic4Xor==0) {
      magic4Xor = StrToInt(Format('0x%x%x%x%x', [Ord(known[4])+1, Ord(known[3])+1, Ord(known[2])+1, Ord(known[1])+1])) ^ deV;
    }
    
    deV = deV ^ magic4Xor;
    
    decoded += Chr(deV       && 0xFF - 1);
    decoded += Chr(deV >>  8 && 0xFF - 1);
    decoded += Chr(deV >> 16 && 0xFF - 1);
    decoded += Chr(deV >> 24 && 0xFF - 1);
    dwCount++;
  }
  return ReplaceStr(decoded, '$', '');
}

///////////////////////////////////////////////////////////////////////////////
// Получение ссылки с openload.co
void GetLink_Openload(string link) {
  string html, code, encrypted;
  
  html = HmsDownloadURL(link);
  // Получаем код для расшифровки
  HmsRegExMatch('embed/(.*?)/', link, code); // вида "CWaAkV9Rp4I" - известное начало дешифрованной ссылки
  // Получаем зашифрованный участок
  if (HmsRegExMatch('<p[^>]+id="\\w{10}">(.*?)<', html, encrypted)) // в переменную encrypted получаем зашифрованные данные, которые нужно дешифровать
    MediaResourceLink = 'https://openload.co/stream/'+Decode_Openload(encrypted, code)+'?mime=true';
  else
    HmsLogMessage(2, mpTitle+": Not found encrypted data in embeded iframe.");
}

///////////////////////////////////////////////////////////////////////////////
//                     Г Л А В Н А Я   П Р О Ц Е Д У Р А                     //
{
  mpFilePath = "https://recentfilms.info/komediya/258-kak-otec-like-father-2018.html"; // для примера
  string html = HmsDownloadURL(mpFilePath);
  if (HmsRegExMatch('(https?://openload.co/embed/.*?)"', html, mpFilePath))
    GetLink_Openload(mpFilePath);
  else
    HmsLogMessage(2, mpTitle+": No openload iframe in loaded page.");
}

Сразу оговорюсь - очень много сил ушло на борьбу с перегрузкой чисел INT64, которые в HMS вообще вели себя не так как в JavaScript. Поэтому данный код напичкан странными StrToInt64("0") и проч. Без которых вообще, как оказалось, невозможно получить число, не приводя его к Int или Double. А это вообще не одно и то же.

Потом, может завтра, попробую перевести это дело на PHP, если интересует. Мне это будет сделать проще, ибо извращался тут я сам.

Ну а по поводу использования PhantomJs - тут задача сильно упрощается. Прям завидую тем, кто может использовать Phyton для своих медиа-серверов и проч. Тут приходится иметь дело с тем, что есть. FastScript убог, на самом деле.

И satelitas, я вообще не представляю, как вы хотели "этот плагин переписать c phyton на php без phantomjs". В том то и подход там, чтобы использовать phantomjs. Без него вам нужно придумывать что-то абсолютно другое.
Типа как я - разбираться, как генерятся нужные ссылки, как они дешифруются и писать подобное самому.

В общем, для кучи, даю ссылку на подкаст для зарубежного сайта openloadmovie.org (фильмы только на английском):

Чтобы можно было на нём поизучать, как работает мною приведённый код.

P.S.: Кстати, есть php-phantomjs, но с ним я ещё дело не имел.

Прикреплённые файлы сообщения

openloadmovie.org.zip 2.39 kb, скачивалось 337 раз, начиная с 2018.10.19

Sony Bravia KDL-32CX523
Спасибо сказали: smsbox3, satelitas2

3 (2018.11.27 01:30:07 отредактировано satelitas)

Re: openload.co

Здраствуйте WendyH , удалось мне раскодировать на php AADecoder :

+ открыть спойлер
<script type="text/javascript">゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~-~1)+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (-~-~1)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');

, а вот здесь :

<div class="" style="display:none;">
<p style="" id="baswccx3Pc">81cb6ce07f116636e8a6b5e4987ac42abac7b3ca21c94e06acef26927924d76ca37221b2784d43704402465a63506b01495d5861500344577f496703604458664503607f777752017679406d5e03467e4f5f115f6545506a026665707e70024a5653571d</p>
<p style="" class="" id="DtsBlkVFQx">640K ought to be enough for anybody</p>
</div>

я в тупике , не хватает знаний перевести твою HMS C++

+ открыть спойлер
///////////////////////////////////////////////////////////////////////////////
// Расшифровка части ссылки с openload.co
string Decode_Openload(string encoded, string known) {
  string  decoded = ""; int i, encByte; Variant magic4Xor = StrToInt64("0");
  variant arr4Xor = [1,2,3,4,5,6,7,8,9];
  
  for (i=0; i<9; i++) // fill array by first 9 dwords
    arr4Xor[i] = '0x'+Copy(encoded, i*8+1, 8);
  
  encoded = Copy(encoded, i*8+1, 9999); // skip dwords
  
  int dwCount = 0; i = 0;
  while (i < Length(encoded)) {
    int maxByte = 0x40;
    int count2  = 0;
    Variant val4xor = StrToInt64("0");
    do {
      if (i+1 >= Length(encoded)) maxByte = 0x8f;
      encByte = StrToInt('0x'+Copy(encoded, i+1, 2)); // parseInt(s, 16)
      int masked = encByte && 0x3F;
      if (count2 < 30) val4xor += masked << count2;
      else             val4xor += masked * exp(ln(2) * count2); // exp(ln(X) * Y) - возведение в степень на паскале!!
        count2 += 6; i += 2;
    } while (encByte >= maxByte);
    
    // Вот такое извращение для приведения к типу Int64 (другого не придумал)
    Variant i64 = StrToInt64(IntToStr(val4xor));
    Variant deV = i64 ^ StrToInt64(arr4Xor[dwCount % 9]);
    // Если ещё не делали - получаем значения для XOR по известным четырём символам
    if (magic4Xor==0) {
      magic4Xor = StrToInt(Format('0x%x%x%x%x', [Ord(known[4])+1, Ord(known[3])+1, Ord(known[2])+1, Ord(known[1])+1])) ^ deV;
    }
    
    deV = deV ^ magic4Xor;
    
    decoded += Chr(deV       && 0xFF - 1);
    decoded += Chr(deV >>  8 && 0xFF - 1);
    decoded += Chr(deV >> 16 && 0xFF - 1);
    decoded += Chr(deV >> 24 && 0xFF - 1);
    dwCount++;
  }
  return ReplaceStr(decoded, '$', '');
}

Decode_Openload функцию на php  :(
Поможете перевести на php ? Спасибо.