o
    ŌjO                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZ d dlZG dd dZdS )    N)Optional)urlparse)requests)AESGCMc                   @   sp  e Zd ZU i Zeed< dZedZ	e
e	ZdZdZdZddd	d
ddZdZdZddddddddddddddddgZd]dedededed df
d!d"Zd^d#ed$ejd efd%d&Zd ejfd'd(Zd efd)d*Zd^d+ed,ed efd-d.Zd/ed efd0d1Zd2ed efd3d4Zd efd5d6Zd7ed efd8d9Zd efd:d;Z e!d<ed=e"d e#fd>d?Z$d@edAed=e"d efdBdCZ%d@edAed=e"d efdDdEZ&d@edAed=e"d efdFdGZ'e!d e(fdHdIZ)e!d#ed e*e fdJdKZ+e!d#ed efdLdMZ,e!d#ed e*e fdNdOZ-e!dPed efdQdRZ.e!dSed efdTdUZ/dVed efdWdXZ0dVed efdYdZZ1d^d#ed$ejd efd[d\Z2dS )_AwsWaf_JS_CONFIG_CACHE   Z@6f71a512b1e035eaab53d8be73120d3fb68a0ca346b9560aab3e5cdf753d5e98ZAh72f957df656e80ba55f5d8ce2e8c7ccb59687dba3bfb273d54b08a261b2f3002ZAh7b0c470f0cfe3a80a9e26526ad185f484f6817d0832712a4a37a908786a6a67fZAha9faaffd31b4d5ede2a2e19d2d7fd525f66fee61911511960dcbb52d3c48ce25   i (  i  i   i                  z2.4.0zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36zGoogle Inc. (Apple)zFANGLE (Apple, ANGLE Metal Renderer: Apple M2 Pro, Unspecified Version)aw  ANGLE_instanced_arrays;EXT_blend_minmax;EXT_clip_control;EXT_color_buffer_half_float;EXT_depth_clamp;EXT_float_blend;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_compression_bptc;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;EXT_sRGB;OES_element_index_uint;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBGL_multi_drawvendormodel
extensionszGoogle Inc. (AMD)zDANGLE (AMD, AMD Radeon(TM) Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)af  ANGLE_instanced_arrays;EXT_blend_minmax;EXT_color_buffer_half_float;EXT_depth_clamp;EXT_float_blend;EXT_frag_depth;EXT_shader_texture_lod;EXT_texture_compression_bptc;EXT_texture_compression_rgtc;EXT_texture_filter_anisotropic;EXT_sRGB;OES_element_index_uint;OES_standard_derivatives;OES_texture_float;OES_texture_float_linear;OES_texture_half_float;OES_texture_half_float_linear;OES_vertex_array_object;WEBGL_color_buffer_float;WEBGL_compressed_texture_s3tc;WEBGL_compressed_texture_s3tc_srgb;WEBGL_debug_renderer_info;WEBGL_debug_shaders;WEBGL_depth_texture;WEBGL_draw_buffers;WEBGL_lose_context;WEBGL_multi_drawzGoogle Inc. (Intel)zKANGLE (Intel, Intel(R) Iris(R) Xe Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)zGoogle Inc. (NVIDIA)zGANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)Nchrome
websiteURLproxy	userAgentimpersonatereturnc                 C   s(   || _ || _|p
| j| _|| _d | _d S N)_AwsWaf__websiteURL_AwsWaf__proxy_AwsWaf__DEFAULT_UA_AwsWaf__userAgent_AwsWaf__impersonate_AwsWaf__jsConfig)selfr   r   r   r    r"   '/Users/user/Downloads/amz/amazon/waf.py__init__!   s
   
zAwsWaf.__init__htmlsessionc              
   C   s   z&t   }| j||d\}}t   | }dd| j| jpd|||dddW S  ty? } zdt|d	W  Y d }~S d }~ww )
N)r%   r&   TzAWS WAF Challenge Token Bypassdirectz.2fs)statuscontexturlr   token	challenge	timeTakenF)r)   description)time_AwsWaf__solveChallenger   r   	Exceptionstr)r!   r%   r&   startr,   challengeInfoelapsederrorr"   r"   r#   solve)   s    
	zAwsWaf.solvec                 C   s2   d| j i}| jr| j| jd|d< tjdi |S )Nr   httpshttpproxiesr"   )r   r   r   Session)r!   kwargsr"   r"   r#   Z__makeSession<   s   
zAwsWaf.__makeSessionc                 C   s    ddddddddd	d
d| j dS )Nz?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8en-US,en;q=0.9zno-cacheA"Chromium";v="136", "Google Chrome";v="136", "Not.A/Brand";v="99"?0	"Windows"documentnavigatenonez?11)acceptaccept-languagezcache-control	sec-ch-uasec-ch-ua-mobilesec-ch-ua-platformsec-fetch-destsec-fetch-modesec-fetch-sitezsec-fetch-userzupgrade-insecure-requests
user-agentr   )r!   r"   r"   r#   Z__pageHeadersB   s    zAwsWaf.__pageHeadersoriginrefererc                 C   s:   dd| j ddddddd	d
d}|r||d< |r||d< |S )Nz
keep-aliverB   r@   rA   z*/*z
cross-siteZcorsemptyzgzip, deflate, br, zstdr?   )
connectionrK   rO   rI   rJ   rG   rN   rM   rL   zaccept-encodingrH   rQ   rR   rP   )r!   rQ   rR   hr"   r"   r#   Z__apiHeadersE   s   zAwsWaf.__apiHeaders	plaintextc                 C   sZ   t d}| j||d }|dd  |d d }}t|  d|  d|  S )N   iz::)osurandom_AwsWaf__AESGCMencryptbase64	b64encodedecodehex)r!   rV   ivciphertag
ciphertextr"   r"   r#   Z__aesEncryptK   s   
&zAwsWaf.__aesEncryptdatac                 C   s   t |d@ dS )Nl    08X)zlibcrc32)r!   rd   r"   r"   r#   Z__crc32Q   s   zAwsWaf.__crc32c                 C   s  t t d }t| j}dd tdD }tdd|d< tdd|d< i d	d
dd
dddddd
dddd
ddd|dd ddddddddddddddddgddddd d!d"| jd#d!d$d%d&d
d
d
d
d
d
d
d
d'd(td(d%gd)d%d(td(d%gd*d
d+d,|d- |d. |d/ d0d1d2d d3d4d5d6d7d8d9g g g d:id9d;g iid<d=ddd
dd%d>d?d
d
d(d(d(d(d(d(d(d(d(d(d(d@tdAdBd |dCd%dddDd%i|t	d
d g | j
tt dE	S )FNi  c                 S   s   g | ]}t d dqS )r   (   )random	randrange).0_r"   r"   r#   
<listcomp>W   s    z0AwsWaf.__generateFingerprint.<locals>.<listcomp>   i8  i@  r   metricsr      r   )fp2browsercapabilitiesgpudntmathscreen	navigatorautostealthsubtlecanvasZformdetectorber4   flashVersionpluginsz
PDF ViewerzPDF Viewer )namer3   zChrome PDF ViewerzChrome PDF Viewer zChromium PDF ViewerzChromium PDF Viewer zMicrosoft Edge PDF ViewerzMicrosoft Edge PDF Viewer zWebKit built-in PDFzWebKit built-in PDF dupedPluginszxPDF Viewer Chrome PDF Viewer Chromium PDF Viewer Microsoft Edge PDF Viewer WebKit built-in PDF ||1920-1080-1032-24-*-*-*
screenInfoz1920-1080-1032-24-*-*-*referrer r   location	webDriverFrt   )
textShadowWebkitTextStroke	boxShadowborderRadiusborderImageopacity	transform
transitionT	supported)audiogeolocationlocalStoragetouchvideo	webWorker)cssjsr6   ru   r   r   r   ;r   rv   rw   z-1.4214488238747245z0.8178819121159085z-0.5753861119575491)tansincos
automation
properties)rC   windowry   r   )wdphantomr{   )t1t2iZmteZmtdcrypto)r   r|   r[   decryptZwrapKeyZ	unwrapKeysignverifydigestZ
deriveBitsZ	deriveKeyZgetRandomValuesZ
randomUUIDiGt&i$+)hash	emailHashhistogramBinssi)	r}   ZformDetectedZnumFormsZnumFormElementsr~   enderrorsversionid)intr0   ri   choice_AwsWaf__GPU_PROFILESrangerj   r   splitrandint_AwsWaf__FP_VERSIONr3   uuiduuid4)r!   tsru   binsr"   r"   r#   Z__generateFingerprintT   s`   ",	
@ 
zAwsWaf.__generateFingerprintfpc                 C   s8   t j|ddd}| |}|dd | }||fS )N,:
separatorsutf-8ascii   #)jsondumpsencode_AwsWaf__crc32)r!   r   payloadchecksumcombinedr"   r"   r#   Z__encodeFingerprintv   s   
zAwsWaf.__encodeFingerprintc                 C   s(   |   }| |\}}| |}||fS r   )_AwsWaf__generateFingerprint_AwsWaf__encodeFingerprint_AwsWaf__aesEncrypt)r!   r   r   raw	encryptedr"   r"   r#   Z__buildSignalPayload|   s   
zAwsWaf.__buildSignalPayloadr   
difficultyc                 C   sB   t |d\}}| d | d| krdS |r| | d| ? rdS dS )N       FT)divmod)r   r   fullremr"   r"   r#   Z__checkDifficulty   s   zAwsWaf.__checkDifficultychallengeInputr   c           	   	   C   sf   || }| d}tdD ]"}|t|  d}tj||ddddd}| ||r0t|  S qd S )Nr   r      r   r      )saltnrpZdklen)r   	itertoolscountr3   hashlibscrypt_AwsWaf__checkDifficulty)	r!   r   r   r   r   r   noncepasswordr   r"   r"   r#   Z__solveScrypt   s   
zAwsWaf.__solveScryptc                 C   sV   ||  d}tdD ]}t|t| d  }| ||r(t|  S qd S )Nr   r   )r   r   r   r   sha256r3   r   r   )r!   r   r   r   r   r   r   r"   r"   r#   Z__solveSha256   s
   zAwsWaf.__solveSha256c                 C   s<   | j r| j d r| j d n| j}td||d dS )Nbandwidth_sizesr   r	   r   )r     _AwsWaf__DEFAULT_BANDWIDTH_SIZESr\   r]   getr^   )r!   r   r   r   sizesr"   r"   r#   Z__solveBandwidth   s    zAwsWaf.__solveBandwidthc                   C   s  dt dddddddddddddddddd	ddd
ddddddddddddddddddddddddddddddddddddddddddddddddt dddddddddt dddddt ddddd t d!d"ddd#dddgS )$N2r   r   )r   valueunitZ100Z101Z102Z103r   Z104Z105Z106Z107Z108	undefinedZ110Z111r   Z1123r   74rF   
      g     @B@562   <   0      8)ri   uniformr"   r"   r"   r#   Z__buildMetrics   s"   



zAwsWaf.__buildMetricsc                 C   s(   t d| t j}|rt|dS d S )Nz%window\.gokuProps\s*=\s*(\{.*?\})\s*;r   )researchDOTALLr   loadsgroupr%   mr"   r"   r#   Z__extractGokuProps   s   zAwsWaf.__extractGokuPropsc                 C   s"   t d| }|std|dS )Nz(src="https://([^"]+)/challenge[^"]*\.js"z"challenge.js src not found in pager   )r   r   
ValueErrorr  r  r"   r"   r#   Z__extractWafHost   s   
zAwsWaf.__extractWafHostc                 C   s   t d| }|r|dS d S )Nz(src="(https://[^"]+/challenge[^"]*\.js)"r   )r   r   r  r  r"   r"   r#   Z__extractChallengeJsUrl   s   zAwsWaf.__extractChallengeJsUrlr+   c                 C   s$   t | jp| }|dr|S d| S )Nzwww.)r   hostname
startswith)r+   rU   r"   r"   r#   Z__extractDomain   s   zAwsWaf.__extractDomainjsTextc              	   C   s  i }t d| D ]}|d||d< qd\}}t d| }|r+|d}|d}i }t d| }|r{t|ddt|ddt|dd t|d	dt|d
d t|ddt|dd t|ddt|dd d}|||f|dS )Nz-'(h[0-9a-f]{8,})'[+].*?=\s*'((?:mp_)?verify)'r   r   Zsolution_dataZsolution_metadatazN'verify'\s*,\s*'\w+'\s*:\s*'(solution_\w+)'\s*,\s*'\w+'\s*:\s*'(solution_\w+)'zcase\s+0x1:return\s+(0x[0-9a-f]+);case\s+0x2:return[^;]*\((0x[0-9a-f]+),(0x[0-9a-f]+)\);case\s+0x3:return[^;]*\((0x[0-9a-f]+),(0x[0-9a-f]+)\);case\s+0x4:return[^;]*\((0x[0-9a-f]+),(0x[0-9a-f]+)\);case\s+0x5:return[^;]*\((0x[0-9a-f]+),(0x[0-9a-f]+)\)r   r   r   r      rq   r   	   r
   )challenge_typesmp_field_namesr   )r   finditerr  r   r   )r  ZchallengeTypesr  ZmpSolutionFieldZmpMetadataFieldZ
fieldMatchZbandwidthSizesZ	sizeMatchr"   r"   r#   Z__parseChallengeJs   s*   

zAwsWaf.__parseChallengeJschallengeTypec                 C   sV   || j krdS | jr)| jd }||v r|| S | D ]\}}||r(|  S qdS )N	mp_verifyr  r   )_AwsWaf__CHALLENGE_BANDWIDTHr    itemsr  )r!   r  ctprefixendpointr"   r"   r#   Z__getEndpoint   s   
zAwsWaf.__getEndpointc                 C   s^   | j | jdf| j| jdf| j| jdfi}||v r|| S | |dkr(| jdfS td| )Nr   r   	bandwidthr  zUnknown challenge_type: )_AwsWaf__CHALLENGE_SCRYPT_AwsWaf__solveScrypt_AwsWaf__CHALLENGE_SHA256_AwsWaf__solveSha256r  _AwsWaf__solveBandwidth_AwsWaf__getEndpointr  )r!   r  Zsolversr"   r"   r#   Z__getSolver   s   
zAwsWaf.__getSolverc           !   
   C   s  |p|   }| j}| |}t|}|j d|j }d }| j}|d u r9|  |_|j	||d}	|	j
}|	j	d}| |}
|
sGtd| | |}| |}|
| jv r]| j|
 | _n+z| j||d|_|j	|
|d}| |j
| _| j| j|
< W n ty   d | _Y nw | j||d|_|j	d| d|d }|  \}}|d }|d	 }|d
 }|	dd}| |\}}||||}| |}| j||d|_|dkr?| jr| jd nd\}}tj|d dd|idg|d||  d d|rd|ini dd}d| ji}|d |f|d |fi}| jr)tjd| d| ||| j| jd|d}	n||_|jd| d| ||d}	|	 }n1|||dd|idgd d||  d}i | j||dddi|_|jd| d ||d!}	|	 }d"|vr|td#| |d| |pd
d$} |d" | fS )%Nz://)timeoutzx-amzn-waf-actionz!No AWS WAF challenge detected on )rQ   rR   zhttps://z/inputs?client=browserZchallenge_typer   r-   inputr   r  r  r  ZZoeyZPresent)r   r   ZBrowser)r-   solutionsignalsr   clientdomainrp   existing_tokenZ
goku_propsr   r   rO   /r9   )filesheadersr<   r  )r$  r  )r-   r   r  r  r"  r   r!  rp   zcontent-typeztext/plain;charset=UTF-8z/verify)r   r  r,   zNo token in response: )Zsolverr  	wafAction)_AwsWaf__makeSessionr   _AwsWaf__extractDomainr   schemer  _HTTP_TIMEOUT_AwsWaf__pageHeadersr%  r   text_AwsWaf__extractChallengeJsUrlRuntimeError_AwsWaf__extractGokuProps_AwsWaf__extractWafHostr   r    _AwsWaf__apiHeaders_AwsWaf__parseChallengeJsr2   r   _AwsWaf__buildSignalPayload_AwsWaf__getSolverr  r   _AwsWaf__buildMetricsr   r   std_requestspost)!r!   r%   r&   r+   r!  parsedrQ   r&  r  respZchallengeJsUrlZ	gokuPropsZwafHostZjsRespZinputsr   ZencryptedSignalsr  r   r-   r   ZsolverFnZ
solverNamer  ZendpointNameZsolutionFieldZmetadataFieldmetadataZ
mp_headersZmp_filesresultr   r5   r"   r"   r#   Z__solveChallenge   s   










&zAwsWaf.__solveChallenge)NNr   )NN)3__name__
__module____qualname__r   dict__annotations__r*  bytesfromhexZ_AwsWaf__AES_KEYr   rZ   r  r  r  r   r   r   r   r3   r$   r   r=   r8   r'  r+  r1  r   r   r   tupler   r3  staticmethodr   boolr   r  r  r  listr5  r   r/  r0  r-  r(  r2  r  r4  r1   r"   r"   r"   r#   r   	   s\   
 




 "r   )rX   r   r   r0   rf   r   r\   ri   r   r   typingr   urllib.parser   	curl_cffir   +cryptography.hazmat.primitives.ciphers.aeadr   r6  r   r"   r"   r"   r#   <module>   s   P 