
    [7_iq                     d    S r SSKrSSKrSSKJrJrJrJr  SSKJ	r	J
r
Jr  SSKJr   " S S5      rg)uP   
CTF 方向配置服务

提供方向配置的 CRUD 操作和初始化功能。
    N)OptionalListDictAny)dbCategoryConfigCategoryAdmin)KnowledgePathConfigc                   r   \ rS rSrSrSSSSSSS	S
SSSSSSSSS.
SS
SSSSSSSS.SSSSS.SSSSS.SSSS S./SS!S	S"S#.S$.	S%S&S'S(SS)SS*SSS!S*S+S,.S-.SS"S#.S	SS..S/.S0S1S2S3S4S5SS6S7S8S9.SS:S%S;S#.S<./S=S>S!S	S/S?.S@S!S%S0/S?./0SSS+SASB/SCSD.SS!S+SESF/SGSD.SS*SHSBSI/SJSD.SS+SKSLSM/SNSD./SSSS4SOSPSQ/SRSS.STSUSVSWSXSYSZ.S[S\S*SKS].S^.rS_S`SaSbS4S!SS
SSSSSSS9.SSSS9.SSSS9.SSSS9./SSSc.SdS&SeSfSSgShSiSj.SkSlSj.SmSnSj.SoSpSj.SqSrSj.SsStSj./Su.SvSwSxSj.SySzSj.S{S|Sj.S}S~Sj.SSSj.SSSj./Su.SSSSj.SSSj.SSSj.SSSj.SSSj.SSSj./Su.SSSSj.SSSj.SSSj.SSSj./Su.SSSSj.SSSj.SSSj.SSSj./Su.SSSSj.SSSj.SSSj.SSSj./Su./SS!S*SS"S#.S.
SS
SSS4SSSS.SSSS.SSSS./SS*SdS;S#.S$.	/S=S>S!SS/S?.S@SSd/S?./0SSS*SS.SS!S+SS.SS!S+SS.SS*SHSS./S4SSS/ SQSOS.SSSVSWSSSZ.S[S*S.S^.rSSSSS4S*SS
SSSSSSj.SSSj.SSSj.SSSj./SSSc.SS
SSSSSSj.SSSj.SSSj.SSSj./SS!SS"S#.S$.	SSSSSSS*SS*SS"S#.S.
SS
SSS4S6SSj.SSSj.SSSj.SSSj./SS:Sc./S4SSSS.S.rSSS(SS4S:SS
SSSSSSj.SSSj.SSSj.SSSj./SSSc.SS
SSSSSSj.SSSj.SSSj.SSSj./SS!Sc.S%SS'S(SSS*SS*S.	SSSSS4SSSj.SSSj.SSSj.SSSj.SSSj./SS:Sc./SSSSS.S.rSSSSS4S+SS
SSSSSSj.SSSj.SSSj.SSSj./SSSc.SSSSSGS S*SS!S.	/S4SSSS.S.r	\
GS 5       r\
GS\\\4   GS\4GS j5       r\
GS\GS\\\4   GS\\   4GS j5       r\
GS\GS\4GS j5       r\
GS\GS\\   4GS	 j5       r\
GS\\   4GS
 j5       r\
GS\\   4GS j5       r\
GS\GS\\\\4      4GS j5       r\
GSGS\\\4   GS\GS\\   4GS jj5       rGSrGg(  CategoryService   u   方向配置服务webu
   Web 安全globeuM   Web 应用安全漏洞题目，包括 SQL 注入、XSS、SSRF 等常见漏洞T   languageselectu   编程语言codeu   请选择编程语言	languagesu!   选择题目使用的后端语言)
idtypelabeliconrequiredplaceholderoptions_sourcevisibleorder	help_text
difficultyu   难度级别signal   入门seedlingu   最多1个漏洞)valuer   r   description   简单leafu   最多2个漏洞   中等treeu   最多3个漏洞   困难mountainu   最多5个漏洞   	not_empty)field	condition)	r   r   r   r   r   optionsr   r   
depends_onvulnerabilitymulti_select_categorizedu   漏洞类型bugvulnerability_db      )r!   r%   r'   r)   )sourcemapping)r-   key)r   r   r   r   r   r   r   r   max_count_rulesr0   	filter_bysceneselect_with_subu   应用场景buildingFscenesnoneu	   无场景ban)r#   r   r      
count_gt_0)r   r   r   r   r   r   
allow_nonenone_optionr   r   r0   rowsrow_1)r   columnsfieldsrow_2g      ?g      @g?)name	max_countwriteup_countdepth_range	diff_rateg      @g      @g333333?   g      @g?
   g      @g      $@g      ?z{timestamp}_{name}i  ih  zDASCTF{...})dockerexpwriteup
attachmentdirectory_pattern
port_rangeflag_formatu   CTF Web 题目生成向导u8   按顺序完成配置，快速生成高质量 CTF 题目u   开始生成u   重置z#6366f1z#ec4899)
page_titlepage_descriptiongenerate_buttonreset_buttonprimary_colorsecondary_coloriX  i,  )
ai_timeoutdocker_timeoutmax_retriesretry_interval)r   rK   r   r$   enabled
sort_orderform_fieldsform_layoutdifficulty_rulesoutput_config	ui_configadvanced_configcryptou	   密码学r9   u]   密码学相关题目，包括古典密码、对称加密、非对称加密、哈希算法等)r   r   r   r   r   r/   r   r   algorithm_typeu   密码算法locku   古典密码caesaru   凯撒密码)r#   r   vigenereu   维吉尼亚密码playfairu   Playfair密码hillu
   Hill密码affineu   仿射密码substitutionu   替换密码)categoryitemsu   对称加密aesAESdeszDES/3DESrc4RC4chacha20ChaCha20
block_modeu   分组模式攻击(ECB/CBC/CTR)padding_oraclezPadding Oracleu   非对称加密	rsa_basicu	   RSA基础
rsa_attacku"   RSA攻击(小指数/共模/广播)rsa_factorizationu   RSA分解(Fermat/Pollard)eccu   椭圆曲线(ECC)dsaz	DSA/ECDSAdiffie_hellmanzDiffie-Hellmanu   哈希与签名hash_collisionu   哈希碰撞length_extensionu   长度扩展攻击hmacHMACdigital_signatureu   数字签名u   数论与格crtu   中国剩余定理(CRT)discrete_logu   离散对数latticeu   格密码(LLL/CVP/SVP)coppersmithu   Coppersmith攻击u   其他prngu   伪随机数生成器mt19937u   MT19937预测xoru   异或加密customu   自定义加密算法)
r   r   r   r   r   r/   r   r   rL   r0   
math_levelu   数学难度
calculatoru   基础u   模运算、异或)r#   r   r$   u   扩展欧几里得、CRTu   高级u   格基约化、椭圆曲线)rK   rL   rM   r   )z.pyz.txtz.zip)rR   rS   rT   rU   attachment_typesrV   u   CTF Crypto 题目生成向导u   配置密码学题目参数z#10b981z#3b82f6)r_   ra   reverseu   逆向工程	microchipuC   逆向工程题目，包括 ELF、PE、APK 等二进制文件分析platformu   目标平台desktop	linux_elfz	Linux ELF
windows_pez
Windows PEandroid_apkzAndroid APKwasmWebAssembly	techniquemulti_selectu   逆向技术toolstechnique_db)
r   r   r   r   r   r   rL   r   r   r0   obfuscationu   混淆程度z	eye-slashu   无lightu   轻度mediumu   中度heavyu   重度)rR   rS   rT   rU   )r   rK   r   r$   rc   rd   re   rh   pwnu   二进制漏洞uQ   二进制漏洞利用题目，包括栈溢出、堆利用、格式化字符串等archu   架构x86u   x86 (32位)x86_64u   x86_64 (64位)armARMmipsMIPSpwn_vulnerability_db)	r   r   r   r   r   r   rL   r   r   
protectionu   保护机制z
shield-altnxNXcanaryCanarypiePIErelroRELROaslrASLRmiscu   杂项zpuzzle-pieceu9   杂项题目，包括隐写、取证、编码、脑洞等
skill_typeu   技能类型misc_skill_dbc                     U R                   U R                  U R                  U R                  U R                  /nU H?  n[
        R                  R                  US   5      nU(       a  M.  U R                  U5        MA     g)u   初始化默认方向配置r   N)	DEFAULT_WEB_CONFIGDEFAULT_CRYPTO_CONFIGDEFAULT_REVERSE_CONFIGDEFAULT_PWN_CONFIGDEFAULT_MISC_CONFIGr   querygetcreate_category)clsdefault_configsconfigexistings       </Users/yu22x/Desktop/ge/ctf/app/services/category/service.pyinit_default_categories'CategoryService.init_default_categories  sq     ""%%&&""##
 &F%++//t=H8##F+ &    r   returnc                     [        US   US   UR                  SS5      UR                  SS5      UR                  SS5      UR                  S	S
5      S9nSU;   a  UR                  US   5        SU;   a  UR                  US   5        SU;   a  UR	                  US   5        O4SU;   a  UR                  US   5        SU;   a  UR                  US   5        SU;   a  UR                  US   5        SU;   a  UR                  US   5        SU;   a  UR                  US   5        UR                  SSUS    S35      Ul
        UR                  SSUS    S35      Ul        UR                  SSUS    S35      Ul        UR                  SSUS    S35      Ul        [        R                  R!                  U5        [        R                  R#                  5          [%        UR&                  5      nUR)                  5         SU;   d  SU;   a8  S
SKJn   UR1                  U5        [        R                  R#                  5         U$ U$ ! [*         a     NRf = f! [*         a,  nS
SKnUR5                  S[7        U5       35         SnAU$ SnAff = f) u   创建方向配置r   rK   r   folderr$    rc   Frd   r   )r   rK   r   r$   rc   rd   re   rf   difficultiesstagesrg   rh   ri   rj   prompt_template_pathzge10/z
/CLAUDE.mdknowledge_base_pathz/dataknowledge_db_pathz/data/vulnerability_db.jsonchoice_script_pathz/data/scripts/choice.pyPromptCompilerServiceNu+   创建方向后自动编译 Prompt 失败: )r   r   set_form_fieldsset_form_layoutset_difficulties
set_stagesset_difficulty_rulesset_output_configset_ui_configset_advanced_configr   r   r   r   r   sessionaddcommitr
   r   ensure_directories	Exception$app.services.prompt.compiler_servicer   compile_and_save_promptsloggingwarningstr)r   r   rt   path_configr   er   s          r   r   CategoryService.create_category  s    "d|FH-

="5JJy%0zz,2
 F"$$VM%:;F"$$VM%:; V#%%f^&<= 6!##F8$45!V+--f5G.HIf$&&vo'>?& ""6+#67&((0A)BC )/

3IUSYZ^S_R``jKk(l% (.zz2G5QWX\Q]P^^cId'e$%+ZZ0CuVTX\NZuEv%w"&,jj1EvVZ|n\sGt&u#


x 


	
 .hkk:K**, v6!9RX%>>xH

!!# x!  		  X"McRSfX VWW Xs*   %I /I 
II
J!!JJcategory_idupdatesc                 n   [         R                  R                  U5      nU(       d  gSU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SnSU;   a  UR                  US   5        S	U;   a  UR                  US	   5        S
U;   a  UR                  US
   5        SnOSU;   a  UR                  US   5        SnSU;   a  UR                  5       =(       d    / nUS   n[        U[        5      (       a  U Ho  n[        UR                  SS5      5      nX;   d  M%  UR                  S5      (       d  0 US'   Xh   n	[        U	[        5      (       d  M[  US   R!                  U	5        Mq     UR                  U5        SnSU;   a  UR#                  US   5        SnSU;   a  UR%                  US   5        SU;   a  UR'                  US   5        SU;   a5  UR)                  5       =(       d    0 n
US   U
S'   UR+                  U
5        SnO=SU;   a7  UR+                  US   5        [        US   [        5      (       a  SUS   ;   a  SnSU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        SU;   a
  US   Ul        U(       a  SSKJn   UR;                  U5        [B        RD                  RG                  5         U$ ! [<         a+  nSSKnURA                  S[        U5       35         SnANPSnAff = f)u   更新方向配置NrK   r   r$   rc   rd   Fre   rf   r   Tr   prompt_extensionsr   r   promptsrg   rh   ri   system_promptrj   r   r   r   r   
output_dirr   r   u   自动编译 Prompt 失败: )$r   r   r   rK   r   r$   rc   rd   r   r   r   r   
get_stages
isinstancedictr   updater   r   r   get_advanced_configr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   rt   should_recompile_promptr   r   stagestage_id
extensionsadvancedr   r   r   s                 r   update_categoryCategoryService.update_category(  sm    "''++K8 W#FOHMW#FOHMG##*=#9H &y1H7""),"7H #(G#$$W]%;<G#$$W]%;< W$%%gn&=>&*# 7"##GH$56*.' #g-!,,.4"$+,?$@!/66!'#&uyyr':#;#8#(99Y#7#735i 0):)DJ)*d;; %i 0 7 7
 C "( ''/.2+!W,--g6H.IJ*.'g%&&w'?@'!""7;#78g%335;H(/(@H_%((2&*#')((1B)CD'"34d;;SZ[lSm@m*.' "W,,34J,KH) G++23H+IH('))01D)EH&7**12F*GH'7""),"7H #RI%>>xH
 	

   I">s1vh GHHIs   K? ?
L4	!L//L4c                 "   [         R                  R                  U5      nU(       d  g[        R                  R	                  US9R                  5         [        R                  R                  U5        [        R                  R                  5         g)u   删除方向配置F)r   T)	r   r   r   r	   r;   deleter   r   r   r   r   rt   s      r   delete_categoryCategoryService.delete_category  sg     "''++K8 	%%+%>EEG


(#


r   c                 @    [         R                  R                  U5      $ )u   获取方向配置)r   r   r   )r   r   s     r   get_categoryCategoryService.get_category  s     ##''44r   c                 ,    [         R                  " 5       $ )u   获取所有方向配置)r   get_all_categoriesr   s    r   r  "CategoryService.get_all_categories  s     0022r   c                 ,    [         R                  " 5       $ )u!   获取所有启用的方向配置)r   get_enabled_categoriesr  s    r   r  &CategoryService.get_enabled_categories  s     4466r   c                 n    [         R                  R                  U5      nU(       d  gUR                  SS9$ )u   导出方向配置为 JSONNT)include_config)r   r   r   to_dictr  s      r   export_categoryCategoryService.export_category  s4     "''++K8t44r   	overwritec                     UR                  S5      nU(       d  g[        R                  R                  U5      nU(       a  U(       a  U R                  X15      $ gU R	                  U5      $ )u   从 JSON 导入方向配置r   N)r   r   r   r   r   )r   r   r  r   r   s        r   import_categoryCategoryService.import_category  sY     jj&!''++K8**;??""6**r    N)F)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   boolr  r  r   r  r  r  r  __static_attributes__r  r   r   r   r      sY	    f ! ' 6"-@ # '  &:^pq&6Zlm&6Zlm&:^pq	  (2M" &2' "4**+qAQRS$ )5;O'1+F" )'"!"*")/+uU(7lS[:
x 1\8RS1'8RS
 ASVX[R\knoASVX[R\knoASVX[R\knoATWY]S^mpq	
 !5 %.(
 7 Z-$&(
 ! 	
CgV v # '  &:N&6J&6J&:N	    '2' !/"*^D",7KL",7GH"(<@"*^D"0>J;  "0"'%8"'*="'%8",zB".9Z["2=MN;  "3"-D".9]^"5@[\"'2EF"'+>"2=MN>  "3"2^L"4?ST"(6:"5O	>  "0"'2KL"0>J"+6NO"/:MN	;  "*"(3JK"+oF"'.A"*5LM	5 K+X  (4;Ok6p # '$!&J^_&Jde&Jgh
  (8|TOV
p 1|8TU19I8JK
 AQYZAQYZAQYZAQYZ	
  7!5
 : =-$&(
 
y@H \ # '  &:&:&:&:	    ! '! )K@*\B+mD$}=	  (4;O" "&' "0(2M $ '#!$u5%9&:%9	  Y;
~ 	
KK^ !j # '  &:&:&:&:	     !# #m<&1AB#e4$v6	    &&' "8
 #&'$!"T2&:#e4%8$v6  U:
| 	
IJ\ R # '  &:&:&:&:	    #&' "1
!
> 	
K+Z , , LT#s(^ L L L\ c# cS#X c8TbKc c cJ # $   5s 5x/G 5 5 34#7 3 3 7tN'; 7 7 5# 5(4S>2J 5 5 +T#s(^ + +QYZhQi + +r   r   )r  jsonostypingr   r   r   r   app.models.database.modelsr   r   r	   "app.services.knowledge.path_configr
   r   r  r   r   <module>r(     s4   
  	 , ,  Cs
+ s
+r   