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-37.pyc
T

93 lines
9.6 KiB
Plaintext
Raw Normal View History

2021-09-01 02:57:54 +05:00
B
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)ÚCdmcCst t¡|_i|_dS)N)ÚloggingÚ getLoggerÚ__name__ÚloggerÚsessions)Úself©rú'D:\#Tools\NETFLIX\pywidevine\cdm\cdm.pyÚ__init__s z Cdm.__init__NFc C|j d ||¡¡|jdkrVd ddtdƒDƒ¡}d}d}|||}| d ¡}n(|jd
krntdƒ} | }n|j d ¡d S|rœt |t
t fƒrœ|}
d
|_ n| 
|¡}
d|_ |
rÀt||
||ƒ} n|j d¡d S| |j|<|S)Nz(open_session(init_data_b64={}, device={}ZandroidÚcss|]}t d¡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_sessionc Ct ¡}y(|j d¡| t |¡dd¡Wn^tk
|j d¡y| t |¡dd¡}Wn tk
rˆ|j d¡dSXYnX|j d¡x"t  
|¡  ¡D]}|j |¡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|j d |¡¡||jkr8|j |¡|j d¡dS|j d |¡¡dSdS)Nzclose_session(session_id={})zcdm session closedrzsession {} not foundr#)rr$r%rÚpopÚinfo)rr2rrrÚ
close_sessionUs
  zCdm.close_sessioncCs0|j d ||¡¡||jkr.|j d¡dS|j|}t ¡}y| t  |¡¡Wn t
k
rt|j d¡YnXt  ¡}|j r¸|j d¡y| |j
¡Wt
k
r´dSXn6|j d¡y| t  |¡¡Wnt
k
dSX|j d¡x$t |¡ ¡D]}|j |¡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|j d |¡¡||jkr,|j d¡dS|j|}|jrFt ¡}nt ¡}t  ¡}t
j   |j
j¡sv|j d¡dSt|j
jdƒ:}y| | ¡¡}Wn tk
r¸|j d¡dSXWdQRX|j d¡|jsþtjj d¡|_|jjjj |j¡ntjj d¡|_|j|jjj_|jr2tj d ¡}n tj d
¡}||jjj_||jjj_tjj  d ¡|j_t!t" ƒ|j_#tj$ d ¡|j_$|j
j%r¢t& 'dd
¡|j_(|j)r
|j
j*r0|j d¡|j d¡t }t|j
j,dƒ<}y| | ¡¡} Wn"tk
r|j d¡dSXWdQRX|j- |¡|j d¡|j d¡x$t. /|¡ D]}
|j |
¡qXWt1dƒ} t1dƒ} t2 3| t2j4| ¡}
|
 5t6 7| d¡¡}t9 :|j;j<j=¡}t> 3|¡}| 5| ¡}t }|j;j<j@|_@|j;j<jA|_B||_C| |_D||_E|jjC |¡n|jjF |¡|j
jGr@t9 :t|j
jHƒ ¡¡}||_In|j d¡dS|j d¡tJ 3|j ¡}tK 3|¡ L|¡}||_M||_N|j d¡x&t. /|jN¡ D]}
|j |
¡q¦W|j d tO P| ¡¡¡| 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_REQUESTZOFFLINEZDEFAULTZNEWZCURRENTlz!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: {})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)rr2rDrVZ 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|j d ||¡¡||jkr.|j d¡dS|j|}|jsN|j d¡dSt ¡}y| t  
|¡¡Wn t k
|j d¡dSX||_ |j d¡x"t
 |¡ ¡D]}|j |¡q®W|j d¡t |j¡}| |j¡|_|jj ¡}d|d }d
|d } d |}
d | } d
| } d| }
d| }tj|jtd}| |
¡| ¡}tj|jtd}| | ¡| ¡}tj|jtd}| | ¡| ¡}tj|jtd}| |
¡| ¡}tj|jtd}| |¡| ¡}||}||}||jd<||jd<||jd<|j d¡tj|jdtd}| |j ¡¡|j d | ¡t  !|j"¡¡¡| ¡|j"krÎ|j #d¡t$ddƒ}| %t  
|¡¡WdQRXt$ddƒ}| %| ¡¡WdQRX|j #d¡|j d t&|jj'ƒ¡¡xà|jj'D]Ô}|j(r|j(}ntj)j*j+ ,|j-¡ .d¡}|j'}|j/}tj)j*j+ ,|j-¡}tj|jdtj0|d}| |¡}|dkr¢g} |j1}!x2|! D] \}"}#|#dkr||  3|"j4¡q|Wng} |j5 3t'||t6 7|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