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

103 lines
15 KiB
Plaintext
Raw Normal View History

2026-05-29 17:53:25 +08:00
o
~Zj$Sã@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl
m Z ddl m Z m
Z
ddlmZmZmZmZmZddlmZddlmZmZddlmZdd lmZdd
lmZdd lm Z!m"Z#m$Z$Gd d
„d
ƒZ%Gdd„de%ƒZ&Gdd„dƒZ'dS)éN)ÚBytesIO)ÚPath)ÚdatetimeÚtimezone)ÚAnyÚDictÚListÚOptionalÚTuple)ÚAES)ÚHMACÚSHA256)ÚRsaKey)Úget_random_bytes)ÚPadding)ÚCdmÚDeviceÚPSSHc@seZdZdefdd„ZdS)Ú MSLObjectÚreturncCs d|jj›dtj|dd�›d�S)NÚ<Ú F©Ú unpicklableÚ>)Ú __class__Ú__name__Ú
jsonpickleÚencode)Úself©r ú8F:\Pari\PERSONAL-PROJECT\VT-STAGING\k\modules\msl_ios.pyÚ__repr__s zMSLObject.__repr__N)rÚ
__module__Ú __qualname__Ústrr"r r r r!rsrc @sFeZdZ     d deedeedeedeedef
dd„ZdS)
ÚMSLKeysNÚ
encryptionÚsignÚrsaÚ mastertokenÚ cdm_sessioncCs"||_||_||_||_||_dS©N)r'r(r)r*r+)rr'r(r)r*r+r r r!Ú__init__s

zMSLKeys.__init__)NNNNN) rr#r$r ÚbytesrÚdictrr-r r r r!r&s"úþýüûúr&c@sÄeZdZdZdZdddœZdZdZdZd Z d
Z
ddd dd ddd
œZ ddgZ dZ
 dhdejdedededeedef dd„Ze  didedejdededededeeeefded eed!eeeefd"efd#d$„ƒZe      %  & ' djd(ed)eed*eed+eed,eed-eed.eed/eeeefd0eed1eed2eed"eeeffd3d4„ƒZed"eeeeefffd5d6„ƒZe   7dkdeded8ed9eed:eed;eed"efd<d=„ƒZed>e de!ed?e!ed"ee fd@dA„ƒZ"   dld edBeeefdCeeefd9eed!eedDeeeefd"eeeefeffdEdF„Z#ed edCed"efdGdH„ƒZ$edCeeefd"efdIdJ„ƒZ%edCeeefd ed"eefdKdL„ƒZ&dmdCeeefd9eed"efdMdN„Z'dOe!eeefd"efdPdQ„Z(edRed"e!eeeffdSdT„ƒZ)dRed"eeeefeffdUdV„Z*edWe d"e fdXdY„ƒZ+edZed"e fd[d\„ƒZ,d]ed"efd^d_„Z-d`ed"e fdadb„Z.edmdee/d"eefdcdd„ƒZ0edeede/d"dfdfdg„ƒZ1dS)nÚMSL_IOSzIhttps://ios.prod.ftl.netflix.com/nq/iosplatform/pbo_license/~1.0.0/routerz9https://ios.prod.ftl.netflix.com/msl/playapi/ios/manifestÚdarwinz18.26.0)Ú ab_ui_verÚnrdapp_versionz0Netflix/5850 CFNetwork/3826.600.41 Darwin/24.6.0z+{"appView":"login","appState":"foreground"}zv3.12.55z3.0.5ézNetflix iOS 18.26.0Úios)ÚsdkÚplatformÚ applicationÚ uiversionÚ
uiPlatformÚ
clientVersionÚ
apkVersionúen-USÚenz iPhone15%2C3NÚwidevineÚsessionÚkeysÚ
message_idÚsenderÚ user_authÚdrmcCs(||_||_||_||_||_||_dSr,)r@rArCrDrBrE)rr@rArBrCrDrEr r r!r-Bs  
zMSL_IOS.__init__Ú
msl_keys_pathÚcdmÚ
cdm_deviceÚnew_mslÚcookiesÚendpointÚheadersrc  Csº|r|j |¡t|ƒ} t | ¡} | dur|s| S|dkr$td|›�ƒ‚|s*tdƒ‚t dtddƒ¡}
t ƒ} t
|t ƒsEt  
|¡}t  |¡}| ¡}|| _| |tjtjjd�¡}t |¡ d¡}d d
|id œ}tjd d
|idœt tj|
|d|d� d¡¡ d¡ddœdd�}|t t t |
ddddœ¡ d¡¡ d¡ddœ¡7}| p¦|j}|
p±|j d|ddd�}|j!|||dd�}|j"dkrÐt#d|j"›d |j$dd!…›�ƒ‚| %|j$¡}|sÜt#d"ƒ‚|d}d#|vrút &|d#¡ d¡}t '|¡}t#d$|›�ƒ‚d%|v�r t#d&t(|ƒdd!…›�ƒ‚t 't &|d%¡ d¡¡}|d'}|d(}| )| j|d)¡| *| j¡}tj+t &|d*¡|d+d,gd-�| _,tj+t &|d.¡|d/d0gd-�| _-|d1| _.t /| | ¡| S)2Nr?zUnsupported DRM mode: z.Widevine CDM is required for this iOS MSL flowrr4é4)Ú system_idúutf-8ÚWIDEVINEÚ
keyrequest)ÚschemeÚkeydataÚNONEÚidentity)rRÚauthdataT)rBrCÚ is_handshakeÚkeyrequestdataÚ)ÚentityauthdataÚ
headerdataÚ signatureFré)Ú messageidÚdataÚsequencenumberÚendofmsg©Úpayloadr\Ú mintCookiesúios.prod.ftl.netflix.comúen-US,en)Ú request_nameÚesnÚhostÚlanguageé)Úurlr_rLÚtimeoutéÈzKey exchange failed: HTTP riôz'Key exchange failed: empty MSL responseÚ errordatazKey exchange failed: r[z5Key exchange failed: missing headerdata in response: ÚkeyresponsedatarSÚcdmkeyresponseÚencryptionkeyidÚ AllowEncryptÚ AllowDecrypt)ÚkidrAÚ permissionsÚ hmackeyidÚ AllowSignÚAllowSignatureVerifyr*)0rJÚupdaterr0Úload_cache_dataÚ
ValueErrorÚrandomÚrandintÚpowr&Ú
isinstanceÚ WidevineCdmÚWidevineDeviceÚloadÚ from_deviceÚopenr+Úget_license_challengerÚnewÚSystemIdÚWidevineÚbase64Ú b64encodeÚdecoderrÚstandard_b64encodeÚgenerate_msg_headerÚjsonÚdumpsÚDEFAULT_HANDSHAKE_ENDPOINTÚbuild_request_headersÚpostÚ status_codeÚ RuntimeErrorÚtextÚparse_concatenated_jsonÚstandard_b64decodeÚloadsr%Ú
parse_licenseÚget_keysÚget_widevine_keyr'r(r*Ú
cache_keys)ÚclsrFr@rCrGrHrIrJrErKrLÚ
cache_pathÚmsl_keysrBÚdevicer+Ú challengeÚ
wv_requestrXr_Úhandshake_endpointÚhandshake_headersÚresÚparsedÚ key_exchangeÚ
decoded_errorÚ
error_jsonÚ header_jsonÚkey_response_dataÚkey_datarAr r r!Ú handshakeRsÈ 
 


þÿþÿþüúñîüÿø õÿ
ü
  

ÿ  ý ý
 zMSL_IOS.handshakeéÎ1rerfrgÚ
user_agentÚrefererÚ viewable_idÚ profile_guidrhÚexpiry_timeoutÚ
extra_headersrirjÚ device_modelc Csþid|pd“dd“d|ptj“d| pd“dd “d
d “d d
“dd“dd“dd“dtt dd¡ƒ“d|
p4tj“d|“dd“dd“dtj“dt|durJ|ndƒ“tjtjdd œ¥} |r\|| d!<|durft|ƒ| d"<|rl|| d#<|rv|| d$<|| d%<|r}|   |¡| S)&NÚHostreÚAcceptz*/*z
User-AgentzAccept-LanguagerfzAccept-Encodingz deflate,gzipz Content-Typezapplication/jsonÚ
Connectionz
keep-alivezContent-EncodingÚmsl_v1zX-Gibbon-Cache-Controlzno-cachezX-AllowCompressionÚtruezX-Client-Request-Idl;á lÿÇNÎZoz
X-DeviceModelzX-Netflix.Client.Request.NamezX-Netflix.Request.AttemptÚ1z!X-Netflix.Request.NonJson.Headersz X-Netflix.Request.Client.Contextz X-Netflix.request.expiry.timeoutr¯Ú0)zx-netflix.client.nrdjs.versionzx-netflix.client.netjs.versionz%x-netflix.client.last-interacted-daysÚRefererz+x-netflix.playback.main-content-viewable-idz%x-netflix.client.current-profile-guidzx-netflix.client.ftl.esnz
x-netflix.esn)
r0ÚDEFAULT_USER_AGENTr%r}r~ÚDEFAULT_DEVICE_MODELÚDEFAULT_REQUEST_CONTEXTÚDEFAULT_NRDJS_VERSIONÚDEFAULT_NETJS_VERSIONrz) rgr°r±r²r³rhr´rµrirjr¶rLr r r!r’Øsfÿþ
ýüûúùø ÷
ö õ
ô
óòñðïì 
zMSL_IOS.build_request_headerscCstjttjƒfSr,)r0ÚDEFAULT_MANIFEST_ENDPOINTr/ÚDEFAULT_MANIFEST_PARAMSr r r r!Úmanifest_request_defaults sz!MSL_IOS.manifest_request_defaultsÚGZIPrWÚ userauthdatarXÚ compressionc Csf|d||r|gngddgdgdœtt tj¡ ¡ƒ|dddœ}|r%||d <|r,|g|d
<tj|dd �S) NTr=r>ÚJSON)ÚcompressionalgosÚ languagesÚencoderformatsFÚNetflix)r^Ú renewabler®Ú capabilitiesÚ timestamprCÚ
nonreplayableÚ recipientrÈrXr)ÚintrÚnowrÚutcrÑrr)rBrCrWrÈrXrÉÚ header_datar r r!rŽ
s"
 ýô
zMSL_IOS.generate_msg_headerrurvcs`ddl‰‡fdd„|Dƒ}|D]}|jdkrqdd„t|ddƒp!gDƒ}||kr-|jSqdS)Nrcsh|] }ˆ dd|¡ ¡’qS)z(?<!^)(?=[A-Z])Ú_)ÚsubÚlower©Ú.0Úp©Úrer r!Ú <setcomp>-sz+MSL_IOS.get_widevine_key.<locals>.<setcomp>ÚOPERATOR_SESSIONcSsh|]}| ¡’qSr )rÚrÛr r r!rà1srv)rßÚtypeÚgetattrÚkey)rurArvÚnormalized_permsräÚ key_permsr rÞr!rœ*s

ÿzMSL_IOS.get_widevine_keyÚparamsÚapplication_dataÚproxycCsš| ||¡}| ||¡}||||ddœ} |r|| d<|jjdi| ¤Ž}
| |
j¡\} } d| vrIt t  | d 
d¡¡  d¡¡}
t  
td|
›�ƒ¡| | fS)Nrk)rlr_rçrLrmÚproxiesrorOz MSL response contains an error: r )Únormalize_application_dataÚcreate_messager@r“Ú
parse_messager–r�r™rŠr˜rrŒÚsysÚexitÚprint)rrKrçrèrÈrLréÚnormalized_application_dataÚmessageÚrequest_kwargsr¦ÚheaderÚ payload_datar©r r r!Ú send_message6s$ ûÿzMSL_IOS.send_messagecCsÒt|tƒs|S| |¡r|S| ||¡}|dur|St|jƒ}t| d¡tƒr.| |d¡| d|j¡||| dt|j ƒ¡| di¡dœ}dD]}| 
|d¡qH|  ¡D]\}}||vsa|dvrbqU|||<qU|S)NÚcommonÚversionrÌrç)rør÷rlrÌrç)ÚpathÚmethodÚrouterK>rúrKrÌrûrùrørçr÷) r€r/Ú_looks_like_wrapped_pbo_payloadÚ_extract_pbo_routeÚDEFAULT_PBO_COMMONÚgetrzÚDEFAULT_PBO_VERSIONÚlistÚDEFAULT_PBO_LANGUAGESÚpopÚitems)ržrKrèrûr÷ÚwrappedräÚvaluer r r!rëSs.

 
 
û
z"MSL_IOS.normalize_application_datacCs(d|vod|vod|vod|vod|vS)Nrør÷rlrÌrçr )rèr r r!rütsÿþýûz'MSL_IOS._looks_like_wrapped_pbo_payloadcCszdD]$}| |¡}t|tƒr| ¡sq| ¡}| d¡r |Sd|›�S| ¡}d|vr1dSd|vs9d|vr;dSdS)N)rlrùrûrúrKú/Úmanifestz /manifestÚ
pbo_tokensÚ
pbo_config)rÿr€r%ÚstripÚ
startswithrÚ)rèrKrärÚendpoint_lowerr r r!rý~s
 zMSL_IOS._extract_pbo_routec 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)Nr]F)rBrCrWrÈrO)r[r\r*)ú,ú:)Ú
separatorsrÇ)r`r^Úcompressionalgor_r4TrY)r`r^rar_rb)rBÚencryptrŽrCr�r�rŠr�rrŒr(rAr*Ú
gzip_compress) rrèrÈr[ròÚcompressed_application_dataÚ
payload_dictsÚ payload_dictÚ
payload_chunkr r r!rìŽsRüÿ ýú ÿþüüùþ
ûzMSL_IOS.create_messageÚpayload_chunksc Csd}|jjdus