Files
NF-MSL/modules/__pycache__/msl_web.cpython-310.pyc
T

90 lines
14 KiB
Plaintext
Raw Normal View History

2026-05-29 17:53:25 +08:00
o
“ZjFã@s$ddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z m
Z
ddl m Z ddl
mZddlmZddlmZmZmZmZmZmZddlmZdd lmZmZdd
lmZmZdd l m!Z!dd l"m#Z#dd
l$m%Z%ddl&m'Z'Gdd„dƒZ(Gdd„de(ƒZ)Gdd„dƒZ*dS)é)Ú annotationsN)ÚdatetimeÚtimezone)Ú CookieJar)ÚBytesIO)ÚPath)ÚAnyÚDictÚIterableÚListÚOptionalÚTuple)Ú OrderedDict)ÚAESÚ
PKCS1_OAEP)ÚHMACÚSHA256)ÚRSA)ÚRsaKey)Úget_random_bytes)ÚPaddingc@seZdZddd„ZdS)Ú MSLObjectÚreturnÚstrcCs d|jj›dtj|dd�›d�S)NÚ<Ú F©Ú unpicklableÚ>)Ú __class__Ú__name__Ú
jsonpickleÚencode)Úself©r$ú8F:\Pari\PERSONAL-PROJECT\VT-STAGING\k\modules\msl_web.pyÚ__repr__s zMSLObject.__repr__N)rr)r Ú
__module__Ú __qualname__r&r$r$r$r%rsrc@s eZdZ    d d d d
„ZdS)
ÚMSLKeysNÚ
encryptionúOptional[bytes]ÚsignÚrsaúOptional[RsaKey]Ú mastertokenúOptional[dict]cCs||_||_||_||_dS©N)r*r,r-r/)r#r*r,r-r/r$r$r%Ú__init__s
zMSLKeys.__init__)NNNN)r*r+r,r+r-r.r/r0)r r'r(r2r$r$r$r%r)s ûr)c@sLeZdZdZdZdZdZdZ dkdldd„Ze    dmdndd„ƒZ
e      dodpd+d,„ƒZ e   -dqdrd2d3„ƒZ
 dsdtd8d9„Zdkdud:d;„Zdvd=d>„ZdwdAdB„ZdxdDdE„ZdydHdI„Ze dzdKdL„ƒZe d{dNdO„ƒZe d|dQdR„ƒZe dkd}dUdV„ƒZe d~dZd[„ƒZe dd^d_„ƒZe d€d`da„ƒZe d�dcdd„ƒZe d‚dedf„ƒZe dƒdidj„ƒZdS)„ÚMSL_WEBzBhttps://www.netflix.com/nq/msl_v1/nrdjs/pbo_tokens/%5E1.0.0/routerzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36z{"appstate":"foreground"}z v3.11.512z3.0.5NÚsessionúrequests.SessionÚkeysr)Ú
message_idÚintÚsenderrÚ user_authr0cCs"||_||_||_||_||_dSr1)r4r6r9r:r7)r#r4r6r7r9r:r$r$r%r25s

zMSL_WEB.__init__FÚ
msl_keys_pathú
str | PathÚnew_mslÚboolÚcookiesúOptional[Dict[str, str]]Úendpointú
Optional[str]Úheadersrc CsX|r|j |¡t|ƒ}| |¡} | dur|s| St dd¡}
tƒ} t d¡| _ dddt
  | j   ¡j
dd�¡ d ¡d
œd œ} tjd d
|idœt
 |j|
|d| d� d ¡¡ d ¡ddœdd�}
|
tjt
 t |
ddddœ¡ d ¡¡ d ¡ddœdd�7}
|j|p�|j|
|p‰|jdd�dd�}|jdkr¢td|j›d |jdd!…›�ƒ‚| |j¡}|s®td"ƒ‚|d}d#|vrÇt
 |d#¡ d ¡}td$|›�ƒ‚d%|vrØtd&t|ƒdd!…›�ƒ‚t t
 |d%¡ d ¡¡}|d'd(}t  | j ¡}| !t | "t
 |d)¡¡ d ¡¡d*¡| _#| !t | "t
 |d+¡¡ d ¡¡d*¡| _$|d'd,| _%| &| |¡| S)-Nrl€iÚASYMMETRIC_WRAPPEDÚ rsaKeypairIdÚJWK_RSAÚDER)Úformatúutf-8)Ú keypairidÚ mechanismÚ publickey)ÚschemeÚkeydataÚNONEÚidentity)rMÚauthdataT)r7r9Ú is_handshakeÚkeyrequestdataÚ)ÚentityauthdataÚ
headerdataÚ signatureFré)Ú messageidÚdataÚsequencenumberÚendofmsg©ÚpayloadrW©ú,ú:©Ú
separatorsÚ aleProvision)Ú request_nameé)ÚurlrZrCÚtimeoutéÈzKey exchange failed: HTTP riôz'Key exchange failed: empty MSL responseÚ errordatazKey exchange failed: rVz)Key exchange failed: missing headerdata: ÚkeyresponsedatarNÚ
encryptionkeyÚkÚhmackeyr/)'r?ÚupdaterÚload_cache_dataÚrandomÚrandintr)rÚgenerater-Úbase64Ú b64encoderLÚ
export_keyÚdecoder!r"Ústandard_b64encodeÚgenerate_msg_headerÚjsonÚdumpsÚpostÚDEFAULT_HANDSHAKE_ENDPOINTÚbuild_request_headersÚ status_codeÚ RuntimeErrorÚtextÚparse_concatenated_jsonÚstandard_b64decoderÚloadsrÚnewÚbase64key_decodeÚdecryptr*r,r/Ú
cache_keys)Úclsr;r4r9r=r?rArCÚ
cache_pathÚcachedr7r6rSZenvelopeÚresponseÚparsedÚheaderÚ
decoded_errorÚ header_jsonÚkey_dataÚ
cipher_rsar$r$r%Ú handshakeCs¢ 
   ÿûþ þüúóðüÿø õ
òü
    "ÿ"ÿ zMSL_WEB.handshakeéÎ1reÚ
user_agentÚrefererÚ viewable_idú
Optional[int]Ú profile_guidÚesnÚexpiry_timeoutÚ
extra_headersúDict[str, str]c
Csˆ|ptjdddd|ddtjtjtjddœ }|durt|ƒ|d <|r%||d
<|dur/t|ƒ|d <|r5||d <|r;||d
<|rB| |¡|S)Nz*/*zapplication/jsonÚmsl_v1zhttps://www.netflix.comÚ1ÚtrueÚ0) z
User-AgentÚAcceptz Content-TypezContent-EncodingÚOriginzX-Netflix.Client.Request.NamezX-Netflix.request.attemptz!X-Netflix.Request.NonJson.Headersz X-Netflix.Request.Client.Contextzx-netflix.client.nrdjs.versionzx-netflix.client.netjs.versionz%x-netflix.client.last-interacted-daysz x-netflix.request.expiry.timeoutÚRefererz+x-netflix.playback.main-content-viewable-idz%x-netflix.client.current-profile-guidzx-netflix.client.ftl.esn)r3ÚDEFAULT_USER_AGENTÚDEFAULT_REQUEST_CONTEXTÚDEFAULT_NRDJS_VERSIONÚDEFAULT_NETJS_VERSIONrro) rer•r–r—r™ršr›rœrCr$r$r%r~«s4 ô  
zMSL_WEB.build_request_headersÚGZIPrRÚ userauthdatarSÚ compressionc Cs`|d||r|gngggdœtt tj¡ ¡ƒ|dddœ}|r"||d<|r)|g|d<tj|dd�S) NT)ÚcompressionalgosÚ languagesÚencoderformatsFÚNetflix)rYÚ renewabler“Ú capabilitiesÚ timestampr9Ú
nonreplayableÚ recipientrªrSr)r8rÚnowrÚutcr²r!r")r7r9rRrªrSr«Ú header_datar$r$r%ryÒs"
 ýô
zMSL_WEB.generate_msg_headerÚparamsÚapplication_datarúTuple[Dict[str, Any], Any]c Csr| ||¡}|jj||||dd�}| ¡| |j¡\}} d|vr5t t  |d¡ 
d¡¡}
t d|
›�ƒ‚|| fS)Nrf)rgr¸rZrCrhrjrIz MSL response contains an error: ) Úcreate_messager4r|Úraise_for_statusÚ
parse_messager�rzr„rtrƒrwr€) r#rAr¸r¹rªrCÚmessagerŒrŽr^r�r$r$r%Ú send_messageïs zMSL_WEB.send_messagec Csú|jd7_| |j|j|jd|d�¡}tjt | d¡¡  d¡| 
|¡  d¡|j j dœdd�}| 
tj|dd� d¡¡  d¡}d|jd|d œd
|jd d d
œg}|D]'}| tj|dd�¡}|tjt | d¡¡  d¡| 
|¡  d¡dœdd�7}qS|S)NrXF)r7r9rRrªrI)rVrWr/r_rbr©)r[rYÚcompressionalgorZéTrT)r[rYr\rZr])r7Úencryptryr9rzr{rtrxr"rwr,r6r/Ú
gzip_compress) r#r¹rªrVr¾Zcompressed_dataZpayloadsr^Zencrypted_chunkr$r$r%r»sJüÿ ýú üüùþ
ûzMSL_WEB.create_messager¾cCsH| |¡}|d}t|ƒdkr|dd…ng}|r| |¡ni}||fS©NrrX)r‚ÚlenÚdecrypt_payload_chunks)r#r¾r�rŽÚpayload_chunksr^r$r$r%r½/s
zMSL_WEB.parse_messagerÇúList[Dict[str, str]]c Csâ|jjstdƒ‚d}|D]S}t t |d¡ d¡¡}tj |jjtj
t |d¡d�  t |d¡¡}t  
|d¡}t | d¡¡}t |d ¡}| d
¡d krXt |dtj¡}|| d¡7}q t |¡}d |vrkdS| d
|¡S)NúEncryption key is not availablerTr^rIÚiv)ÚkeyÚmoderÊÚ
ciphertextérZrÀr©ÚerrorÚresult)r6r*Ú
ValueErrorrzr„rtrƒrwrr…ÚMODE_CBCr‡rÚunpadÚgetÚzlibÚ
decompressÚ MAX_WBITS) r#rÇÚraw_dataÚ
payload_chunkZ
chunk_jsonÚ decryptedÚ payload_jsonÚ payload_datarZr$r$r%rÆ6s, ýü 
 zMSL_WEB.decrypt_payload_chunksÚ plaintextcCs®|jjstdƒ‚|jjstdƒ‚tdƒ}t t |jjd¡  d¡¡}t
  |jjt
j |¡ 
t | d¡d¡¡}tjt |¡  d¡|j›d|d›�dt |¡  d¡d œd
d �S) NrÉzMaster token is not availablerÎÚ tokendatarIÚ_r[zAA==)rÍÚkeyidÚsha256rÊr_rb)r6r*rÑr/rrzr„rtrƒrwrr…rÒrÂrÚpadr"r{rxr9)r#rÝrÊrÞrÍr$r$r%rÂOs(üùzMSL_WEB.encryptr�ÚbytescCs2|jjstdƒ‚t t |jj| d¡t¡  ¡¡S)NzSign key is not availablerI)
r6r,rÑrtrxrr…r"rÚdigest)r#r�r$r$r%r,bs"z MSL_WEB.signúList[Dict[str, Any]]cCs�t ¡}g}d}|t|ƒkrF|t|ƒkr*|| ¡r*|d7}|t|ƒkr*|| ¡s|t|ƒkr3 |S| ||¡\}}| |¡|t|ƒks|SrÄ)rzÚ JSONDecoderrÅÚisspaceÚ
raw_decodeÚappend)r¾ÚdecoderÚitemsÚindexÚitemr$r$r%r‚gs ÿ þ