Страницы

среда, 27 августа 2014 г.

Пират поневоле или как меня кинул ТриколорТВ

UPDATE 2014-09-04. Триколор прислал таки мне новую карту.
Есть такой оператор спутникового ТВ - ТриколорТВ. Вещает он с того же спутника что и НТВ+, да и принадлежит он вроде тому же Газпром-Медиа, но заманчивая абонентская плата 600 р. в год значительнее привлекательнее НТВ+. Разница у ТриколорТВ в том, что оборудование для него значительно дороже и абонент на старте должен отвалить крупную сумму денег, что сразу идет в копилку оператору.
Итак, однажды в конце декабря 2012 года, я купил их официальное оборудование в виде CAM-модуля, который можно было использовать как на компьютере, так и на любом спутниковом ресивере. Я рассчитывал использовать на компьютере для прослушивания радио.
Карта бесхозно у меня провалялась больше года, прежде чем я решил ее наконец-то использовать.
В мае 2013 ТриколорТВ заблокировал часть карт, сказав что они не будут больше работать на не официальном оборудовании! И моя карта перестала работать. Хотя я покупал у официального диллера. Я написал заявление на замену карты, но прошло уже 3 месяца и мне до сих пор не пришлют карту новой серии (моя была 13), а продолжают работать 23 и 24 кажется.
В общем каждый день я проверяю ящик в ожидании письма извещения, но его все нет и нет.

Уже отчаявшись, я решил искать выход, и на просторах инета нашел, что хакеры дизасемблировали прошивку одного из официальных ресиверов и смогли вытащить алгоритм "оверкрипта" - тот из-за которого у меня перестала работать карта. То есть гипотетически я мог с помощью дополнительной программы уже пользоваться картой. Порыв глубже, выяснилось что так же удалось считать образ карты 13 серии и можно было даже картой не пользоваться, а все сэмулировать, получив одинаковый результат.
Прискорбно, но чтобы смотреть каналы которые мне должны были быть доступны как владельцу официальной карты, мне придется городить какую-то странную схему.
И так, собрав все воедино получилась такая схема:
на ресивер GI-S8120 я поставил эмулятор карты триколор Wicardd 1.18 с поддержкой оверкрипта IGS. Конфиг получился простой:
[global]
active = 1
#log = /tmp/wicardd.log
#log_udp = 192.168.1.2
log_size = 100
debug = 3

[webif]
port = 8888
debug = 3
active = 1

[filter]
name = emm_filter
type = emm
rule = caid=4AE1;ident=000011,0000FE;pid=002A,002B,0028,002C,0026;accept #13 card tricolor 
rule = reject

[filter]
name = ecm_filter 
rule = caid=4AE1;ident=000011;pid=004A,0030,004B,002E,0039,0031,004C,0101;class=00,01,04,06,07;accept #13 card tricolor  
rule = reject

[dvb]
active = 1
type = DVBAPI3
emm_filter_mode = 1
filter = emm_filter,ecm_filter
debug = 1
ecm_info = 1
sdt = 1
auto_update = 1
rerequest_not_decoded = 1

[reader]
active = 1
name = goldcard
type = goldcard
fw_file = /var/keys/pic.hex
snippet_file = /var/keys/initial_snippet.bin
extee_file = /var/keys/ee36.bin
guardtime = 1
emm_cache = 0
debug = 1

[server]
type = newcamd525
autoprovider = goldcard
auto_idents = 1
auto_update = 1
port = 15050
key = 0102030405060708091011121314
debug = 1

[account]
login = mythtv
password = mythtv
Засунув плагин wicardd в автозапуск, триколор начал работать как и должен был вместе с моей официальной картой. Вот пример /var/script/wicardd
#!/bin/sh

case "$1" in
start)
    /var/bin/wicardd-sh4 -d -c /var/etc/wicardd.conf
    ;;
stop)
    killall wicardd-sh4
    ;;
restart|reload)
    $0 stop
    sleep 1
    $0 start
    ;;
version)
    echo "1.18"
    ;;
info)
    echo "wicardd 1.18"
    ;;
*)
    $0 start
    ;;
esac
exit 0
 Но я изначально хотел все смотреть на компьютере. Телек не люблю втыкать, удобнее за компом, пока что-нибудь делаешь. Погуглив, был найден вариант поставить на комп ffdecsawrapper. Пропатчив ядро, я его поставил, и он даже взлетел, попробовал раздавать каналы через dvblast. Все работало как-то не стабильно и ffdecsawrapper систематически вылетал и открывал мало каналов. Каналы открывались с одного транспондера, а их по подписке не меньше 4-х. Когда включаешь все 4, то все просто вылетало через 5 секунд.
И тут я вспомнил что пару лет назад видел краем глаза пост про аналог ffdecsawrapper от русских программистов - Astra.
Собрал я Астру, поставил за 5 сек! Все легко и просто! И программа не ест ресурсы! Очень удобно и теперь я могу без няпрягов смотреть свой ТриколорТВ. Конфиг получился такой:
#!/usr/bin/astra

moms_wicardd = newcamd({
    name = "Mom's wicardd",
    host = "192.168.0.245",
    port = "15050",
    user = "mythtv",
    pass = "mythtv",
    disable_emm = 1,
    key = "0102030405060708091011121314",
})

dvb_12226 = dvb_tune({
    type = "S",
    adapter = 0,
    tp = "12226:l:27500",
    lnb = "10750:10750:10750"
})

dvb_11881 = dvb_tune({
    type = "S",
    adapter = 1,
    tp = "11881:l:27500",
    lnb = "10750:10750:10750"
})

dvb_12303 = dvb_tune({
    type = "S",
    adapter = 2,
    tp = "12303:l:27500",
    lnb = "10750:10750:10750"
})

------------------------------------------
-- 12226 L -------------------------------
------------------------------------------

make_channel({
    name = "Tricolor TV Infokanal",
    input = {
        "dvb://dvb_12226#pnr=27000",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.100:1234"
    }
})

make_channel({
    name = "Perviy kanal (0h)",
    input = {
        "dvb://dvb_12226#pnr=27005&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.101:1234"
    }
})

make_channel({
    name = "Rossiya 1 (0h)",
    input = {
        "dvb://dvb_12226#pnr=27010&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.102:1234"
    }
})

make_channel({
    name = "NTV (0h)",
    input = {
        "dvb://dvb_12226#pnr=27015&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.103:1234"
    }
})

make_channel({
    name = "Rossiya K (0h)",
    input = {
        "dvb://dvb_12226#pnr=27020&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.104:1234"
    }
})

make_channel({
    name = "Stil' i Moda",
    input = {
        "dvb://dvb_12226#pnr=27025&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.105:1234"
    }
})

make_channel({
    name = "Rossiya 2",
    input = {
        "dvb://dvb_12226#pnr=27030&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.106:1234"
    }
})

make_channel({
    name = "Rossiya 24",
    input = {
        "dvb://dvb_12226#pnr=27040&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.107:1234"
    }
})

make_channel({
    name = "5 Kanal (0h)",
    input = {
        "dvb://dvb_12226#pnr=27050&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.108:1234"
    }
})

make_channel({
    name = "Peretz (0h)",
    input = {
        "dvb://dvb_12226#pnr=27060&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.109:1234"
    }
})

make_channel({
    name = "TV Sale",
    input = {
        "dvb://dvb_12226#pnr=27070&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.110:1234"
    }
})

make_channel({
    name = "Karusel",
    input = {
        "dvb://dvb_12226#pnr=27090&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.111:1234"
    }
})

make_channel({
    name = "TV Centr",
    input = {
        "dvb://dvb_12226#pnr=27100&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.112:1234"
    }
})

make_channel({
    name = "RU TV",
    input = {
        "dvb://dvb_12226#pnr=27110&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.113:1234"
    }
})

make_channel({
    name = "Nash Futbol",
    input = {
        "dvb://dvb_12226#pnr=27120&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.114:1234"
    }
})

------------------------------------------
-- 11881 L -------------------------------
------------------------------------------

make_channel({
    name = "OTR",
    input = {
        "dvb://dvb_11881#pnr=901&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.120:1234"
    }
})

make_channel({
    name = "Top Shop TV Russia",
    input = {
        "dvb://dvb_11881#pnr=903&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.121:1234"
    }
})

make_channel({
    name = "Rusong TV",
    input = {
        "dvb://dvb_11881#pnr=904&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.122:1234"
    }
})

make_channel({
    name = "Comedy TV (Russia)",
    input = {
        "dvb://dvb_11881#pnr=905&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.123:1234"
    }
})

make_channel({
    name = "Nochnoy Club",
    input = {
        "dvb://dvb_11881#pnr=907&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.124:1234"
    }
})

make_channel({
    name = "Russkaya Noch",
    input = {
        "dvb://dvb_11881#pnr=908&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.125:1234"
    }
})

make_channel({
    name = "REN TV (0h)",
    input = {
        "dvb://dvb_11881#pnr=909&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.126:1234"
    }
})

make_channel({
    name = "Teleinstruktor",
    input = {
        "dvb://dvb_11881#pnr=911",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.127:1234"
    }
})

make_channel({
    name = "Iskushenie",
    input = {
        "dvb://dvb_11881#pnr=912&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.128:1234"
    }
})

make_channel({
    name = "Olala 1",
    input = {
        "dvb://dvb_11881#pnr=913&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.129:1234"
    }
})

make_channel({
    name = "Tricolor TV promo",
    input = {
        "dvb://dvb_11881#pnr=917",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.130:1234"
    }
})

make_channel({
    name = "Shopping Live",
    input = {
        "dvb://dvb_11881#pnr=918&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.131:1234"
    }
})

make_channel({
    name = "Mir (0h)",
    input = {
        "dvb://dvb_11881#pnr=919&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.132:1234"
    }
})

make_channel({
    name = "TNT (0h)",
    input = {
        "dvb://dvb_11881#pnr=920&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.133:1234"
    }
})

make_channel({
    name = "Nano TV",
    input = {
        "dvb://dvb_11881#pnr=921&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.134:1234"
    }
})

make_channel({
    name = "Brazzers TV Europe",
    input = {
        "dvb://dvb_11881#pnr=922&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.135:1234"
    }
})

------------------------------------------
-- 12303 L -------------------------------
------------------------------------------

make_channel({
    name = "Soyuz",
    input = {
        "dvb://dvb_12303#pnr=3",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.140:1234"
    }
})

make_channel({
    name = "Bridge TV",
    input = {
        "dvb://dvb_12303#pnr=59&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.141:1234"
    }
})

make_channel({
    name = "Top Shop TV Russia",
    input = {
        "dvb://dvb_12303#pnr=400",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.142:1234"
    }
})

make_channel({
    name = "Tonus TV",
    input = {
        "dvb://dvb_12303#pnr=1803&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.143:1234"
    }
})

make_channel({
    name = "India TV (Russia)",
    input = {
        "dvb://dvb_12303#pnr=31010&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.144:1234"
    }
})

make_channel({
    name = "Kinopokaz",
    input = {
        "dvb://dvb_12303#pnr=31020&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.145:1234"
    }
})

make_channel({
    name = "Zoo TV",
    input = {
        "dvb://dvb_12303#pnr=31030&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.146:1234"
    }
})

make_channel({
    name = "Telekanal Domashniy (0h)",
    input = {
        "dvb://dvb_12303#pnr=31040&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.147:1234"
    }
})

make_channel({
    name = "STS (0h)",
    input = {
        "dvb://dvb_12303#pnr=31050&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.148:1234"
    }
})

make_channel({
    name = "Boets",
    input = {
        "dvb://dvb_12303#pnr=31060&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.149:1234"
    }
})

make_channel({
    name = "U (0h)",
    input = {
        "dvb://dvb_12303#pnr=31070&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.150:1234"
    }
})

make_channel({
    name = "360° Podmoskove",
    input = {
        "dvb://dvb_12303#pnr=31090&cam=moms_wicardd",
        "file:///opt/matras.ts#loop",
    },
    output = {
        "udp://239.2.1.151:1234"
    }
})

 Временное решение, пока я жду новую карту от ТриколорТВ, хотя оно мне даже больше понравилось чем с официальной картой, так как все каналы сразу доступны одновременно и можно смотреть сразу на нескольких телевизорах.
Кстати Астра вообще не жрет ресурсы и может вещать IPTV на одном слабом компьютере!

© Нет ничего более постоянного, чем временное

UPDATE 2014-09-04
Триколор меня удивил и прислал таки модуль! Я в шоке, спасибо им!