0×03 – Digiturk WebTV
321 milyon dolar... Digiturk'un, onumuzdeki 4 senenin SuperLig yayin hakki icin odeyecegi meblag. Biraz "fahis" bir fiyat gibi gozukse de, saglanacak gelir 321 milyon dolardan fazla oldugu surece sasirmanin, isyan etmenin, elestirmenin pek bir anlami yok.. Peki nedir bu gelir yollari? Digiturk kutulari ve uyelik paketleri ile reklam gelirleri tabii ki en onemlileri. Bunun yanisira, yurtdisinda yasayan futbol meraklilari icin "Digiturk WebTV" hizmeti de sunuluyor; bu sayede 30$ karsiliginda internetten LigTV ve baska turk kanallarini da izlemek mumkun. Benim gibi, kiralik yasadigi apartmana Digiturk uydusu taktirmanin imkansiz oldugu ulkelerde yasayanlar, ve JustinTV ya da benzeri beles izleme yollarina basvurmak istemeyenler icin bu cozum birebir.. Her ne kadar zaman zaman takilip insani sinir etse de, genel olarak faydali bir servis diyebilirim.
Neyse, Digiturk WebTV'yi (kisaca WebTV diyelim) bilmeyenler icin kisa bir giris paragrafindan sonra simdi asil konuya girebiliriz. Bu yazinin iki amaci var:
- WebTV'yi Windows disindaki bir isletim sisteminden (MacOS, Linux gibi) nasil izleyebildigimi gostermek.
- Yukaridakini gerceklestirmeye calisirken ortaya cikardigim, ve WebTV'yi bedava izlememi saglayan bir guvenlik acigini paylasmak.
Yazinin sonunda, bu iki amaca yonelik gelistirdigim basit bir Python scriptini de paylasacagim.
Bu yazida yazdiklarimin tamami, Digiturk WebTV'nin yurtdisina acik olan sitesi ve sistemi uzerinde denenmistir. Turkiye'den mac izlemek icin saglanan portalda ayni yontemlerin ise yarayip yaramayacagini bilemiyorum.
Bu yazimin amaci, insanlari IT guvenligi konusunda ornekler vererek bilinclendirmektir. "Digiturk rezalet, bilinciz" vs gibi bir iddiam yok, zira bu tarz aciklara her gun her yerde rastliyoruz. Ayrica Digiturk, bircok sirketin aksine, durumu ciddiye alip kisa bir surede acigi kapatmistir.
Windows bagimliligindan kurtulmak
Digiturkwebtv.com'daki Sikca Sorulan Sorular kismina gore sistem gereksinimleri: "İşletim sistemi:Windows 2000, XP,Vista,7. Tarayıcı: Internet Explorer 7.0 yada üzeri".. Yani Linux ya da MacOS ile izlemek mumkun degil.. Aslinda yine ayni sayfada yazan "Yayın formatı Windows Media 9 formatında olup, Microsoft DRM (Digital Rights Management) sistemi ile güvenli olarak şifrelenmektedir." ibaresine guvenecek olursak, bunun dogru olmasi lazim.. cunku DRM lisansi sadece Windows ile indirilip kullanilabiliyor. Ancak birazdan goreceginiz gibi, DRM kullanilmamakla birlikte, yayinlari Windows disindan izlemek de gayet mumkun. En azindan ben su anda Apple Macbook'um uzerinde VLC programi ile izleyebiliyorum.
Yapmamiz gereken, WebTV tarafindan stream edilen video'nun direkt linkini elde etmek. Bunu nasil yapacagimiz anlamak icin ise WatchTv2.aspx sayfasinin kaynak koduna goz atmak yeterli. Anasayfadan giris yaptiktan sonra "TV izle" linkine tiklayip WatchTV2.aspx sayfasina gelebilirsiniz. Bu sayfanin sag tarafinda, eger parasini odeyip paket satin almis bir uye iseniz, kanallarin listesi yer aliyor. Kaynak kodda bu bolume bakarsak, bir kanala tiklandigi zaman islemkutu fonksiyonunun bir parametre ile cagrildigini gorebiliriz. Ornegin LigTV icin:
<span class="c_item" onclick=javascript:islemkutu('817142825')>
<img src="images/kanal_isim/ligtv_logo.png"></img>
</span>
817142825 parametresi, LigTV kanalinin id'si. ShowTurk 817132544, ATV 817132536, vs...
islemkutu fonksiyonuna bakarsak:
function islemkutu(deger) {
//http.open('get', 'generatelink.aspx?kanal=' + deger);
http.open('post', 'adminchannel.aspx', true);
http.onreadystatechange = cevapFonksiyonu;
http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//http.send(null);
http.send('kanal=' + deger);
}
Burada goruyoruz ki, adminchannel.aspx adresine bir POST request yollaniyor. Bu POST request'te ayrica istenilen kanalin id'si de "kanal=id" seklinde yollaniyor. Ornegin ShowTurk icin, "kanal=817132544" request'ini yollayabiliriz. Bu request'e admin channel.aspx tarafindan gonderilen cevap ise, cevapFonskiyonu'na besleniyor. cevapFonksiyonunun tek yaptigi da WatchTV2.aspx sayfasinda bulunan "gomulu" (embedded) Media Player ile cevapta gelen linki acmak.
Peki, biz kendimiz adminchannel.aspx'e, izlemek istedigimiz kanalin id'sini iceren bir POST request yollasak, gelen cevabi da VLC gibi harici bir medya programinda acsak, WebTV'nin sayfasina bagimli kalmadan rahat rahat izlesek olmaz mi? Olur.
Bunu denemek icin telnet programini kullanabiliriz.
> telnet www.digiturkwebtv.com 80 komutuyla baglanti kurulduktan sonra,
POST /adminchannel.aspx HTTP/1.0
Content-type: application/x-www-form-urlencoded
Referer: http://www.digiturkwebtv.com/WatchTv2.aspx
Cookie: ASP.NET_SessionId=[cookie buraya]
Content-length: 15
kanal=817142825
seklinde bir POST request yollanabilir. Burada onemli olan, [cookie buraya] kismina, login olmus bir uyenin gecerli cookie degerini (eubwzv550ljwjk20bljccp55 gibi bir deger) yazmak...
Bu request yollandiktan sonra asagidaki gibi bir cevap gelecektir:
mms://a347.l7614612346.c76146.g.lm.akamaistream.net/D/347/76146/v0001/reflector:12346?auth=da_boaObmcJbXcRc1cjcadQazc5dnagbpd2-blk8sK-jy-FnlECpzsyEH-n2tWkamUp4q6n0q5pVoRoUk8mlpXt4nSn0t3j6mSp6r5
Bu MMS adresini VLC gibi bir programla acip sectiginiz kanali izleyebilirsiniz.
Daha basit bir yontem...
Kim ugrasacak telnetle cookie'yle diyorsaniz, bu yaziyi yazarken tesadufen kesfettigim bir baska yontemi de aktarayim. Sikca kullandigim pratik bir Firefox uzantisi olan Tamper Data sayesinde, zahmetsiz bir sekilde MMS adresine ulasmak mumkun. Oncelikle uzantiyi buradan yukleyip, Firefox'u restart edin. Daha sonra digiturwebtv.com'a girip uye girisi yapin. Kanallarin listelendigi sayfaya gelince, Firefox'un "Tools" menusunden "Tamper Data"yi secerek calistirin. Herhangi bir dugmeye basmaniza gerek yok. Simdi WebTV sayfasina donup, izlemek istediginiz kanala tiklayin. Tamper Data'ya donup, Method'u POST, URL'i "http://www.digiturkwebtv.com/adminchannel.aspx" olan satiri bulun (bastiginiz anda cikmasi lazim zaten). Sag tikayip "View Source"u secin.. Acilan kutuda MMS adresi yer alacaktir. Tek yaptigimiz, kanala tiklayarak yolladigimiz POST request'e gelen, ve normalde bize gizli olan cevabi, Tamper Data sayesinde goruntulemek.
Hesap paylasimi
Bu asamada akla gelen muzip soru: elde ettigimiz linki arkadaslarimizla paylasip ayni anda izleyebilir miyiz?
WebTV'nin buna karsi aldigi onlem, WatchTV2.aspx sayfasinin kaynak kodunda gorebilecegimiz CheckUser fonksiyonu. Bu fonksiyon, belli araliklarla checkuser.aspx sayfasina POST request gonderiyor. Boylece sunucu, request'in geldigi IP adresine bakip farkli IP'lerden giris yapilip yapilmadigini kontrol edebiliyor. Ancak CheckUser() tarayici tarafindan calistirilan bir script oldugundan, ve biz yukaridaki yontem sayesinde tarayici kullanmadan (ornegin VLC uzerinden) kanal izleyebildigimizden, bu yontem paylasimin onune gecemiyor.
Ote yandan, yaptigim denemeler sonucu, verilen MMS linkinin de IP'ye bagli oldugu kanaatine vardim. Asagida da paylastigim script'imi baska bir sunucu uzerinde calistirip, elde ettigim linki kendi bilgisayarimda calistirmayi denedigimde link gecersiz hatasi aldim. Dolayisiyla, bu anlattigim yontemle alinan adres, ayni evde bulunan, ayni IP ile internete cikan bilgisayar icin gecerli sadece.
Bu sinirlama tabii ki hesap paylasiminin onune gecemiyor, zira ben linki elde ettikten sonra tarayicimi kapatip VLC ile izlemeye devam ederken, baska bir yerde oturan (farkli IP adresiyle internete giren) bir arkadasim ayni hesap bilgileri ile login olup kendine link alip aynen izlemeye baslayabilir.
Sonuc?
Su ana kadar yaptiklarimizin sonuclarini soyle ozetleyebiliriz:
- WebTV sitesinde yazilanin aksine, DRM kullanilmiyor,
- WebTV sitesinde yazilanin aksine, yayinlari izlemek icin Windows isletim sistemi ve Media Player programi sart degil,
- Ayni anda birden fazla bilgisayar uzerinden WebTV izlemek mumkun.
Bitti mi? Bitmedi
Bedava Digiturk
Kendi bilgisayarimda (Macbook) mac izleyebilmek icin yukarida yazdiklarimi denerken bir guvenlik aciginin farkina vardim. Daha onceki yazimda (0x02) da yaptigim gibi, oncelikle Digiturk'e acigi bildirerek kapatilmasini bekledim. Surec soyle gerceklesti:
- 28 mart 2010: Digiturk Web TV musteri hizmetlerine mail atip, durumu bildirip, IT departmanindan birinin benimle iletisime gecmesini istedim.
- 29 mart 2010: Digiturk'te calisan tanidik bulup direkt kendisine mail attim.
- 31 mart 2010: Digiturk'ten yetkililer benimle iletisime gecip acik hakkinda bilgi aldilar.
- 1 nisan 2010: Acik kapatildi.
Hemen ilgilenip acigi bu kadar cabuk kapattiklari icin kendilerini kutluyorum. Daha onceki yazimda bahsi gecen Isvecli sirketin acigi kapatmasi 2 ay kadar surmustu.
Neyse kendilerine attigim mail'den bir kismini buraya aktariyorum:
"[...] sorun surada ki, bu POST request'ini yapmak ve serverdan gecerli MMS linki almak icin, paket satin almis olmak gerekmiyor, herhangi bir uyelik ile login olmak yeterli. Ornegin benim suresi gecmis olan hesabim [email adresim]. Bu hesapla login oldugumda WatchTv2.aspx sitesinde kanal listesini goremedigim icin normalde izleyememem lazim, ama kanallarin id'sini bildigim icin, login olduktan sonra adminchannel.aspx'e o id ile POST gonderip MMS linki alabiliyorum. [...]"
Acik bir "access control" eksikliginden ibaret: adminchannel.aspx, gelen request'in kim tarafindan gonderildigini kontrol etmeden cevap gonderiyor. Bu durumda, siteye kayit formunu kullanarak 2 dakikada uye olmus biri ile, ayda 30 dolar veren bir uye arasinda fark kalmiyor.
Bu acigi kapatmak icin, adminchannel.aspx kodunda, POST requesti yollayan kullanicinin uyelik tipinin (Spor paketi, Aile paketi, paketsiz) kontrol edilmesi ve ona gore cevap verilmesi yeterli.
Bu acigin kapatilmasi belescileri onluyor, ama demin anlattigim, bir kac bilgisayardan ayni anda izleme sorununu cozmuyor. Bu sorunu engellemek icin, adminchannel.aspx kodunda, gecerli bir linkin verildigi IP adresi kayit edilip, tekrar request geldigi taktirde bu IP ile karsilastirilip, farkli IP oldugu taktirde (bir sure?) link verilmeyebilinir. Bu yontem hesap paylasimini engelleyebilir ama baska sorunlari beraberinde getirecektir. Devre arasinda komsuya gidip mac izlemek isteyen kullanicinin bunu yapmaya hakki oldugu halde yapamamasi gibi... Aslinda yapilmasi gereken, streaming hizmeti veren cogu sirketin yaptigi gibi, DRM lisanslari kullanmak. Yillar once ilk acildiginda bu yolu kullanan WebTV, sonra neden vazgecip yeni sisteme gecis yapti bilemiyorum.
Script
Digiturk'e guvenlik acigina proof-of-concept gostermek amaciyla yazdigim python scripti, WebTV'ye login olup istedigim kanalin linkini ekranda gosteriyor. Detayli anlatma geregi duymuyorum, ama bir sorunuz olursa cevaplayabilirim. Script "mechanize" modulunu kullaniyor, dolayisiyla scripti calistirabilmek icin mechanize'i bu linkten indirip kurmaniz lazim. Scripti calistirmak icin:
> python digiturk.py kullaniciadi parola
yazmak yeterli. Guvenlik acigi kapatilmadan once, kullaniciadi ve parola olarak girdiginiz hesabin paket satin almis olmasina gerek yoktu, ancak artik bu duzeltilmis durumda. Yine de scripti kullanarak, gecerli hesabiniz ile linux veya macos altinda kolayca yayinlara ulasabilirsiniz.
Scriptte kanallarin id'leri "hard-coded" olarak yazilmistir. Bunlar Digiturk tarafindan degistirildigi taktirde, WebTV'ye normal yoldan login olup, kaynak koduna bakarak kanallarin yeni id'lerini bulabilir ve scripti kendiniz guncelleyebilirsiniz. Ayrica istediginiz kanallari ekleyip cikarabilirsiniz.
Scripti buradan indirebilirisiniz.
April 10th, 2010 - 21:03
Harika bir yazı. Digiturk WebTV’yi Mac’te, anlattığınız yöntem sayesinde kullanabilmeye başladım. Uzun süredir aradığım bir yöntemdi. Teşekkür ediyorum…
June 10th, 2010 - 17:09
Super bir yazi, yeni eklenen kanallarin id’leri sifreli gibi, nasil bulabiliriz?
June 16th, 2010 - 14:57
Tesekkurler
Su anda paket satin almadigim icin kanal listesini goremiyorum ben, o yuzden yorum yapamayacagim. Login olduktan sonra kanal listesi sayfasina gelip sayfa kaynak kodunu bana mail atarsaniz bir bakabilirim, belki oradan anlasilir ne oldugu..
June 18th, 2010 - 17:37
Kaynak kod burda:
http://pastebin.com/DVr0YVVV
June 23rd, 2010 - 14:46
Koddan gordugum kadariyla, sifreli olmasinin bir onemi yok.. sonucta islemkutu fonksiyonu, o uzun “sifreyi” aynen yolluyor adminchannel.aspx sayfasina. ha kisa kanalid’yi yollamis ha uzun sifreyi, cevap ayni olacaktir. dolayisiyla yazida anlattigim yontem aynen gecerli. tabii test edemiyorum bunu hesabim olmadigi icin. lig baslasin teyit ederim
August 3rd, 2010 - 05:33
Vay bee..
buyuksun baba..!!! Chalishti, hem de super..!!
Tekrar teshekkur ederim..!!
August 20th, 2010 - 15:50
bilgi verdiğiniz için teşekkürler.