
    2RWí                     t    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Jr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KnowledgeCategoryKnowledgeItemWriteupFilePromptTemplateCategoryAdmin)KnowledgePathConfigc                   	   \ 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SASBSCSSD.SESFSGS4SHSI.SJSKSLSSD.SMSNSOSSD.SPSQSRSSD.SSSTSUSSSV.SWSXSYSSD.SZS[S\SSD.S]S^S_SSD.S`SaSbSSD./
SSS+ScSd/SeSf.SS!S+SgSh/SiSf.SS*SjSdSk/SlSf.SS+SmSnSo/SpSf./SSSS4SqSrSs/StSu.SvSwSxSySzS{S|.S}S~S*SmS.S.rSSSSS4S!SS
SSSSSSS9.SSSS9.SSSS9.SSSS9./SSS.SS&SSSSSSS.SSS.SSS.SSS.SSS.SSS./S.SSSS.SSS.SSS.SSS.SSS.SSS./S.SSSS.SSS.SSS.SSS.SSS.SSS./S.SSSS.SSS.SSS.SSS./S.SSSS.SSS.SSS.SSS./S.SSSS.SSS.SSS.SSS./S./SS!S*SS"S#.S.
SS
SSS4SSSS.SSSS.SSSS./SS*SS;S#.S$.	/S=S>S!SS/S?.S@SS/S?./0SASBSSSD.SJSKSSSD.SMSNSOSSD.SPSQSSSD.SSSTSUSSD.SWSSSSD.SZSSSSD.S]SaSbSSD./SSS*SS.SS!S+SS.SS!S+SS.SS*SjSS./S4SSS/ SQSqS.SSSxSySSS|.S}S*S.S.rSSSSS4S*SS
SSSSSS.SSS.SSS.SSS./SSS.SS
SSSSSS.SSS.SSS.SSS./SS!SS"S#.S$.	SSSSSSS*SS*SS"S#.S.
SS
SSS4S6SS.SGS S.GSGSS.GSGSS./SS:S./SASBGSSSD.SJSKSSSD.SMSNSOSSD.SPSQGSSSD.SSSTSUSSD.SWGSGSSSD.SZSGS	SSD.S]SaSbSSD./S4SSSGS
.GS.	rGSGSS(GSS4S:SS
SSSSSS.SSS.SSS.SSS./SSS.GSS
GSSSGSGSS.GSGSS.GSGSS.GSGSS./SS!S.S%SS'S(SGSS*SS*GS.	GSSGSGSS4GSGSS.GS GS!S.GS"GS#S.GS$GS%S.GS&GS'S./SS:S./SASBGS(SSD.SJSKSSSD.SMSNSOSSD.SPSQGS)SSD.SSSTSUSSD.SWGSGS*SSD.SZGS+GS,SSD.S]S^S_SSD.S`SaSbSSD./	SSSSGS
.GS.	rGS-GS.GS/GS0S4S+SS
SSSSSS.SSS.SSS.SSS./SSS.GS1SGS2SSGS3S*SS!GS.	/SASBGS4SSD.SJSKSSSD.SMSQSSSD.SPSTSUSSD.SSGS5GS6SSD.SWSGS	SSD.SZSaSbSSD./S4SSSGS
.GS.	r	\
GS7 5       r\
GS8\\\4   GS9\4GS: j5       r\
GS;\GS<\\\4   GS9\\   4GS= j5       r\
GS;\GS9\4GS> j5       r\
GS;\GS9\\   4GS? j5       r\
GS9\\   4GS@ j5       r\
GS9\\   4GSA j5       r\
GS;\GS9\\\\4      4GSB j5       r\
GSGGS8\\\4   GSC\GS9\\   4GSD jj5       rGSErGgF(H  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)r1   key)r   r   r   r   r   r   r    r!   max_count_rulesr4   	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!   r4   rowsrow_1)r   columnsfieldsrow_20u   用户输入需求u!   语言、漏洞、场景、难度)r   nameoutputr   z0.5u   漏洞主次分类u   主漏洞/辅助漏洞分配zknowledge_count > 1)r   rP   rQ   r   r2   1u   学习与知识提取u    writeup 分析、可借鉴代码2u   知识整理u   可借鉴技巧清单3u   题目设计u   利用链、核心代码预写4u   质量检查u   验证清单)r   rP   rQ   r   skip_forbidden5u   代码生成u   后端代码、Docker 文件6u   Docker 构建与测试u   容器验证7u   exp 和 writeupu   exp.py、writeup.md8u   成品输出u   最终文件结构g      ?g      @g?)rP   	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   rP   r   r(   enabled
sort_orderform_fieldsform_layoutstagesdifficulty_rulesoutput_config	ui_configadvanced_configcryptou	   密码学r=   u]   密码学相关题目，包括古典密码、对称加密、非对称加密、哈希算法等)r   r   r   r   r   r3   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   r3   r    r!   r[   r4   
math_levelu   数学难度
calculatoru   基础u   模运算、异或)r'   r   r(   u   扩展欧几里得、CRTu   高级u   格基约化、椭圆曲线u   算法、难度、数学难度u   writeup 分析u   解题路径设计u   加密脚本生成u   加密脚本、密文u   solve 和 writeupu   solve.py、writeup.md)rP   r[   r\   r   )z.pyz.txtz.zip)ra   rb   rc   rd   attachment_typesre   u   CTF Crypto 题目生成向导u   配置密码学题目参数z#10b981z#3b82f6)rn   rp   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   r[   r    r!   r4   obfuscationu   混淆程度z	eye-slashu   无lightu   轻度mediumu   中度heavyu   重度u   平台、技术、混淆u   逆向路径设计u   二进制生成u   源代码、编译脚本u   solve、writeup.md)ra   rb   rc   rd   )	r   rP   r   r(   rr   rs   rt   rv   rx   pwnu   二进制漏洞uQ   二进制漏洞利用题目，包括栈溢出、堆利用、格式化字符串等archu   架构x86u   x86 (32位)x86_64u   x86_64 (64位)armARMmipsMIPSpwn_vulnerability_db)	r   r   r   r   r   r   r[   r    r!   
protectionu   保护机制z
shield-altnxNXcanaryCanarypiePIErelroRELROaslrASLRu   架构、漏洞、保护u   利用链设计u   源代码、Makefileu   Docker 构建u   容器环境miscu   杂项zpuzzle-pieceu9   杂项题目，包括隐写、取证、编码、脑洞等
skill_typeu   技能类型misc_skill_dbu   技能类型、难度u   题目制作u   题目文件c                     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       P   /Users/yu22x/Desktop/ddd_副本126/ctf/app/services/category/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   rP   r   folderr(    rr   Frs   r   )r   rP   r   r(   rr   rs   rt   ru   difficultiesrv   rw   rx   ry   rz   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.category.prompt_compiler_servicer   compile_and_save_promptsloggingwarningstr)r   r   r   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[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   更新方向配置NrP   r   r(   rr   rs   Frt   ru   r   Trv   prompt_extensionsr   r   promptsrw   rx   ry   system_promptrz   r   r   r   r   
output_dirr   r   u   自动编译 Prompt 失败: )$r   r   r   rP   r   r(   rr   rs   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   r   should_recompile_promptrv   r  stagestage_id
extensionsadvancedr   r   r   s                 r   update_categoryCategoryService.update_categoryS  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 #[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   r   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      s    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
  4@cquv"6B`ns  CX  Y 7Ceswx:Q_cd:Zhlm.VZnrs:Xfjk 8N`de 1=R`de:N\`a
 ASVX[R\knoASVX[R\knoASVX[R\knoATWY]S^mpq	
 !5 %.(
 7 Z-$&(
 ! 	
Wqj 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
  4@`nrs 7CSaef:Q_cd:N\`a.VZ[ 4@Weij 3?Vdhi:N\`a	
 AQYZAQYZAQYZAQYZ	
  7!5
 : =-$&(
 
IHX \ # '  &:&:&:&:	    ! '! )K@*\B+mD$}=	  (4;O" "&' "0(2M $ '#!$u5%9&:%9	  Y;
z  4@Zhlm 7CSaef:Q_cd:N\`a.VZ[ 1=Weij 3?Saef:N\`a	
 	
[Sn !j # '  &:&:&:&:	     !# #m<&1AB#e4$v6	    &&' "8
 #&'$!"T2&:#e4%8$v6  U:
x  4@Zhlm 7CSaef:Q_cd:KY]^.VZ[ 1=Saef>W[\ 1=R`de:N\`a

 	
[Sn R # '  &:&:&:&:	    #&' "1
!
:  4@Weij 7CSaef:N\`a.VZ[.VZ[ 3?Saef:N\`a
 	
Y2h , , 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	   r
   r   r   r   +app.services.category.knowledge_path_configr   r   r)  r   r   <module>r7     s9   
  	 , ,   L]+ ]+r   