Тема: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки
Эта информация для тех, кто хочет сам написать подкаст для сайта, где все ссылки зашифрованы.
Если вы встретили на сайте флеш-плеер uppod.swf
Если вы видите, что ссылки на файл видео или плейлиста зашифрованы, или есть ссылка на другой текстовый файл, который зашифрован во flashvars...
Например, как когда-то на степашка.ком:
<param name="flashvars" value="comment=Stream-video&st=http://www.stepashka.com/engine/classes/flashplayer/video88-1287.txt&pl=4cQoHu0Npl8L81bNpnEDHlQ3H1Ff41XhpIvNVSMdVCM8USGNw1G3VT3h4TYXHWG3HTRXYTbfpTQawArr" />
или просто видите, что используется uppod плеер, но ссылок на странице и близко не видно, то можно попытаться это дело расшифровать.
Вообще, во всех случаях изучения получения ссылки - формула примерно одна:
- Сниффером (например, Wireshark или Charles) слушаем http и смотрим какие запросы идут и ответы приходят;
- Скачиваем флеш плеер, декомпилируем (например, Flash Decompiler Trillix) и изучаем как оно всё там происходит.
В случае с uppod, есть несколько советов, возможно, очень облегчающих получение реальной ссылки.
Если с плеером uppod ссылки закодированы, значит хозяева ресурса его купили и платная версия этого плеера собирается с возможностью шифрования ссылок. Шифровка ссылок у каждого клиента, купившего плеер, своя. Поэтому придётся смотреть внутрь плеера, который используется на ресурсе.
Но на самом деле, если повезёт и ничего дополнительно не используется для шифрования и защиты контента, там всё просто:
- Скачиваем uppod.swf;
- Декомпилируем;
- Ищем в файле скрипта ActionScript плеера значения двух массивов с именами
codec_a
иcodec_b
;
Например, в плеере http://filmix.net/styles/uppod.swf это будут строки типа:
client.codec_a = new Array("l", "u", "T", "D", "Q", "H", "0", "3", "G", "1", "f", "M", "p", "U", "a", "I", "6", "k", "d", "s", "b", "W", "5", "e", "y", "=");
client.codec_b = new Array("w", "g", "i", "Z", "c", "R", "z", "v", "x", "n", "N", "2", "8", "J", "X", "t", "9", "V", "7", "4", "B", "m", "Y", "o", "L", "h");
В плеере http://st.kset.kz/pl/pl.swf:
client.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 и меняют символы по этим таблицам. Поэтому можно попытаться расшифровать ссылку или текст следующим скриптом:
string DecodeUppodText(string sData) {
char char1, char2; int i;
variant Client_codec_a = ["l", "u", "T", "D", "Q", "H", "0", "3", "G", "1", "f", "M", "p", "U", "a", "I", "6", "k", "d", "s", "b", "W", "5", "e", "y", "="];
variant Client_codec_b = ["w", "g", "i", "Z", "c", "R", "z", "v", "x", "n", "N", "2", "8", "J", "X", "t", "9", "V", "7", "4", "B", "m", "Y", "o", "L", "h"];
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;
}
Function DecodeUppodText(sData: String): String;
Var
char1, char2: String; i: Integer;
Client_codec_a: Variant = ["l", "u", "T", "D", "Q", "H", "0", "3", "G", "1", "f", "M", "p", "U", "a", "I", "6", "k", "d", "s", "b", "W", "5", "e", "y", "="];
Client_codec_b: Variant = ["w", "g", "i", "Z", "c", "R", "z", "v", "x", "n", "N", "2", "8", "J", "X", "t", "9", "V", "7", "4", "B", "m", "Y", "o", "L", "h"];
Begin
sData := ReplaceStr(sData, "\n", "");
For i:=0 to Length(Client_codec_a)-1 Do Begin
char1 := Client_codec_b[i];
char2 := Client_codec_a[i];
sData := ReplaceStr(sData, char1, "___");
sData := ReplaceStr(sData, char2, char1);
sData := ReplaceStr(sData, "___", char2);
End;
Result := HmsUtf8Decode(HmsBase64Decode(sData));
End;
DecodeUppodText('XRHzQZe3yMD8Bxn8oCYgDac3Qxl3fmFTOZuL2ZAvDj5Y5jQn5WElfxJzDmts205z50wWDju37aA3SxFgBWwT5mlg7R=z')
вернёт http://filmix.net/pl/5ab882007f69b75ba04e4eb8364c9ff8/up/Hannibal.txt
В uppod плеере, если кто будет копаться, функции шифровки/дешифровки находятся в классе Is
. Вход проверки дешифровки - функция _foo
. Хотя, названия функций и класса очень похожи на обфусцированные, поэтому от версии к версии плеера, возможно, будут отличаться.