
    ŌjO                         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      Zy)    N)Optional)urlparse)requests)AESGCMc                      e Zd ZU i Zeed<   dZej                  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dEdededededdf
d ZdFd!ed"ej,                  defd#Zdej,                  fd$Zdefd%ZdFd&ed'edefd(Zd)edefd*Zd+edefd,Zdefd-Zd.edefd/Zdefd0Z e!d1ed2e"de#fd3       Z$d4ed5ed2e"defd6Z%d4ed5ed2e"defd7Z&d4ed5ed2e"defd8Z'e!de(fd9       Z)e!d!ede*e   fd:       Z+e!d!edefd;       Z,e!d!ede*e   fd<       Z-e!d=edefd>       Z.e!d?edefd@       Z/dAedefdBZ0dAedefdCZ1dFd!ed"ej,                  defdDZ2y)GAwsWaf_JS_CONFIG_CACHE   @6f71a512b1e035eaab53d8be73120d3fb68a0ca346b9560aab3e5cdf753d5e98Ah72f957df656e80ba55f5d8ce2e8c7ccb59687dba3bfb273d54b08a261b2f3002Ah7b0c470f0cfe3a80a9e26526ad185f484f6817d0832712a4a37a908786a6a67fAha9faaffd31b4d5ede2a2e19d2d7fd525f66fee61911511960dcbb52d3c48ce25   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
websiteURLproxy	userAgentimpersonatereturnc                 f    || _         || _        |xs | j                  | _        || _        d | _        y N)_AwsWaf__websiteURL_AwsWaf__proxy_AwsWaf__DEFAULT_UA_AwsWaf__userAgent_AwsWaf__impersonate_AwsWaf__jsConfig)selfr   r   r   r   s        1C:\Users\Sxnti\OneDrive\Desktop\amz\amazon\waf.py__init__zAwsWaf.__init__!   s3    '"&;$*;*;(!    htmlsessionc                    	 t        j                          }| j                  ||      \  }}t        j                          |z
  }dd| j                  | j                  xs d|||dddS # t        $ r}dt        |      d	cY d }~S d }~ww xY w)
N)r+   r,   TzAWS WAF Challenge Token Bypassdirectz.2fs)statuscontexturlr   token	challenge	timeTakenF)r0   description)time_AwsWaf__solveChallenger!   r"   	Exceptionstr)r'   r+   r,   startr3   challengeInfoelapsederrors           r(   solvezAwsWaf.solve)   s    	@IIKE#'#8#8dG#8#T E=iikE)G ;((1* '}A.   	@#CJ??	@s   A&A) )	B
2B?B
B
c                     d| j                   i}| j                  r| j                  | j                  d|d<   t        j                  di |S )Nr   httpshttpproxies )r%   r"   r   Session)r'   kwargss     r(   __makeSessionzAwsWaf.__makeSession<   sD    !3!34<<*.,, MF9)&))r*   c                 4    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'   s    r(   __pageHeaderszAwsWaf.__pageHeadersB   sl    [  qA  T^  mp  FJ  bm  AK  _i  }C  W[  z}  MQ  M]  M]  ^  	^r*   originrefererc                 R    dd| j                   ddddddd	d
d}|r||d<   |r||d<   |S )Nz
keep-aliverM   rK   rL   z*/*z
cross-sitecorsemptyzgzip, deflate, br, zstdrJ   )
connectionrV   rZ   rT   rU   rR   rY   rX   rW   zaccept-encodingrS   r]   r^   r[   )r'   r]   r^   hs       r(   __apiHeaderszAwsWaf.__apiHeadersE   sk    '{Z^ZjZj  z}  SW  ch  |H  \b  v}  Rk  @P  Q6AhK7AiLr*   	plaintextc                    t        j                  d      }| j                  j                  ||d       }|dd  |d d }}t	        j
                  |      j                          d|j                          d|j                          S )N   iz::)osurandom_AwsWaf__AESGCMencryptbase64	b64encodedecodehex)r'   re   ivciphertag
ciphertexts         r(   __aesEncryptzAwsWaf.__aesEncryptK   sv    ZZ^&&r9d; ,tZ""2&--/03779+R
@P?QRRr*   datac                 6    t        j                  |      dz  dS )Nl    08X)zlibcrc32)r'   ru   s     r(   __crc32zAwsWaf.__crc32Q   s    **T"Z/45r*   c                    t        t        j                         dz        }t        j                  | j                        }t        d      D cg c]  }t        j                  dd       }}t        j                  dd      |d<   t        j                  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        j                  d'd$g      d(d$d't        j                  d'd$g      d)d	d*d+|d,   |d-   |d.   j                  d/      d0d1d d2d3d4d5d6d7d8g g g d9id8d: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        j                  d@dA      d |dBd$dddCd$i|t        j                  d	d      z   g | j                  t        t        j                               dD	S c c}w )ENi     r   (   i8  i@  metricsr      r   )fp2browsercapabilitiesgpudntmathscreen	navigatorautostealthsubtlecanvasformdetectorber;   flashVersionpluginsz
PDF ViewerzPDF Viewer )namer:   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	webDriverFr   )
textShadowWebkitTextStroke	boxShadowborderRadiusborderImageopacity	transform
transitionT	supported)audiogeolocationlocalStoragetouchvideo	webWorker)cssjsr=   r   r   r   r   ;r   r   r   z-1.4214488238747245z0.8178819121159085z-0.5753861119575491)tansincos
automation
properties)rN   windowr   r   )wdphantomr   )t1t2imtemtdcrypto)r   r   rk   decryptwrapKey	unwrapKeysignverifydigest
deriveBits	deriveKeygetRandomValues
randomUUIDiGt&i$+)hash	emailHashhistogramBinssi)	r   formDetectednumFormsnumFormElementsr   enderrorsversionid)intr7   randomchoice_AwsWaf__GPU_PROFILESrange	randranger$   splitrandint_AwsWaf__FP_VERSIONr:   uuiduuid4)r'   tsr   _binss        r(   __generateFingerprintzAwsWaf.__generateFingerprintT   s   $))+$%mmD//016s<A  B'<""5%0Q##E51R
qQ!TU_`lm|}  HI  VW  cd  pq  CD  LM  N
R
 D
 mDObk  GA  La  j@  CA  Lg  pL  CM  Xm  vL  OM  N	

   W
 3
 
 ))
 
 
 1!Z[mn  @A  NO  ^_  op  %q  CG  X^  Xe  Xe  gk  mr  fs  Xt  FQ  \a  lp  E  L  L  NR  TY  MZ  [  y\  ij  k
 c(mc'lRUVbRcRiRijmRno
 4
 1:NWlm
 ,R2\^0_!`nz  ~F  HJ  }K  nL  M
  aqq5I!
" aDT^bqu  @D  PT  `d  tx  GK  `d  tx  y#
$  &//	9ETXkop!qQ-q!,,((djjl#1
 	
	 =s   G!fpc                     t        j                  |d      j                  d      }| j                  |      }|j                  d      dz   |z   }||fS )N,:
separatorsutf-8ascii   #)jsondumpsencode_AwsWaf__crc32)r'   r   payloadchecksumcombineds        r(   __encodeFingerprintzAwsWaf.__encodeFingerprintv   sN    ::bZ8??H<<(??7+d2W<!!r*   c                 t    | j                         }| j                  |      \  }}| j                  |      }||fS r    )_AwsWaf__generateFingerprint_AwsWaf__encodeFingerprint_AwsWaf__aesEncrypt)r'   r   r   raw	encrypteds        r(   __buildSignalPayloadzAwsWaf.__buildSignalPayload|   s?    '')004#%%c*	""r*   r   
difficultyc                 V    t        |d      \  }}| d | d|z  k7  ry|r| |   d|z
  z	  ryy)N       FT)divmod)r   r   fullrems       r(   __checkDifficultyzAwsWaf.__checkDifficulty   s=    :q)	c%4=GdN*5F4LQW-r*   challengeInputr   c           	         ||z   }|j                  d      }t        j                  d      D ]Y  }|t        |      z   j                  d      }t	        j
                  ||dddd      }| j                  ||      sNt        |      c S  y )Nr   r      r   r      )saltnrpdklen)r   	itertoolscountr:   hashlibscrypt_AwsWaf__checkDifficulty)	r'   r   r   r   r   r  noncepasswordr   s	            r(   __solveScryptzAwsWaf.__solveScrypt   sx    !H,w'__Q'E 3u:-55g>H^^H43!qPRSF%%fj9#e*;L (r*   c                    ||z   j                  d      }t        j                  d      D ]_  }t        j                  |t        |      j                  d      z         j                         }| j                  ||      sTt        |      c S  y )Nr   r   )r   r  r  r  sha256r:   r   r
  )r'   r   r   r   r   r  r   s          r(   __solveSha256zAwsWaf.__solveSha256   sn    "X-55g>__Q'E^^Hs5z/@/@/I$IJQQSF%%fj9#e*;L (r*   c                     | j                   r| j                   d   r| j                   d   n| j                  }t        j                  d|j	                  |d      z        j                  d      S )Nbandwidth_sizesr   r   r   )r&    _AwsWaf__DEFAULT_BANDWIDTH_SIZESrl   rm   getrn   )r'   r   r   r   sizess        r(   __solveBandwidthzAwsWaf.__solveBandwidth   s`    6:oo$//ZkJl 12rv  sQ  sQ%))J*F FGNNwWWr*   c                     dt        j                  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        j                  dd      dddddddt        j                  dd      dddt        j                  dd      ddd t        j                  d!d"      ddd#dddgS )$N2r   r   )r   valueunit100101102103r   104105106107108	undefined110111r   1123r   74rQ   
      g     @B@562   <   0      8)r   uniformrE   r*   r(   __buildMetricszAwsWaf.__buildMetrics   s-    V^^Aq%9cJQ4uqZ]6^Q4uqZ]6^Q4uqZ]6^Q4uqZ]6^Q4{UV`c6dQ4uqZ]6^Q4{UV`c6dQcJQcJV^^B%;cJTcJV^^Aq%9cJV^^B%;cJV^^C%=cJQcJ!
 	
r*   c                     t        j                  d| t         j                        }|r$t        j                  |j                  d            S y )Nz%window\.gokuProps\s*=\s*(\{.*?\})\s*;r   )researchDOTALLr   loadsgroupr+   ms     r(   __extractGokuPropszAwsWaf.__extractGokuProps   s5    II>biiPTZZ
++r*   c                 j    t        j                  d|       }|st        d      |j                  d      S )Nz(src="https://([^"]+)/challenge[^"]*\.js"z"challenge.js src not found in pager   )r8  r9  
ValueErrorr<  r=  s     r(   __extractWafHostzAwsWaf.__extractWafHost   s/    IIA4H
#GHHwwqzr*   c                 X    t        j                  d|       }|r|j                  d      S d S )Nz(src="(https://[^"]+/challenge[^"]*\.js)"r   )r8  r9  r<  r=  s     r(   __extractChallengeJsUrlzAwsWaf.__extractChallengeJsUrl   s(    IIA4Hqwwqz(D(r*   r2   c                 d    t        |       j                  xs | }|j                  d      r|S d|z   S )Nzwww.)r   hostname
startswith)r2   rc   s     r(   __extractDomainzAwsWaf.__extractDomain   s0    SM"")cLL(q8fqj8r*   jsTextc           
      .   i }t        j                  d|       D ]%  }|j                  d      ||j                  d      <   ' d\  }}t        j                  d|       }|r"|j                  d      }|j                  d      }i }t        j                  d|       }|rt	        |j                  d      d      t	        |j                  d      d      t	        |j                  d      d      z  t	        |j                  d	      d      t	        |j                  d
      d      z  t	        |j                  d      d      t	        |j                  d      d      z  t	        |j                  d      d      t	        |j                  d      d      z  d}|||f|dS )Nz-'(h[0-9a-f]{8,})'[+].*?=\s*'((?:mp_)?verify)'r   r   solution_data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      r   r   	   r   )challenge_typesmp_field_namesr  )r8  finditerr<  r9  r   )rI  challengeTypesr>  mpSolutionFieldmpMetadataField
fieldMatchbandwidthSizes	sizeMatchs           r(   __parseChallengeJszAwsWaf.__parseChallengeJs   sz   MvVA)*N1771:& W ,P(YYprxy
(..q1O(..q1OIIE GMN	 yq)2.yq)2.Y__Q5G1LLyq)2.Y__Q5G1LLyq)2.Y__Q5G1LLyq)2.Y__Q5G1LLN $2oWfEg  }K  L  	Lr*   challengeTypec                     || j                   k(  ry| j                  rE| j                  d   }||v r||   S |j                         D ]  \  }}|j                  |      s|c S  y)N	mp_verifyrP  r   )_AwsWaf__CHALLENGE_BANDWIDTHr&   itemsrG  )r'   rZ  ctprefixendpoints        r(   __getEndpointzAwsWaf.__getEndpoint   sf    D666{??!23B"2m+<$<$&HHJ  ++F3H_ %/ r*   c                    | j                   | j                  df| j                  | j                  df| j                  | j
                  dfi}||v r||   S | j                  |      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__getEndpointrA  )r'   rZ  solverss      r(   __getSolverzAwsWaf.__getSolver   s    ##););(I##););(I&&)>)>(L

 G#=))m,;));773M?CDDr*   c                    |xs | j                         }| j                  }| j                  |      }t        |      }|j                   d|j
                   }d }| j                  }|O| j                         |_        |j                  ||      }	|	j                  }|	j                  j                  d      }| j                  |      }
|
st        d|       | j                  |      }| j                  |      }|
| j                  v r| j                  |
   | _        ne	 | j#                  ||      |_        |j                  |
|      }| j%                  |j                        | _        | j                   | j                  |
<   | j#                  ||      |_        |j                  d| d|      j)                         }| j+                         \  }}|d   }|d	   }|d
   }|j                  dd      }| j-                  |      \  }} ||||      }| j/                  |      }| j#                  ||      |_        |dk(  r| j                   r| j                   d   nd\  }}t)        j0                  |d dd|idg|d|| j3                         d d|rd|ini d      }d| j4                  i}|d |f|d |fi}| j6                  r8t9        j:                  d| d| ||| j6                  | j6                  d|      }	n!||_        |j;                  d| d| ||      }	|	j)                         }ne|||dd|idgd d|| j3                         d}i | j#                  ||      ddi|_        |j;                  d| d ||!      }	|	j)                         }d"|vrt        d#|       |d| |xs d
d$} |d"   | fS # t&        $ r d | _        Y Ew xY w)%Nz://)timeoutzx-amzn-waf-actionz!No AWS WAF challenge detected on )r]   r^   zhttps://z/inputs?client=browserchallenge_typer   r4   inputr   r\  rQ  rK  ZoeyPresent)r   r  Browser)r4   solutionsignalsr   clientdomainr   existing_token
goku_propsr   r   rZ   /rA   )filesheadersrD   rn  )r{  rn  )r4   r   rt  ru  rx  rv  rw  r   zcontent-typeztext/plain;charset=UTF-8z/verify)r   rn  r3   zNo token in response: )solverra  	wafAction)_AwsWaf__makeSessionr!   _AwsWaf__extractDomainr   schemerF  _HTTP_TIMEOUT_AwsWaf__pageHeadersr|  r  text_AwsWaf__extractChallengeJsUrlRuntimeError_AwsWaf__extractGokuProps_AwsWaf__extractWafHostr	   r&   _AwsWaf__apiHeaders_AwsWaf__parseChallengeJsr9   r   _AwsWaf__buildSignalPayload_AwsWaf__getSolverrj  r   _AwsWaf__buildMetricsr$   r"   std_requestspost)!r'   r+   r,   r2   rw  parsedr]   r~  rn  respchallengeJsUrl	gokuPropswafHostjsRespinputsr   encryptedSignalsrZ  r   r4   r   solverFn
solverNamert  endpointNamesolutionFieldmetadataFieldmetadata
mp_headersmp_filesresultr   r<   s!                                    r(   __solveChallengezAwsWaf.__solveChallenge   sh   1T//1%%((-SM}}oS(9:	&&<"002GO;;sG;4D99D(()<=I55d;!B3%HII++D1	))$/T222"33NCDO'"&"3"363"3"O ^WE"&"9"9&++"F8<%%n5 ++63+Gxy0FGQXY^^`%)%>%>%@"" 01-
,	"w3#//>*NHjA))-8++63+G;&59__ 01; )M= zz&D%+yBR6STU$	V..0D	#
 1:L),r# %&H '(8(89J%h'7xHXYH||#((wiq7"J&*llDLLI#	 #-||wiq7"G $  YY[F$-8QYpv  CL  N^  B_  h`  ga  uy  EN  Z`  mq  m@  m@  mB  CG{!2!2&#!2!N{P^`z{GO<<(7)7 ;'SZ<[DYY[F& 7MfX5V(W"W#-Q|n;M\e\titug--q  '"&'s   A$N4 4OO)NNchrome)NN)3__name__
__module____qualname__r	   dict__annotations__r  bytesfromhex_AwsWaf__AES_KEYr   rj   re  rg  r]  r  r   r#   r   r:   r)   r   rF   r?   r  r  r  r   r   r   tupler   r  staticmethodr   boolr
  rf  rh  ri  listr  r   r  r  r  r  r  rj  r  r8   rE   r*   r(   r   r   	   sN   dM`aIy!H___$)klx\j kL EL )4|  MF  	G&4z  Ks  	t(  5B  Rz  	{)4}  Nv  	w	N"3 "s "c "_b "rv "@# @x/?/? @4 @&*x// *^t ^3  t Se S S6E 6c 6 
t  
D"d "u "#e # % S T  MC M3 MC MTW MMC M3 MC MTW MXs Xc Xs XWZ X 
D 
 
(  $  
 s s  
 )c )hsm ) ) 9S 9S 9 9 L3 L4 L L:	3 	3 	
E 
E 
EV.S V.(:J:J V.V[ V.r*   r   )rh   r8  r   r7   rx   r   rl   r   r  r  typingr   urllib.parser   	curl_cffir   +cryptography.hazmat.primitives.ciphers.aeadr   r  r   rE   r*   r(   <module>r     s/    I I I I I  !  > H. H.r*   