Уж больно нравиться мне название темы, поэтому буду выкладывать информацию по созданию подкастов сюда.
Если вы встретили на сайте флеш плеер uppod.swfЕсли вы видите, что ссылки на файл видео или плейлиста зашифрованы, или есть ссылка на другой текстовый файл, который зашифрован во flashvars.
Например как на степашка.ком:
<param name="flashvars" value="comment=Stream-video&st=http://www.stepashka.com/engine/classes/flashplayer/video88-1287.txt&pl=4cQoHu0Npl8L81bNpnEDHlQ3H1Ff41XhpIvNVSMdVCM8USGNw1G3VT3h4TYXHWG3HTRXYTbfpTQawArr" />
То можно попытаться это дело расшифровать.
Вообще, во всех случаях изучения получения ссылки - формула примерно одна:
- Сниффером (например Wireshark) слушаем http и смотрим какие запросы идут и ответы приходят
- Скачиваем флеш плеер, декомпилируем (например Flash Decompiler Trillix) и изучаем как оно всё там происходит.
В случае с uppod, есть несколько советов, возможно очень облегчающих получение реальной ссылки.
Если с плеером uppod ссылки закодированы, значит хозяева ресурса его купили и платная версия этого плеера собирается с возможностью шифрования ссылок. Шифровка ссылок у каждого клиента, купившего плеер, своя. Поэтому придётся смотреть внутрь плеера, который используется на ресурсе.
Но на самом деле, если повезёт и ничего дополнительно не используется для шифрования и защиты контента, там всё просто.
1) Скачиваем uppod.swf
2) Декомпилим
3) Ищем в файле скрипта ActionScript плеера значения двух массивов с именами codec_a и codec_b
Например в плеере степашки это будут строки типа:
client.codec_a = new Array("G", "d", "R", "0", "M", "Y", "4", "v", "6", "u", "t", "i", "f", "c", "s", "l", "B", "5", "n", "2", "V", "Z", "J", "m", "L", "=");
client.codec_b = new Array("1", "w", "Q", "o", "9", "U", "a", "N", "x", "D", "X", "7", "z", "H", "y", "3", "e", "g", "T", "W", "b", "8", "k", "I", "p", "r");
В плеере
http://st.keyset.kz/pl/pl.swfclient.codec_a = ["m", "T", "u", "p", "L", "n", "M", "6", "Q", "i", "w", "7", "t", "X", "s", "0", "l", "a", "k", "v", "G", "B", "D", "2", "R", "="];
client.codec_b = ["9", "c", "W", "Z", "I", "H", "J", "e", "V", "o", "y", "z", "d", "N", "b", "4", "U", "Y", "x", "g", "5", "8", "3", "1", "f", "F"];
Это - таблицы замен символов. Они, по-умолчанию, тупо кодируют текст в Base64 и меняют символы по этим таблицам. Поэтому можно попытатся расшифровать ссылку или текст следующим скриптом (С++ script):
Код:
// -----------------------------------------------------------------------------
// Расшифровка закодированного текста плеера uppod
char DecodeUppodText(char sData) {
variant char1, char2; int i;
variant Client_codec_a = ["G", "d", "R", "0", "M", "Y", "4", "v", "6", "u", "t", "i", "f", "c", "s", "l", "B", "5", "n", "2", "V", "Z", "J", "m", "L", "="];
variant Client_codec_b = ["1", "w", "Q", "o", "9", "U", "a", "N", "x", "D", "X", "7", "z", "H", "y", "3", "e", "g", "T", "W", "b", "8", "k", "I", "p", "r"];
sData = ReplaceStr(sData, "\n", "");
for (i=0; i<Length(Client_codec_a); i++) {
char1 = Client_codec_b[i];
char2 = Client_codec_a[i];
sData = ReplaceStr(sData, char1, "___");
sData = ReplaceStr(sData, char2, char1);
sData = ReplaceStr(sData, "___", char2);
}
sData = HmsUtf8Decode(HmsBase64Decode(sData));
return sData;
}
Это функция взята из моего модкаста Stepaska.com. Переделать её под другие языки скриптов не самое сложное дело.
В случае с keyset.kz - ссылки были зашифрованы в текстовом файле, который возвращался по запросу с ид фильма. В случае со степашкой.ком - зашифрована прямая ссылка на файл плейлиста или видео. Т.е. варианты что именно шифровать могут быть разные. Но как расшифровать, скорее всего вариант, который тут описан. И это сообщение - небольшая наводка.
В uppod плеере, если кто будет копаться, функции шифровки/дешифровки находятся в классе Is. Вход проверки дешифровки - функция _foo. Хотя, названия функций и класса очень похожи на обфусцированные, поэтому от версии к версии плеера, возможно, будут отличаться.
Вот и всё что хотел сказать. Может кому пригодится. Всё тупо, на самом деле. Спасибо slawa321 за проделанную первоначальную работу и предоставленую информацию.