§
    `‡¬j   ã                  ó¼   — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZ ddlmZmZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )	uD  AutoPOE2 - Unit Tests for Zero-Day Memory Calibrator & Invariants.
========================================================================
Kiá»ƒm thá»­ toÃ n diá»‡n cho ZeroDayMemoryCalibrator:
1. INV-BUILD-01: TrÃ­ch xuáº¥t PE Fingerprint, TimeDateStamp vÃ  SectionLayoutHash.
2. INV-SIG-UNIQUE: Pattern SigScan AOB vá»›i wildcard, RIP displacement resolution.
3. INV-MEM-DYNAMIC-XYZ: Loáº¡i bá»� triá»‡t Ä‘á»ƒ neo tÄ©nh 0x290 / 0x540 / 0x120.
4. INV-VIT-01: Nháº­n diá»‡n CI (HP 1/1), khÃ¡ng UI Marker 778/779, tÃ¡ch rá»�i ES, Ward, Mana, Spirit.
5. INV-OFFSET-01: Ä�á»‹nh dáº¡ng TOML há»£p lá»‡, tá»« chá»‘i tuyá»‡t Ä‘á»‘i Ä‘á»‹a chá»‰ heap tuyá»‡t Ä‘á»‘i.
6. NgÃ¢n sÃ¡ch thá»�i gian < 180s (cháº¡y < 3s).

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 5: 100% dá»¯ liá»‡u thá»±c nghiá»‡m / artifact.
- Rule 14: Quality Gate, 100% tests PASS.
é    )ÚannotationsN)ÚPath)ÚFORBIDDEN_ABSOLUTE_KEYSÚCalibrationResultÚZeroDayMemoryCalibratorc                  óJ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dS )ÚTestZeroDayMemoryCalibratoru@   Test suite kiá»ƒm thá»­ bá»™ hiá»‡u chuáº©n bá»™ nhá»› Zero-Day.ÚreturnÚNonec                ó,   — t          ¦   «         | _        d S )N)r   Ú
calibrator)Úselfs    ú:C:\Projects\AutoPOE2\tests\test_zero_day_mem_calibrator.pyÚsetUpz!TestZeroDayMemoryCalibrator.setUp!   s   € Ý1Ñ3Ô3ˆŒˆˆó    c                óZ  — t          g d¢¦  «        }d}| j                             |¦  «        }|                      t	          |¦  «        d¦  «         |                      |d         ¦  «         |                      |d         ¦  «         |                      |d         ¦  «         |                      |d         ¦  «         |                      |d         ¦  «         |                      |d	         d
¦  «         |                      |d         d¦  «         | j                             ||¦  «        }|                      t	          |¦  «        d¦  «         |                      |d	         d¦  «         d}| j                             |d	         d||¦  «        }|                      ||dz   dz   ¦  «         dS )uD   Kiá»ƒm chá»©ng thuáº­t toÃ¡n quÃ©t chá»¯ kÃ½ AOB vá»›i wildcard '?'.)é�   r   éH   é‹   é   é    r   r   r   r   é…   éÀ   ét   r   r   r   r   éÌ   r   z'48 8B 05 ? ? ? ? 48 85 C0 74 ? 48 8B 48é   é   é   r   é   é   r   r   é   r   é   i   é	   r   N)Úbytesr   Úparse_patternÚassertEqualÚlenÚassertIsNoneÚscan_pattern_bytesÚresolve_rip_rva)r   ÚcodeÚpattern_strÚpatÚmatchesÚtext_vaÚrvas          r   Ú%test_aob_pattern_parsing_and_matchingzATestZeroDayMemoryCalibrator.test_aob_pattern_parsing_and_matching$   sŸ  € õ
 ð 
ð 
ð 
ñ ô ˆð @ˆØŒo×+Ò+¨KÑ8Ô8ˆà×Ò�˜S™œ 2Ñ&Ô&Ð&Ø×Ò˜#˜aœ&Ñ!Ô!Ð!Ø×Ò˜#˜aœ&Ñ!Ô!Ð!Ø×Ò˜#˜aœ&Ñ!Ô!Ð!Ø×Ò˜#˜aœ&Ñ!Ô!Ð!Ø×Ò˜#˜bœ'Ñ"Ô"Ð"Ø×Ò˜˜Qœ Ñ&Ô&Ð&Ø×Ò˜˜Qœ Ñ&Ô&Ð&à”/×4Ò4°T¸3Ñ?Ô?ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø×Ò˜ œ QÑ'Ô'Ð'ð
 ˆØŒo×-Ò-¨g°a¬j¸!¸TÀ7ÑKÔKˆØ×Ò˜˜g¨™k¨DÑ0Ñ1Ô1Ð1Ð1Ð1r   c                óÖ  — | j                              d¦  «        \  }}|                      |d¦  «         |                      |¦  «         | j                              d¦  «        \  }}|                      |d¦  «         |                      |¦  «         | j                              d¦  «        \  }}|                      |d¦  «         |                      |¦  «         | j                              d¦  «        \  }}|                      |d¦  «         |                      |¦  «         | j                              d¦  «        \  }}|                      |d¦  «         |                      |¦  «         dS )uN   Kiá»ƒm chá»©ng INV-MEM-DYNAMIC-XYZ: Tá»« chá»‘i neo tÄ©nh 0x290, 0x540, 0x120.i�  r   i@  i   i   N)r   Úsanitize_pos_offsetr&   Ú
assertTrueÚassertFalse)r   ÚposÚstrippeds      r   Ú"test_inv_mem_dynamic_xyz_strippingz>TestZeroDayMemoryCalibrator.test_inv_mem_dynamic_xyz_strippingF   sY  € ð œ×;Ò;¸EÑBÔB‰ˆˆXØ×Ò˜˜cÑ"Ô"Ð"Ø�Š˜Ñ!Ô!Ð!ð œ×;Ò;¸EÑBÔB‰ˆˆXØ×Ò˜˜cÑ"Ô"Ð"Ø�Š˜Ñ!Ô!Ð!ð œ×;Ò;¸EÑBÔB‰ˆˆXØ×Ò˜˜cÑ"Ô"Ð"Ø�Š˜Ñ!Ô!Ð!ð œ×;Ò;¸CÑ@Ô@‰ˆˆXØ×Ò˜˜cÑ"Ô"Ð"Ø�Š˜Ñ!Ô!Ð!ð œ×;Ò;¸EÑBÔB‰ˆˆXØ×Ò˜˜eÑ$Ô$Ð$Ø×Ò˜Ñ"Ô"Ð"Ð"Ð"r   c                óD  — t          d¦  «        }t          j        d|ddd¦  «         t          j        d|ddd¦  «         t          j        d|ddd¦  «         t          j        d|d	d
d
¦  «         t          j        d|ddd¦  «         | j                             t          |¦  «        ¦  «        }|                      |j        ¦  «         |                      |j	        ¦  «         |  
                    |j        d¦  «         |  
                    |j        d¦  «         |  
                    |j        d¦  «         |  
                    |j        d¦  «         |  
                    |j        d¦  «         |  
                    |j        d
¦  «         |  
                    |j        d¦  «         dS )uD   Kiá»ƒm chá»©ng nháº­n diá»‡n chÃ­nh xÃ¡c Chaos Inoculation (HP 1/1).éT  ú<IIr   r!   é   ii  r   éð   i   il  iL  é   é“   N)Ú	bytearrayÚstructÚ	pack_intor   Úevaluate_vitals_bufferr$   r4   Úis_cir5   Úis_marker_778r&   Úcur_hpÚmax_hpÚcur_esÚmax_esÚcur_wardÚcur_manaÚ
cur_spirit©r   ÚbufÚvitalss      r   Ú$test_vitals_fingerprint_ci_detectionz@TestZeroDayMemoryCalibrator.test_vitals_fingerprint_ci_detectiona   sƒ  € õ ˜ÑÔˆåÔ˜  S¨!¨QÑ/Ô/Ð/åÔ˜  S¨$°Ñ5Ô5Ð5åÔ˜  T¨3°Ñ4Ô4Ð4åÔ˜  U¨C°Ñ5Ô5Ð5åÔ˜  U¨A¨sÑ3Ô3Ð3à”×7Ò7½¸c¹
¼
ÑCÔCˆØ�Š˜œÑ%Ô%Ð%Ø×Ò˜Ô-Ñ.Ô.Ð.Ø×Ò˜œ¨Ñ*Ô*Ð*Ø×Ò˜œ¨Ñ*Ô*Ð*Ø×Ò˜œ¨Ñ-Ô-Ð-Ø×Ò˜œ¨Ñ-Ô-Ð-Ø×Ò˜œ¨#Ñ.Ô.Ð.Ø×Ò˜œ¨#Ñ.Ô.Ð.Ø×Ò˜Ô*¨AÑ.Ô.Ð.Ð.Ð.r   c                óp  — t          d¦  «        }t          j        d|ddd¦  «         t          j        d|ddd¦  «         | j                             t          |¦  «        ¦  «        }|                      |j        ¦  «         |                      |j	        ¦  «         |  
                    d|j        ¦  «         dS )	uD   Kiá»ƒm chá»©ng phÃ¡t hiá»‡n vÃ  cháº·n Ã´ nhiá»…m UI Marker 778/779.r:   r;   r   i
  r<   iè  Ú778N)r@   rA   rB   r   rC   r$   r4   rE   r5   rD   ÚassertInÚ
diagnosticrM   s      r   Ú1test_vitals_fingerprint_anti_778_marker_rejectionzMTestZeroDayMemoryCalibrator.test_vitals_fingerprint_anti_778_marker_rejection{   s¤   € å˜ÑÔˆåÔ˜  S¨#¨sÑ3Ô3Ð3ÝÔ˜  S¨$°Ñ5Ô5Ð5à”×7Ò7½¸c¹
¼
ÑCÔCˆØ�Š˜Ô,Ñ-Ô-Ð-Ø×Ò˜œÑ&Ô&Ð&Ø�Š�e˜VÔ.Ñ/Ô/Ð/Ð/Ð/r   c                ó¦  — t          dddddddgdd	d
œgdddddœddd¬¦  «        }| j                             |¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         t          D ]}|                      |› d�|¦  «         ŒdS )uG   Kiá»ƒm chá»©ng TOML sinh ra tuÃ¢n thá»§ INV-BUILD-01 vÃ  INV-OFFSET-01.TÚ6AA2213Ci<!¢jl   ÖS-\FLc Ú@dc3b3f1bedbf664a21fb71ff6fd178db5e55f588efc53ead026a87d963468714iàÏ\iØÏ\zF0 48 01 1D ? ? ? ?r   )ÚpatternÚ
rip_offsetià  iØ  r   r<   )Úplayer_offsetÚstat_offsetÚ
pos_offsetÚenergy_shield_offsetg333333Ã?)ÚsuccessÚbuild_idÚtime_date_stampÚsection_layout_hashÚfile_sha256Ústatic_rootsÚaob_patternsÚoffsetsÚstatic_anchor_strippedÚgate2_passedÚelapsed_secz"build_time_date_stamp = 0x6AA2213Cz.build_section_layout_hash = 0x3C619311AE16D3D6zstatic_root_1 = 0x45CCFE0z#aob_pattern_1 = F0 48 01 1D ? ? ? ?zpos_offset = 0x0z =N)r   r   Úgenerate_tomlrS   r   ÚassertNotIn)r   ÚcalibÚ	toml_textÚ	forbiddens       r   Útest_generate_toml_invariantsz9TestZeroDayMemoryCalibrator.test_generate_toml_invariants‡   s$  € å!ØØØ&Ø 2ØZØ# YÐ/à0Øðð ð ð
 "'Ø$Ø!Ø(+ð	ð ð $(ØØð'
ñ 
ô 
ˆð, ”O×1Ò1°%Ñ8Ô8ˆ	ð 	�ŠÐ:¸IÑFÔFÐFØ�ŠÐFÈ	ÑRÔRÐRØ�ŠÐ1°9Ñ=Ô=Ð=Ø�ŠÐ;¸YÑGÔGÐGØ�ŠÐ(¨)Ñ4Ô4Ð4õ 1ð 	:ð 	:ˆIØ×Ò 	Ð-Ð-Ð-¨yÑ9Ô9Ð9Ð9ð	:ð 	:r   c                ó†  — | j                              d¬¦  «        }|                      |j        ¦  «         |                      |j        ¦  «         |                      |j        ¦  «         |                      |j        d         d¦  «         |                      |j	        d¦  «         |                      |j	        d¦  «         dS )uT   Kiá»ƒm chá»©ng toÃ n bá»™ quy trÃ¬nh hiá»‡u chuáº©n cháº¡y hoÃ n táº¥t trong < 180s.T)Údry_runr]   r   g     €f@g      @N)
r   Úrun_calibrationr4   r_   rh   rg   r&   rf   Ú
assertLessri   )r   Úress     r   Ú-test_full_calibration_pipeline_execution_timezITestZeroDayMemoryCalibrator.test_full_calibration_pipeline_execution_time¬   s§   € àŒo×-Ò-°dÐ-Ñ;Ô;ˆØ�Š˜œÑ$Ô$Ð$Ø�Š˜Ô(Ñ)Ô)Ð)Ø�Š˜Ô2Ñ3Ô3Ð3Ø×Ò˜œ \Ô2°CÑ8Ô8Ð8Ø�Š˜œ¨Ñ/Ô/Ð/Ø�Š˜œ¨Ñ-Ô-Ð-Ð-Ð-r   N)r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r1   r8   rP   rU   ro   ru   © r   r   r	   r	      s¨   € € € € € ØJÐJð4ð 4ð 4ð 4ð 2ð  2ð  2ð  2ðD#ð #ð #ð #ð6/ð /ð /ð /ð4
0ð 
0ð 
0ð 
0ð#:ð #:ð #:ð #:ðJ.ð .ð .ð .ð .ð .r   r	   Ú__main__)ry   Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrA   ÚtempfileÚunittestÚpathlibr   Ú*src.assistant_tool.zero_day_mem_calibratorr   r   r   ÚTestCaser	   rv   Úmainrz   r   r   ú<module>r‰      sø   ððð ð #Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ðV.ð V.ð V.ð V.ð V. (Ô"3ñ V.ô V.ð V.ðr ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   