+
    W5Xj'              	          R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtH	t	H
t
HtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ]! 4       t]! RR	.R
7      tR R lt]P1                  R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! ]4      3R R ll4       t]P5                  R4      RR]! ]4      3R R ll4       t]P5                  R4      R R l4       t]P;                  R4      R R l4       t]P5                  R4      R 4       t]P5                  R4      R 4       t ]P5                  R4      R&R R  ll4       t!]P5                  R!4      R" 4       t"]P1                  R#4      R$ R% l4       t#R# )'u   Payload 管理 API 路由N)Path)	APIRouterDependsHTTPException
UploadFileFileForm)Session)ListOptional)get_db)
get_configz/api/payloadspayloads)prefixtagsc                0    V ^8  d   QhR\         R\         /# )   	file_pathreturnstr)formats   "F   /Users/wind/Downloads/Coruna-main学习资料A/backend/api/payloads.py__annotate__r      s     # #3 #3 #    c                  a \         P                  ! 4       p\        V R4      ;_uu_ 4       o\        V3R lR4       F  pVP	                  V4       K  	  RRR4       VP                  4       #   + '       g   i     TP                  4       # ; i)u   计算文件哈希值rbc                  &   < S P                  R 4      # )i   )read)fs   r   <lambda>%calculate_file_hash.<locals>.<lambda>   s    qvvd|r   r   N)hashlibsha256openiterupdate	hexdigest)r   sha256_hash
byte_blockr   s   &  @r   calculate_file_hashr*      sn    .."K	i		!3S9Jz* : 
   "" 
	   ""s   )A,,B	z/upload.c                v    V ^8  d   QhR\         R\         R\         R\        \         ,          R\        R\        /# )r   nameios_versionexploit_stagedescriptionfiledb)r   r   r   r	   )r   s   "r   r   r      sH     6 6
66 6 #	6
 6 	6r   c                  "   . ROp\         P                  P                  VP                  4      ^,          P	                  4       pWv9  d   \        RRV 2R7      h\        P                  V,          pW,          p	V	P                  RRR7       WP                  ,          p
\        V
R4      ;_uu_ 4       pVP                  4       G Rj  xL
 pVP                  V4       RRR4       \        \        V
4      4      pRV R	VP                  R
VRVRVR\        X4      RVR\        R4      P                   P#                  4       P%                  4       R\        V
4      /	pV
P'                  R4      p\        VRRR7      ;_uu_ 4       p\(        P*                  ! W^RR7       RRR4       RRRRRV/#  L  + '       g   i     L; i  + '       g   i     L-; i5i)uR   
上传 Payload 文件
用于管理不同 iOS 版本和 exploit 阶段的 payload
  u   不支持的文件类型: status_codedetailT)parentsexist_okwbNr,   filenamer-   r.   r/   	file_size	file_hashupload_timedatetimer   .jsonwutf-8encodingF)indentensure_asciiokmessageu   Payload 上传成功metadata)z.jsz.binz.dylibz.plist)ospathsplitextr:   lowerr   configPAYLOADS_DIRmkdirr$   r   writer*   r   len
__import__r>   utcnow	isoformatwith_suffixjsondump)r,   r-   r.   r/   r0   r1   allowed_extensionsfile_ext	stage_dirversion_dirr   r   contentr<   rH   metadata_files   &&&&&&          r   upload_payloadr^      s     =ww.q1779H)6PQYPZ4[\\ ##m3I)KdT2 mm+I	i		!		#	 

 $C	N3I 	DMM{{S\Yz*-66==?IIKS^
H ))'2M	mS7	3	3q		(ae< 
4 	d)H 1 $ 
	, 
4	3sI   B1G3F+F)F+B"G?F>G)F++F;	6G>G		Gz/listc                h    V ^8  d   QhR\         \        ,          R\         \        ,          R\        /# )r   r-   r.   r1   )r   r   r	   )r   s   "r   r   r   V   s.     > >#>C=> 	>r   c                   . p\         P                  P                  4        EFr  pVP                  4       '       g   K  VP                  pV'       d	   WQ8w  d   K8  VP                  4        EF%  pVP                  4       '       g   K  VP                  pV '       d	   Wp8w  d   K8  VP                  R4       F  pVP                  R8X  d   K  VP                  R4      p	V	P                  4       '       dJ    \        V	RRR7      ;_uu_ 4       p
\        P                  ! V
4      pRRR4       VP                  X4       K  VP                  RVP                  RVP                  R	VR
VRVP                  4       P                  R\!        V4      /4       K  	  EK(  	  EKu  	  RRR\#        V4      RV/#   + '       g   i     L; i  \         d     EK  i ; i)uD   
获取 Payload 列表
支持按 iOS 版本和 exploit 阶段筛选
*r?   rrA   rB   Nr,   r:   r-   r.   r;   r   rF   Tcountr   )rM   rN   iterdiris_dirr,   globsuffixrU   existsr$   rV   loadappend	Exceptionstatst_sizer   rQ   )r-   r.   r1   r   rZ   stager[   versionr   r]   r   rH   s   &&&         r   list_payloadsrp   U   s    H ((002	!! U3$,,.K%%''!&&G w5 )--c2	##w. !* 5 5g > ''))!-wGG1'+yy|H H 1
 OO	"INN%w'#Y^^%5%=%=#S^% ! 3 / 3^ 	dXH ! HG % s*   0F<F)F<)F94F<<G	G	z/download/{payload_id:path}c                $    V ^8  d   QhR\         /# r   
payload_idr   )r   s   "r   r   r      s     < <s <r   c                v  "   ^ RI Hp  V P                  R4      p\        V4      ^8w  d   \	        RRR7      hVw  r4p\
        P                  V,          V,          V,          pVP                  4       '       g   \	        RRR7      hV! VVRR	7      #   \         d   p\	        R
\        T4      R7      hRp?ii ; i5i)uA   
下载 Payload 文件
payload_id 格式: stage/version/filename
)FileResponse/r3   Invalid payload ID formatr4     Payload not foundzapplication/octet-stream)r:   
media_type  N)
fastapi.responsesru   splitrQ   r   rM   rN   rh   rk   r   )rs   ru   partsrn   ro   r:   r   es   &       r   download_payloadr      s      /<  %u:?C8STT#( ''%/'9HD	!!C8KLL1
 	

  <CF;;<s)   B9BB B9B6B11B66B9z/{payload_id:path}c                $    V ^8  d   QhR\         /# rr   r   )r   s   "r   r   r      s     < <s <r   c                    V P                  R4      p\        V4      ^8w  d   \        RRR7      hVw  r#p\        P                  V,          V,          V,          pVP                  R4      pVP                  4       '       d   VP                  4        VP                  4       '       d   VP                  4        RRRR	/#   \         d   p\        R
\        T4      R7      hRp?ii ; i)uA   
删除 Payload 文件
payload_id 格式: stage/version/filename
rv   r3   rw   r4   r?   rF   TrG   u   Payload 删除成功r{   N)
r}   rQ   r   rM   rN   rU   rh   unlinkrk   r   )rs   r~   rn   ro   r:   r   metadata_pathr   s   &       r   delete_payloadr      s    <  %u:?C8STT#( ''%/'9HD	!--g6  !!  " $-
 	
  <CF;;<s   B$B= 'B= =C#CC#z	/versionsc                 X    RRR\        \        P                  P                  4       4      /# )u    获取支持的 iOS 版本列表rF   Tversions)listrM   SUPPORTED_IOS_VERSIONSkeys r   r   get_supported_versionsr      s,     	dD66;;=> r   z/stagesc                 *    RRR\         P                  /# )u   获取 exploit 阶段列表rF   Tstages)rM   EXPLOIT_STAGESr   r   r   get_exploit_stagesr      s     	d&'' r   z/generate-linkc                F    V ^8  d   QhR\         R\        \         ,          /# )r   r-   exploit_chain)r   r   )r   s   "r   r   r      s       C=r   c           
     j   V \         P                  9  d?   \        RRV  RRP                  \         P                  P	                  4       4       2R7      hT;'       g    \         P                  V ,          p\         P
                   R2p\         P
                   R2pRR	R
VRV RVR\         P
                  /# )u3   
生成 exploit 链接
返回完整的 exploit URL
r3   u   不支持的 iOS 版本: u   ，支持: z, r4   z/group.htmlz/downloadedrF   Texploit_urlr-   r   
server_url)rM   r   r   joinr   CORUNA_SERVER_URL)r-   r   chainr   download_bases   &&   r   generate_exploit_linkr      s     &7776OP[}\ghlhqhqrx  sP  sP  sU  sU  sW  iX  hY  5Z  [  	[ GGV::;GE --.k:K //0<M 	d{{f.. r   z/statusc                    / p \         P                  P                  4        EF+  w  rRVR/ RR/W&   \         P                   F  p\         P                  V,          V,          pVP                  4       ;'       d    \        VP                  R4      4      pRTRV'       d$   \        \        VP                  R4      4      4      M^ /W,          R,          V&   K  	  \        ;QJ d7    R W,          R,          P                  4        4       F  '       d   K   RM,	  R	M(! R W,          R,          P                  4        4       4      W,          R&   EK.  	  R
R	RV /# )uY   
获取 Payload 状态
检查各个 iOS 版本和 exploit 阶段的 payload 是否完整
r   r   completeFra   has_payloadpayload_countc              3   4   "   T F  pVR ,          x  K  	  R# 5i)r   Nr   ).0
stage_infos   & r   	<genexpr>%get_payload_status.<locals>.<genexpr>  s      .
D
 }%%Ds   TrF   status)rM   r   itemsr   rN   rh   anyrf   rQ   r   allvalues)r   r-   r   rn   rZ   r   s         r   get_payload_statusr     s0    F$;;AACUb
 **E++e3kAI#**,IIY^^C5H1IK {;T)..*=%>!?TU4F)%0	 + +.# .
$1(;BBD.
### .
$1(;BBD.
 +
J'# D. 	d& r   z/validate/{payload_id:path}c                $    V ^8  d   QhR\         /# rr   r   )r   s   "r   r   r   (  s     *< *< *<r   c           
         V P                  R4      p\        V4      ^8w  d   \        RRR7      hVw  r#p\        P                  V,          V,          V,          pVP                  R4      pVP                  4       '       g   \        RRR7      hVP                  4       '       g	   RR	R
RRR/# \        VRRR7      ;_uu_ 4       p\        P                  ! V4      pRRR4       \        \        V4      4      p	XP                  R4      p
W8H  pRR	R
TRT	RT
RV'       d   R/# R/#   + '       g   i     LP; i  \         d   p\        R\        T4      R7      hRp?ii ; i)u?   
验证 Payload 文件完整性
检查文件哈希是否匹配
rv   r3   rw   r4   r?   rx   ry   rF   TvalidFrG   zNo metadata foundrb   rA   rB   Nr<   current_hashstored_hashzPayload is validzPayload hash mismatchr{   )r}   rQ   r   rM   rN   rU   rh   r$   rV   ri   r*   r   getrk   )rs   r~   rn   ro   r:   r   r   r   rH   r   r   is_validr   s   &            r   validate_payloadr   '  sZ   %<  %u:?C8STT#( ''%/'9HD	!--g6!!C8KLL ##%%d.  -w771yy|H 8 +3y>:ll;/. $XL;X)
 	

 <S
 	
 87   <CF;;<sC   B!D4 $D4 ,D4 D!AD4 D4 !D1	,D4 4E?EE)N)$__doc__rI   rV   r"   pathlibr   fastapir   r   r   r   r   r   sqlalchemy.ormr	   typingr
   r   databaser   rM   r   routerr*   postr^   r   rp   r   deleter   r   r   r   r   r   r   r   r   <module>r      s    	    M M " !  		/	=# YS	Cyc!%dCy&/6 6r G!%#'&/> >B )*< +<6 #$< %<< K  I   < I   F *+*< ,*<r   