o
    Hëià?  ã                   @   s€   d Z ddlZddlZddlZddlZddlmZ ddlmZ dd„ Z	ddd„Z
dd	d
„Zddd„Zdd„ Zedkr>eƒ  dS dS )uY   
è¯»å–å·¥ç¨‹ä¸­æ‰€æœ‰frameworkå¹¶æŠŠæ–¹æ³•å±žæ€§å­˜å‚¨åˆ°project_framework_keywords.txt
é    N)Úoc_util)Úcustom_corec           !   
   C   s‚  t ƒ }t | ¡D ]\}}}|D ]}| d¡rtj ||¡}t|ddddâ}| ¡ }	t 	|	¡\}
}|
D ]E}| 
|d¡d }| 
|d¡d }|rO| |¡ |rV| |¡ |d  ¡ |dd	…  }d
|› }| |¡ d|› }| |¡ | |¡ q6t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ dD ]}| |¡ qÎh d£}| |¡ h d£}| |¡ h d£}| |¡ h d£}| |¡ h d£}| |¡ W d	  ƒ n	1 sw   Y  qqt|dƒ}t|tddD ]} | | › d¡ q"W d	  ƒ |S 1 s:w   Y  |S )u(   
    æå–ç³»ç»Ÿä¸­å…³é”®è¯å‡½æ•°
    ú.hÚrúutf-8Úignore©ÚencodingÚerrors©NNr   é   NÚsetÚ_Úabcdefghijklmnopqrstuvwxyz>   ÚintÚboolÚcharÚlongÚvoidÚfloatÚoff_tÚpid_tÚshortÚdoubleÚint8_tÚsignedÚsize_tÚtime_tÚclock_tÚint16_tÚint32_tÚint64_tÚssize_tÚuint8_tÚwchar_tÚintptr_tÚuint16_tÚuint32_tÚuint64_tÚunsignedÚ	ptrdiff_tÚ	uintptr_t>   ÚidÚIMPÚSELÚBOOLÚClassÚProtocol>#   ÚdoÚifÚforÚautoÚcaseÚelseÚenumÚgotoÚbreakÚconstÚunionÚwhileÚexternÚinlineÚreturnr   ÚsizeofÚstaticÚstructÚswitchÚalignasÚalignofÚdefaultÚtypedefÚ_AlignasÚ_AlignofÚ_GenericÚcontinueÚregisterÚrestrictr)   ÚvolatileÚ	_NoreturnÚ_Thread_localÚ_Static_assert>   r3   Úelifr7   ÚlineÚendifÚerrorÚifdefÚundefÚdefineÚifndefÚimportÚpragmaÚincludeÚwarning>   ÚclassÚfinalÚmacroÚscopeÚiPhoneÚmethodÚmobileÚmoduleÚobjectÚpublicÚprivateÚvirtualÚabstractÚargumentÚfunctionÚinstanceÚvariableÚ	namespaceÚ	parameterÚ	protectedÚwT©ÚkeyÚreverseÚ
)r   ÚosÚwalkÚendswithÚpathÚjoinÚopenÚreadr   Úprocess_property_contentÚgetÚaddÚupperÚ"process_instance_variables_contentÚupdateÚprocess_enums_contentÚprocess_delegates_contentÚprocess_blocks_contentÚprocess_constants_contentÚprocess_class_name_contentÚprocess_methods_contentÚprocess_c_method_contentÚsortedÚlenÚwrite)!Úproject_pathÚ	save_pathÚsymbolsÚrootÚdirsÚfilesÚfileÚ	file_pathÚfÚcontentÚunique_propertiesÚproperty_custom_accessorsÚproperty_nameÚcustom_setterÚcustom_getterÚcapitalizedÚsetter_nameÚ	ivar_nameÚunique_instance_variablesÚ	all_enumsÚall_delegatesÚ
all_blocksÚall_constantsÚclass_matchesÚall_methodsÚall_c_methodsr   Úc_basic_typesÚ
objc_typesÚ
c_keywordsÚpreprocessor_directivesÚprogramming_conceptsÚkeyword© r¯   úI/data/storage/obfuscation/tool/ObjectiveC/oc_custom/custom_a_framework.pyÚget_all_system_symbols   sx   


























Š€ý}ÿ
þûr±   c                 C   sn  |dkrt dƒ |du rtj}|dkrt d|› ƒ tƒ }t |¡D ]V\}}}|D ]N}| d¡rwtj ||¡}|dd… }	|dkrHt d|	› ƒ tj ||	¡}
tj 	|
¡r`t
|
|	|ƒ}| |¡ tj |d¡}tj 	|¡rwt||ƒ}| |¡ q)q"t| d	ƒ}t|td
dD ]
}| |› d¡ q†W d  ƒ n1 s›w   Y  |dkrµt dt|ƒ› dƒ t d| › ƒ |S )uã   
    åˆå§‹åŒ–é¡¹ç›®ï¼Œè¯»å–æ‰€æœ‰frameworkä¸­çš„æ–¹æ³•å’Œå±žæ€§
    
    å‚æ•°:
        save_path: å­˜å‚¨frameworkå…³é”®è¯çš„æ–‡ä»¶è·¯å¾„
        log_level: æ—¥å¿—çº§åˆ« (0: æ— è¾“å‡º, 1: åŸºæœ¬è¾“å‡º, 2: è¯¦ç»†è¾“å‡º)
    r   u   å¼€å§‹åˆ†æžé¡¹ç›®framework...Nu   é¡¹ç›®è·¯å¾„ï¼šz
.frameworkiöÿÿÿu   åˆ†æžframework: ÚHeadersrs   Trt   rw   u   æ€»å…±æ‰¾åˆ° u    ä¸ªframeworkå…³é”®è¯u   å…³é”®è¯å·²ä¿å­˜åˆ°: )Úprintr   Úpath_mix_projectr   rx   ry   rz   r{   r|   ÚexistsÚextract_framework_symbolsr„   Úextract_header_symbolsr}   rŒ   r   rŽ   )r   Ú	log_levelr   Úall_keywordsr’   r“   r”   Údir_nameÚframework_pathÚframework_nameÚbinary_pathÚframework_keywordsÚheaders_pathÚheader_keywordsr—   r®   r¯   r¯   r°   Úinit_project˜   sB   



€îÿþrÁ   c              
   C   s¦  t ƒ }z¥tjdd| gtjtjddd}|jdkr-|dkr*td| › d|j ¡ › d	ƒ |W S |j}| 	d
¡D ]\}| ¡ s<q5| ¡  	d¡}t
|ƒdkr‘|d }d|v r^| 	d¡d }	| |	¡ q5| d¡sh| d¡r‘t d|¡}
|
r‘|
 d¡}	|
 d¡}| |	¡ | 	d¡}t
|ƒdkr‘| |d ¡ q5|dkr¦td|› dt
|ƒ› dƒ W |S W |S  tyÒ } z|dkrÇtd|› dt|ƒ› ƒ W Y d}~|S W Y d}~|S d}~ww )uç   
    ä»ŽframeworkäºŒè¿›åˆ¶æ–‡ä»¶ä¸­æå–ç¬¦å·
    
    å‚æ•°:
        binary_path: frameworkäºŒè¿›åˆ¶æ–‡ä»¶è·¯å¾„
        framework_name: frameworkåç§°
        log_level: æ—¥å¿—çº§åˆ«
    
    è¿”å›ž:
        ç¬¦å·é›†åˆ
    Únmz-gUTF)ÚstdoutÚstderrÚtextÚcheckr   u   è­¦å‘Š: æ— æ³•è¯»å– u    çš„ç¬¦å· (ú)rw   ú é   éÿÿÿÿz_OBJC_CLASS_$_z+[z-[z[\+\-]\[(.*?)\s+(.*?)\]r   é   ú:u   ä»Ž u    æå–äº† u
    ä¸ªç¬¦å·u   é”™è¯¯: å¤„ç†framework u    æ—¶å‡ºé”™: N)r   Ú
subprocessÚrunÚPIPEÚ
returncoder³   rÄ   ÚstriprÃ   Úsplitr   r   Ú
startswithÚreÚsearchÚgroupÚ	ExceptionÚstr)r½   r¼   r¸   r‘   ÚresultÚoutputrT   ÚpartsÚsymbolÚ
class_nameÚmatchÚmethod_nameÚmethod_partsÚer¯   r¯   r°   r¶   Î   sZ   ü




€ùü"
ý€ür¶   c              
   C   s  t ƒ }zÚt | ¡D ]Ñ\}}}|D ]É}| d¡rÙtj ||¡}t|dddd}| ¡ }	W d  ƒ n1 s5w   Y  t 	|	¡\}
}|
D ]E}| 
|d¡d }| 
|d¡d	 }|r\| |¡ |rc| |¡ |d  ¡ |d	d…  }d
|› }| |¡ d|› }| |¡ | |¡ qCt |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ t |	¡}| |¡ qq	W |S  ty } z|dkrútdt|ƒ› ƒ W Y d}~|S W Y d}~|S d}~ww )u±   
    ä»Žframeworkå¤´æ–‡ä»¶ä¸­æå–ç¬¦å·
    
    å‚æ•°:
        headers_path: å¤´æ–‡ä»¶ç›®å½•è·¯å¾„
        log_level: æ—¥å¿—çº§åˆ«
    
    è¿”å›ž:
        ç¬¦å·é›†åˆ
    r   r   r   r   r   Nr   r   r   r   r   u"   é”™è¯¯: å¤„ç†å¤´æ–‡ä»¶æ—¶å‡ºé”™: )r   rx   ry   rz   r{   r|   r}   r~   r   r   r€   r   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   r×   r³   rØ   )r¿   r¸   r‘   r’   r   r”   Ú	file_nameÚheader_pathr—   r˜   r™   rš   r›   rœ   r   rž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   rá   r¯   r¯   r°   r·     sf   

ÿ





















€ÅÿCü
ý€ür·   c                  C   sJ   t tjƒdk rtdƒ tdƒ t d¡ tjd } tjd }t| |ƒ d S )NrÉ   uQ   ç”¨æ³•: python custom_a_framework.py <project_path> <save_project_framework_path>uq   ç¤ºä¾‹: python custom_a_framework.py /Users/xxx/Desktop/project /Users/xxx/Desktop/project_framework_keywords.txtr   rË   )r   ÚsysÚargvr³   Úexitr±   )r   Úsave_project_framework_pathr¯   r¯   r°   Úmaini  s   


rè   Ú__main__)r   N)r   )Ú__doc__rä   rx   rÔ   rÍ   Ú
ObjectiveCr   ÚObjectiveC.oc_customr   r±   rÁ   r¶   r·   rè   Ú__name__r¯   r¯   r¯   r°   Ú<module>   s      

6
GT
ÿ