blomqvist
blomqvist copied to clipboard
Problem z wtyczka canal plus vod
Witam po przelogowaniu we wtyczce cały czas wyskakuje błąd logowania i nie pokazuje kanałów. Wstawiam logi https://paste.kodi.tv/zafosirefi
Potwierdzam, u mnie ten sam problem.
Chyba @hevet poprawiał błąd logowania https://github.com/mbebe/blomqvist/issues/852#issuecomment-1336124593
Patrzyłem na ta wtyczkę i dalej jest problem czekamy
Chyba @hevet poprawiał błąd logowania https://github.com/mbebe/blomqvist/issues/852#issuecomment-1336124593
@hevet poprawił logowanie w v1.7.5.8. https://github.com/mbebe/blomqvist/issues/852#issuecomment-1322014255 Aktualny problem z autentykacją dotyczy najnowszej wersji wtyczki 1.7.5.9.
@hevet, @mtr81, czy możecie pomóc? Najlepiej uwzględniając wersję od @mtr81 z poprawkami "Strony głównej" i EPG na kanałach TV z dn. 04.12.2022. https://github.com/mbebe/blomqvist/issues/850#issuecomment-1336467405
To trzeba chyba napisać do BOK Canal+ by tak często zmian nie robili :P
Wersja https://github.com/mbebe/blomqvist/issues/852#issuecomment-1322014255 jest identyczna z wersja 1.7.5.9 w repo, wiec logowanie jest tez takie samo.
Wersja #852 (comment) jest identyczna z wersja 1.7.5.9 w repo, wiec logowanie jest tez takie samo.
I właśnie w tej wersji 1.7.5.9 z repo @mbebe nie działa obecnie autentykacja. Prosiłem tylko, aby przy naprawie wtyczki wziąć pod uwagę poprawki od @mtr81 z tej wersji https://github.com/mbebe/blomqvist/issues/850#issuecomment-1336467405
U mnie taki sam problem jak u autora tematu - błąd logowania i nie pokazuje kanałów. Wtyczka zainstalowana na "czystym" Kodi 19.4 na Android TV.
Z tego co wiem od @mtr81 problem z logowaniem jest dość złożony by go naprawić.
Okej, więc nie pozostaje nic innego jak poczekać, aż ktoś wpadnie na jakieś rozwiązanie tego problemu. Dzięki chłopaki za dobrą robotę tak przy okazji:)
Jak najbardziej czapki z głów, miejmy nadzieję że problem niedługo zostanie rozwiązany. Bądź co bądź c+ broni się rękami i nogami aby to nie działało :( i żeby korzystać z oficjalnych aplikacji
Cześć chłopaki udało się rozwiązać problem?czy jeszcze walczycie?Pozdrawiam serdecznie
Nie ma na razie prostego rozwiązania na naprawę logowania.
Oki dzięki za info pozdrawiam.A można zobaczyć na wtyczkę sportowa?bo wideo działa a live wyskakuje błąd odtwarzania.Logi dziś wstawię pozdrawiam
Sprawdzcie czy znow nie trzeba poprawic regexa do autentykacji, jesli dobrze pamietam to go poprawialem ostatnim razem po zmianach na stronie c+. Niemam jak sam sprawdzic bo niemam konta u nich.
linia 797 w main.py
authresponse = re.findall('window\.__data\s*=\s*({.*?});.*?window.app_config',response.text,re.DOTALL)
Jak wysylacie logi to nalezy wlaczyc debug logging w Kodi bo inaczej nic nie widac jakie bledy sa.
Nie. Nie chodzi o to. W sumie to wiadomo o co, tylko nie wiadomo jak to zautomatyzować.
@mtr81 jaki jest dokladnie problem, moze bede wstanie pomoc?
Trzeba podać ciasteczko, które musi przejść autoryzację. Autoryzacja odbywa się poprzez wysłanie na serwer POST-em danych, które dostarcza pewien wredny skrypt. Przedmiotowy skrypt okresowo się zmienia.
Problem jest w cookie _abck https://www.zenrows.com/blog/bypass-akamai#akamais-sensor-data
tam jest wysylany podwojnie fingerprint i po drugim razie , jesli jest true _abck jest jakby otwarte - zmiana jest m.in. z
.....5604A3~-1~YAAQ.....
.......AA2325~0~YAAQ......
jesli jest w _abck ~0~
tzn., ze ciastko jest poprawne i je mozna wyslac podczas logowania.
:-/
Generalnie, tak na szybko, to najlepiej skopiować w/w ciastko z przeglądarki do wtyczki (koniecznie sprawdzając czy skrypt odpowiedzialny za zamieszanie odpali się na www). Potem zalogować się we wtyczce i uwalić ponowne przelogowanie przy wejściu do wtyczki,żeby nie sypało błędem. Zrobiłem tak z dwa tygodnie temu. Od tego momentu wtyczka działa.
@mtr81 Podpowiesz, w jakie miejsce w strukturze plików wtyczki powinienem wkopiować to ciastko i jak wyłączyć przelogowanie?
Takie rzeczy to tylko na priv. Nie chcę tu mieszać, bo nie każdy to ogarnie.
Delete
Jak można prosić tak troszkę jaśniej było by fajnie.Pozdrawiam
Takie rzeczy to tylko na priv. Nie chcę tu mieszać, bo nie każdy to ogarnie.
@mtr81 To ja też poproszę o pomoc: marcin.szczepanski1995 (at) gmail.com
Problem jest w cookie _abck https://www.zenrows.com/blog/bypass-akamai#akamais-sensor-data
tam jest wysylany podwojnie fingerprint i po drugim razie , jesli jest true _abck jest jakby otwarte - zmiana jest m.in. z
.....5604A3~-1~YAAQ.....
.......AA2325~0~YAAQ......
jesli jest w _abck~0~
tzn., ze ciastko jest poprawne i je mozna wyslac podczas logowania. :-/
Tak, zgadza sie. jedynie _abck nalezy zweryfikowac za pomoca VAC i wtedy pojawia sie response. Wyglada na to ze kod ponizej dziala, tylko jak wydostac sensor data?
EDIT: Ok zeby wydostac sensor data trzeba rozwiazac Akamai Javascript challenge, moze byc trudno.
import requests
import re
sess = requests.Session()
headers = {
'authority': 'logowanie.pl.canalplus.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language': 'sv',
'dnt': '1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Linux; Android 11; sdk_gphone_x86 Build/RSR1.201013.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 pass_sso',
}
response = sess.get(
'https://logowanie.pl.canalplus.com/login',
headers=headers,
verify=False
)
cookies = response.cookies.get_dict()
#for k, v in cookies.items():
#print(f'{k}: {v}\n')
vac_regex = re.compile(r'<script type="text/javascript" src="([^"]+)')
r = vac_regex.search(response.text)
vac = r.group(1) if r else ''
akamai_regex = re.compile(r'<script type="text/javascript" src="(.*?)" defer></script>')
r = akamai_regex.search(response.text)
akamai = r.group(1) if r else ''
execution_regex = re.compile(r'execution" value="([^"]+)')
r = execution_regex.search(response.text)
execution = r.group(1) if r else ''
#print(f'execution: {execution}')
#print(f'akamai: {akamai}')
#print(f'vac: {vac}')
if execution:
cookies = {
'LAST_LOGIN_PAGE_SERVICE_ID': cookies['LAST_LOGIN_PAGE_SERVICE_ID'],
'canal+app': cookies['canal+app'],
'TS016c93a3': cookies['TS016c93a3'],
'bm_sz': cookies['bm_sz'],
'dcsource': 'direct',
'dcmedium': 'none',
'dcid': 'none',
'dctraffic': 'direct / none',
'_abck': cookies['_abck'],
'ak_bmsc': cookies['ak_bmsc'],
}
headers = {
'authority': 'logowanie.pl.canalplus.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language': 'sv',
'dnt': '1',
'origin': 'https://logowanie.pl.canalplus.com',
'referer': 'https://logowanie.pl.canalplus.com/login',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Linux; Android 11; sdk_gphone_x86 Build/RSR1.201013.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 pass_sso',
}
vac_response = sess.get(
f'https://logowanie.pl.canalplus.com{vac}',
cookies=cookies,
headers=headers,
verify=False
)
akamai_response = sess.get(
f'{akamai}',
cookies=cookies,
headers=headers,
verify=False
)
### Wydaje mi sie ze to JS z akamai_response nalezy rozwiazac i wprowadzic jako sensor_data fingerprint.
data = '{"sensor_data":"xxx"}'
vac_post_response = sess.post(
f'https://logowanie.pl.canalplus.com{vac}',
cookies=cookies,
headers=headers,
data=data,
verify=False
)
cookies = {
'LAST_LOGIN_PAGE_SERVICE_ID': cookies['LAST_LOGIN_PAGE_SERVICE_ID'],
'canal+app': cookies['canal+app'],
'TS016c93a3': cookies['TS016c93a3'],
'bm_sz': cookies['bm_sz'],
'dcsource': 'direct',
'dcmedium': 'none',
'dcid': 'none',
'dctraffic': 'direct / none',
'_abck': vac_post_response.cookies.get_dict()['_abck'],
'ak_bmsc': cookies['ak_bmsc'],
}
data = {
'username': 'xxx',
'password': 'xxx',
'execution': execution,
'_eventId': 'submit',
'geolocation': '',
}
response = sess.post('https://logowanie.pl.canalplus.com/login', cookies=cookies, headers=headers, data=data, verify=False)
print(response)
@Mariusz89B zrobiłem kilka eksperymentów z użyciem adblocka i czystymi ciasteczkami.
- Jestem w stanie zalogować się (w przeglądarce) jeśli zablokuje dostęp do skryptów
akamai
(nawet nie są pobierane). - Zablokowanie dostępu do skryptu vac powoduje, że logowanie się nie udaje (błąd
access denied
)
Flow wygląda mniej więcej tak:
- GET login --> w odpowiedzi dostajemy cookies
_abck
- GET vac script
- GET akamai --> zablokowane przez adblocka
- POST vac script z sensor_data --> w odpoweidzi nowy cookies
_abck
- Klikając login wszystko działa.
POST leci ze skryptu VAC pobrany w pkt 2, a przynajmniej tak to wygląda w stack trace przy żądaniu POST.
@SBPrime jak generujesz wartość sensor_data?
Nie generowałem nic to był prosty test z użyciem firefox'a. Przeglądarka ściągnęła skrypt vac, potem go odpaliła a on zrobił posta z sensor_data. Mam zamiar przelecieć ten skrypt przy użyciu js2py, może coś ciekawego z tego wyniknie. Martwi mnie to, że skrypt sam w sobie robi posta :(
Pytałem, bo myślałem, że udało ci się przełożyć ten skrypt na PY3...