This repository has been archived on 2024-07-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Netflix-videos-downloader/pywidevine/cdm/__pycache__/cdm.cpython-36.pyc
T

92 lines
9.7 KiB
Plaintext
Raw Normal View History

2021-09-01 02:57:54 +05:00
3
1jì^c?ã@ddlZddlZddlZddlZddlmZddlmZddlm Z
ddl m Z ddl
mZddlmZddlmZdd lmZmZdd
lmZmZmZmZdd lmZdd lmZdd
lmZddl Z GdddƒZ!dS)éN)Ú DecodeError)Ú text_format)Ú
wv_proto2_pb2)ÚSession)ÚKey)Úget_random_bytes)Úrandom)Ú
PKCS1_OAEPÚAES)ÚCMACÚSHA256ÚHMACÚSHA1)ÚRSA)Úpss)ÚPaddingc@sNeZdZddZdddZddZd d
Zd d Zd
dZddZ ddZ
dS)ÚCdmcCstjtƒ|_i|_dS)N)ÚloggingÚ getLoggerÚ__name__ÚloggerÚsessions)Úself©rú[C:\Users\Ahmed\Documents\MEGAsync Downloads\wvripper\wvripper\NETFLIX\pywidevine\cdm\cdm.pyÚ__init__s z Cdm.__init__NFc C|jjdj||ƒƒ|jdkrVdjddtdƒDƒƒ}d}d}|||}|jd ƒ}n(|jd
krntdƒ} | }n|jjd ƒd S|rœt |t
t fƒrœ|}
d
|_ n|j
|ƒ}
d|_ |
rÀt||
||ƒ} n|jjdƒd S| |j|<|S)Nz(open_session(init_data_b64={}, device={}ZandroidÚcss|]}tjdƒVqdS)ZABCDEF0123456789N)rÚchoice)Ú.0Ú_rrrú <genexpr>#sz#Cdm.open_session.<locals>.<genexpr>éZ01Z00000000000000ÚasciiZchromezdevice type is unusableéTFzunable to parse init data)rÚdebugÚformatZsession_id_typeÚjoinÚrangeÚencoderÚerrorÚ
isinstanceÚbytesÚ bytearrayÚraw_psshÚ_parse_init_datarr) rÚ
init_data_b64ZdeviceZ
raw_init_dataÚofflineZ
rand_asciiZcounterÚrestÚ
session_idZ
rand_bytesÚ init_dataZ new_sessionrrrÚ open_sessions0
  
 
 
zCdm.open_sessioncCtjƒ}y(|jjdƒ|jtj|ƒddƒWn^tk
|jjdƒy|jtj|ƒddƒ}Wn tk
rˆ|jjdƒdSXYnX|jjdƒx"t j
|ƒj ƒD]}|jj|ƒq¬W|S)Nz"trying to parse init_data directlyé z:unable to parse as-is, trying with removed pssh box headerz-unable to parse, unsupported init data formatz
init_data:) Ú wv_proto2ZWidevineCencHeaderrr$ÚParseFromStringÚbase64Ú b64decoderr)rÚMessageToStringÚ
splitlines)rr/Zparsed_init_dataZid_bytesÚlinerrrr.@s"    zCdm._parse_init_datacCsR|jjdj|ƒƒ||jkr8|jj|ƒ|jjdƒdS|jjdj|ƒƒdSdS)Nzclose_session(session_id={})zcdm session closedrzsession {} not foundr#)rr$r%rÚpopÚinfo)rr2rrrÚ
close_sessionUs
  zCdm.close_sessioncCs0|jjdj||ƒƒ||jkr.|jjdƒdS|j|}tjƒ}y|jtj |ƒƒWn t
k
rt|jjdƒYnXtj ƒ}|j r¸|jjdƒy|j|j
ƒWt
k
r´dSXn6|jjdƒy|jtj |ƒƒWnt
k
dSX|jjdƒx$tj|ƒjƒD]}|jj|ƒq
W||_d|_d S)
Nz/set_service_certificate(session_id={}, cert={})zsession id doesn't existr#z%failed to parse cert as SignedMessagez&service cert provided as signedmessagez0service cert provided as signeddevicecertificatezservice certificate:Tr)rr$r%rr)r6Z
SignedMessager7r8r9rZSignedDeviceCertificateÚTypeÚMsgrr:r;Úservice_certificateÚ privacy_mode)rr2Zcert_b64ÚsessionÚmessagerBr<rrrÚset_service_certificate`s<

 
   zCdm.set_service_certificatec"C|jjdj|ƒƒ||jkr,|jjdƒdS|j|}|jrFtjƒ}ntjƒ}tj ƒ}t
j j |j
jƒsv|jjdƒdSt|j
jdƒ:}y|j|jƒƒ}Wn tk
r¸|jjdƒdSXWdQRX|jjdƒ|jsþtjjjdƒ|_|jjjjj|jƒntjjjdƒ|_|j|jjj_|jr2tjjd ƒ}n tjjd
ƒ}||jjj_||jjj_tjj jd ƒ|j_t!t"j"ƒƒ|j_#tj$jd ƒ|j_$|j
j%r¢t&j'ddƒ|j_(|j)r
|j
j*r0|jjdƒ|jjdƒtj+ƒ}t|j
j,dƒ<}y|j|jƒƒ} Wn"tk
r|jjdƒdSXWdQRX|j-j|ƒ|jjdƒ|jjdƒx$t.j/|ƒj0ƒD]}
|jj|
ƒqXWt1dƒ} t1dƒ} t2j3| t2j4| ƒ}
|
j5t6j7|j8ƒdƒƒ}t9j:|j;j<j=ƒ}t>j3|ƒ}|j5| ƒ}tj?ƒ}|j;j<j@|_@|j;j<jA|_B||_C| |_D||_E|jjCj|ƒn|jjFj|ƒ|j
jGr@t9j:t|j
jHƒjƒƒ}||_In|jjdƒdS|jjdƒtJj3|jj8ƒƒ}tKj3|ƒjL|ƒ}||_M||_N|jjdƒx&t.j/|jNƒj0ƒD]}
|jj|
ƒq¦W|jjdjtOjP|j8ƒƒƒƒ|j8ƒS)Nz"get_license_request(session_id={})zsession ID does not existr#z+no client ID blob available for this deviceÚrbz%client id failed to parse as protobufzbuilding license requestZLICENSE_REQUESTZOFFLINEZDEFAULTZNEWZCURRENTééz!vmp required, adding to client_idzreading vmp hashesz&vmp hashes failed to parse as protobufz?privacy mode & service certificate loaded, encrypting client idzunencrypted client id:r!z4need device private key, other methods unimplementedzsigning license requestzlicense request:zlicense request b64: {}l)Qrr$r%rr)r-r6ZSignedLicenseRequestRawZSignedLicenseRequestZClientIdentificationÚosÚpathÚexistsZ
device_configZdevice_client_id_blob_filenameÚopenr7ÚreadrZ MessageTypeZValuer@rAZ ContentIdZCencIdZPsshZCopyFromr3r0Z LicenseTypeZ RequestIdZLicenseRequestZ RequestTypeÚintÚtimeZ RequestTimeZProtocolVersionZsend_key_control_noncerÚ randrangeZKeyControlNoncerCZvmpZ
FileHashesZdevice_vmp_blob_filenameZ _FileHashesrr:r;rr
ÚnewÚMODE_CBCZencryptrZpadÚSerializeToStringrZ importKeyrBZ_DeviceCertificateZ PublicKeyr ZEncryptedClientIdentificationZ ServiceIdZ SerialNumberZServiceCertificateSerialNumberZEncryptedClientIdZEncryptedClientIdIvZEncryptedPrivacyKeyZClientIdZprivate_key_availableZdevice_private_key_filenameÚ
device_keyrrÚsignÚ SignatureÚlicense_requestr8Z b64encode)rr2rDrXZ client_idÚfZ cid_bytesZ license_typeZ
vmp_hashesZ vmp_bytesr<Z cid_aes_keyZcid_ivZ
cid_cipherZencrypted_client_idZservice_public_keyZservice_cipherZencrypted_cid_keyZencrypted_client_id_protoÚkeyÚhashZ signaturerrrÚget_license_request
 

      

      

  
   zCdm.get_license_requestc$C|jjdj||ƒƒ||jkr.|jjdƒdS|j|}|jsN|jjdƒdStjƒ}y|jt j
|ƒƒWn t k
|jjdƒdSX||_ |jjdƒx"t
j|ƒjƒD]}|jj|ƒq®W|jjdƒtj|jƒ}|j|jƒ|_|jjjƒ}d|d }d
|d } d |}
d | } d
| } d| }
d| }tj|jtd}|j|
ƒ|jƒ}tj|jtd}|j| ƒ|jƒ}tj|jtd}|j| ƒ|jƒ}tj|jtd}|j|
ƒ|jƒ}tj|jtd}|j|ƒ|jƒ}||}||}||jd<||jd<||jd<|jjdƒtj|jdtd}|j|jjƒƒ|jjdj|jƒt j!|j"ƒƒƒ|jƒ|j"krÎ|jj#dƒt$ddƒ}|j%t j
|ƒƒWdQRXt$ddƒ}|j%|jƒƒWdQRX|jj#dƒ|jjdjt&|jj'ƒƒƒxà|jj'D]Ô}|j(r|j(}ntj)j*j+j,|j-ƒj.dƒ}|j'}|j/}tj)j*j+j,|j-ƒ}tj|jdtj0|d}|j|ƒ}|dkr¢g} |j1}!x2|!j2ƒD] \}"}#|#dkr|| j3|"j4ƒq|Wng} |j5j3t'||t6j7|d ƒ| ƒƒqòWd!S)"Nz.provide_license(session_id={}, license_b64={})zsession does not existr#z!generate a license request first!z)unable to parse license - check protobufszlicense:zderiving keys from session keys ENCRYPTIONs€sAUTHENTICATIONsóóóó)Z ciphermodÚencZauth_1Zauth_2zverifying license signature)Z digestmodz!calculated sig: {} actual sig: {}zElicense signature doesn't match - writing bin so they can be debuggedzoriginal_lic.binÚwbzparsed_lic.binzcontinuing anywayz
key count: {}zutf-8)ÚivZOPERATOR_SESSIONr!r)8rr$r%rr)rXr6Z