§
    ¿K»jbC  ã                  óè  — d Z ddlm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Z	dZ
 ej        e
d¬¦  «          ej        dd¬	¦  «        Zd
ZdZej        ej        _        ej        ej        ej        gej        _        ej        ej        _        ej        ej        ej        ej         ej        ej        ¦  «        gej        _        ej        ej        _        ej        ej        ej        ej        gej        _        ej        gej        _        dZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ' G d„ dej(        ¦  «        Z)d„ Z*d„ Z+d„ Z,d„ Z-d-d.d „Z.d-d!„Z/d"„ Z0d#„ Z1d$„ Z2d/d'„Z3d0d)„Z4d1d*„Z5d+„ Z6e7d,k    r e6¦   «          dS dS )2aÿ  RE Phase 1 - Tim BANG DOI TUONG (NPC/nguoi choi/quai) trong RAM vggame.exe.

CHI DOC (PROCESS_VM_READ + QUERY) - tuyet doi khong WriteProcessMemory.
Can quyen Admin (VietGuard chan non-admin).
Ket qua: logs/re_npc_list/phase1_pid<PID>.txt

Quy trinh:
  0) Liet ke vggame PID, mo handle, doc ten nhan vat tinh (0x6DEC44).
  1) Tim struct nguoi choi bang chu ky property [sig1,100,0,0,sig2,Sta,MaxSta] (nhu PlayerStatsReader).
  2) Xac dinh delta "object base" bang cach quet con tro tro ve vung struct nguoi choi.
  3) Quet candidates (moi struct co toa do tai +0x270/0x274 hop le) = danh sach doi tuong.
  4) Tim MANG CON TRO (pointer array) tro den cac candidate -> day la "danh sach NPC".
  5) Truy vet nguoc len vung static (module) -> chain pointer base on dinh.
é    )ÚannotationsN)ÚwintypeszC:\Projects\JX\logs\re_npc_listT)Úexist_okÚkernel32)Úuse_last_erroré   é   iDìm ifìm iÌfi é   é   i   i   é   é   é  € c                  ó‚   — e Zd Zdej        fdej        fdej        fdej        fdej        fdej        fdej        fgZdS )	ÚMBIÚBaseAddressÚAllocationBaseÚAllocationProtectÚ
RegionSizeÚStateÚProtectÚTypeN)	Ú__name__Ú
__module__Ú__qualname__ÚctypesÚc_void_pr   ÚDWORDÚc_size_tÚ_fields_© ó    ú1c:\Projects\JX\scripts\re_npc_list\scan_phase1.pyr   r   7   s[   € € € € € à	˜œÐ(Ø	˜6œ?Ð+Ø	˜hœnÐ-Ø	�v”Ð'Ø	�(”.Ð!Ø	�H”NÐ#Ø	�”Ð ð€H€H€Hr!   r   c                 ó~  — t          j        g d¢dd¬¦  «        } g }|                      ¦   «         D ]Œ}d„ |                     d¦  «        D ¦   «         }t	          |¦  «        dk    rX|d                              ¦   «         d	k    r:	 |                     t          |d
         ¦  «        ¦  «         Œ|# t          $ r Y Œˆw xY wŒ�|S )N)Útasklistz/FIzIMAGENAME eq vggame.exez/FOÚCSVz/NHTÚreplace)ÚtextÚerrorsc                ó8   — g | ]}|                      d ¦  «        ‘ŒS )ú")Ústrip)Ú.0Úps     r"   ú
<listcomp>zvggame_pids.<locals>.<listcomp>H   s"   € Ð9Ð9Ð9 !�—’˜‘”Ð9Ð9Ð9r!   z","é   r   z
vggame.exer   )	Ú
subprocessÚcheck_outputÚ
splitlinesÚsplitÚlenÚlowerÚappendÚintÚ
ValueError)ÚoutÚpidsÚlineÚpartss       r"   Úvggame_pidsr=   C   sÕ   € Ý
Ô
!Ð"eÐ"eÐ"eØ'+°Ið?ñ ?ô ?€Cà€DØ—’Ñ Ô ð ð ˆØ9Ð9 t§z¢z°%Ñ'8Ô'8Ð9Ñ9Ô9ˆÝˆu‰:Œ:˜Š?ˆ?˜u QœxŸ~š~Ñ/Ô/°<Ò?Ð?ðØ—’�C  a¤™MœMÑ*Ô*Ð*Ð*øÝð ð ð Ø�ðøøøøà€Ks   Â(B,Â,
B9Â8B9c           	     ó  — t          j        |z  ¦   «         }t          j        d¦  «        }t                               | t          j        |¦  «        ||t          j        |¦  «        ¦  «        sd S t          |¦  «        d |j        …         S ©Nr   )	r   Úc_charr   Úk32ÚReadProcessMemoryr   ÚbyrefÚbytesÚvalue)ÚhÚaddrÚsizeÚbufÚbrs        r"   Úread_memrK   Q   sr   € ÝŒ=˜4ÑÑ
"Ô
"€CÝ	Œ˜Ñ	Ô	€BÝ× Ò  ¥F¤O°DÑ$9Ô$9¸3ÀÅfÄlÐSUÑFVÔFVÑWÔWð ØˆtÝ�‰:Œ:�j˜œ�jÔ!Ð!r!   c                óx  — g }d}t          ¦   «         }t          j        |¦  «        }d}||k     �r
t                               | t          j        |¦  «        t          j        |¦  «        |¦  «        dk    rnÄt          |j        pd¦  «        }t          |j	        ¦  «        }|dk    rd}|j
        t          k    o3|j        dz  dk    o%|j        t          z  dk    o|j        t          z  dk    }|r@|j        t           k    r|dk    s*|                     ||t          |j        ¦  «        f¦  «         ||z   }||k     �°
|S )Nr   i  ÿr
   éî   r   )r   r   ÚsizeofrA   ÚVirtualQueryExr   rC   r7   r   r   r   Ú
MEM_COMMITr   ÚPAGE_NOACCESSÚ
PAGE_GUARDr   Ú
MEM_MAPPEDr6   )	rF   ÚregionsrG   ÚmbiÚszÚmaxaÚbaserH   Úreadables	            r"   Úenum_regionsrZ   Y   sE  € Ø€GØ€DÝ
‰%Œ%€CÝ	Œ�sÑ	Ô	€BØ€DØ
�Š+‰+Ý×Ò˜a¥¤°Ñ!6Ô!6½¼ÀSÑ8IÔ8IÈ2ÑNÔNÐRSÒSÐSØÝ�3”?Ð' aÑ(Ô(ˆÝ�3”>Ñ"Ô"ˆØ�1Š9ˆ9ØˆDØ”I¥Ò+ð _°´¸tÑ1CÈÒ0Ið _Øœ¥}Ñ4¸Ò:ð_Ø@CÄÍjÑ@XÐ]^Ò?^ð 	ð ð 	8˜SœX­Ò3Ð3¸Ð?OÒ8OÐ8OØ�NŠN˜D $­¨C¬H©¬Ð6Ñ7Ô7Ð7Ø�d‰{ˆð �Š+‰+ð €Nr!   c              #  ó²   K  — |D ]Q\  }}}d}||k     rCt          t          ||z
  ¦  «        }t          | ||z   |¦  «        }|r
||z   ||fV — ||z  }||k     °CŒRd S r?   )ÚminÚCHUNKrK   )rF   rT   rX   rH   ÚtypÚoffÚnÚdatas           r"   Úiter_chunksrb   o   s�   è è € Ø"ð ð ‰ˆˆd�CØˆØ�DŠjˆjÝ•E˜4 #™:Ñ&Ô&ˆAÝ˜A˜t c™z¨1Ñ-Ô-ˆDØð ,Ø˜S‘j $¨Ð+Ð+Ð+Ð+Ø�1‰HˆCð �DŠjˆjøðð r!   rI   rD   rX   r7   c                óÐ  — t          j        | t           j        ¬¦  «        }|j        }|dk     rg S t          j        d|dz
  ¦  «        }||dz
           }||         }||dz            }||dz            }	||dz            }
||dz            }||dz            }||d	z            }|r[|d
k    |dk     z  |dk    z  |	d
k    z  |
d
k    z  |d
k    z  |dk     z  |d
k    z  |dk     z  |d
k    z  |dk     z  ||k    z  |dk     z  }nS|dk    |dk     z  |d
k    z  |dk     z  |dk    z  |dk     z  |d
k    z  |dk     z  |d
k    z  |dk     z  |d
k    z  |dk     z  }t          j        |¦  «        d
         dz   }g }|D ]w}t          |¦  «        }||dz   dz  z   }|                     |t          ||dz
           ¦  «        t          ||dz            ¦  «        t          ||d	z            ¦  «        f¦  «         Œx|S )zhTim chu ky property [sig1,100,0,0,sig2,Sta,MaxSta] (+HP tai -1 slot). Tra ve list (S_addr, hp, sta, ms).©Údtyper   r   é   r/   é   é   é   é   r   éÈ   éd   é€ðúi † é@ éüÿÿéè  i€–˜ i ¡ )ÚnpÚ
frombufferÚint32rH   ÚarangeÚnonzeror7   r6   )rI   rX   ÚstrictÚar`   ÚiÚhpÚs1Úv100Úz1Úz2Ús2ÚstÚmsÚmÚidxr9   ÚkÚSs                      r"   Úsig_scan_bufferr…   y   sb  € å
Œ�c¥¤Ð*Ñ*Ô*€AØ	Œ€AØˆ2‚v€vØˆ	Ý
Œ	�!�Q˜‘UÑÔ€AØ	
ˆ1ˆq‰5Œ€BØ	
ˆ1Œ€BØˆQ�‰UŒ8€DØ	
ˆ1ˆq‰5Œ€BØ	
ˆ1ˆq‰5Œ€BØ	
ˆ1ˆq‰5Œ€BØ	
ˆ1ˆq‰5Œ€BØ	
ˆ1ˆq‰5Œ€BØð FØ�AŠg˜"˜sš(Ñ# t¨s¢{Ñ3°r¸Q²wÑ?À2ÈÂ7ÑKØ�AŠgñØ˜sš(ñ$Ø')¨A¢vñ/Ø24°z²/ñCà�1Šfñà˜gšñ'à*,°ª(ñ4à79¸G²|ñEˆˆð �EŠk˜b 4šiÑ(¨D°AªIÑ6¸$ÀÒ:KÑLØ�EŠkñØ  4šiñ)Ø,.°ªFñ4Ø79¸J²ñHà�AŠgñà˜wš,ñ(à+-°ª7ñ4à79¸G²|ñEˆõ Œ*�Q‰-Œ-˜Ô
˜QÑ
€CØ
€CØð Eð EˆÝ�‰FŒFˆØ�A˜‘E˜Q‘;ÑˆØ�
Š
�A•s˜1˜Q ™Uœ8‘}”}¥c¨!¨A°©E¬(¡m¤mµS¸¸1¸q¹5¼±]´]ÐCÑDÔDÐDÐDØ€Jr!   c           	     óø  — g d¢}g }|D ]Î\  }}t          | ¦  «        D ]µ\  }}	}
||	z   |k    s||k    rŒt          ||¦  «        }t          ||	z   |¦  «        }d}||z
  }||k     rot          t          ||z
  ¦  «        }t	          | ||z   |¦  «        }|r6t          |||z   |¬¦  «        D ] \  }}}}|                     ||||f¦  «         Œ!||z  }||k     °oŒ¶|r nŒÏ|s  |d|rdnd› d�¦  «         t          | ¦  «        D ]}\  }}	}
d}||	k     rot          t          |	|z
  ¦  «        }t	          | ||z   |¦  «        }|r6t          |||z   |¬¦  «        D ] \  }}}}|                     ||||f¦  «         Œ!||z  }||	k     °oŒ~|S )N))i   i   )i   0i   8)i   Xi   hr   ©rv   z  [sig/rv   Úloosez0] khong thay trong cac range hep -> quet toan bo)rZ   Úmaxr\   r]   rK   r…   r6   )rF   ÚpidÚlogrv   ÚrangesÚfoundÚloÚhirX   rH   r^   Ús0rz   r_   Útotalr`   ra   r„   ry   r   r€   s                        r"   Úfind_player_structr’   ™   s  € Ø[Ð[Ð[€FØ€EØð ð ‰ˆˆBÝ+¨A™œð 	ð 	‰OˆD�$˜Ø�d‰{˜bÒ Ð  D¨B¢J JØå�T˜2‘”ˆBÝ�T˜D‘[ "Ñ%Ô%ˆBØˆCØ˜‘GˆEØ˜’+�+Ý�˜u s™{Ñ+Ô+�Ý  2¨¡8¨QÑ/Ô/�Øð 6Ý+:¸4ÀÀcÁÐRXÐ+YÑ+YÔ+Yð 6ð 6™˜˜B  BØŸš a¨¨R° _Ñ5Ô5Ð5Ð5Ø�q‘�ð ˜’+�+øð ð 	ØˆEð	àð 
ØˆÐg &Ð5�h�h¨gÐgÐgÐgÑhÔhÐhÝ+¨A™œð 	ð 	‰OˆD�$˜ØˆCØ˜’*�*Ý�˜t c™zÑ*Ô*�Ý  4¨#¡:¨qÑ1Ô1�Øð 6Ý+:¸4ÀÈÁÐTZÐ+[Ñ+[Ô+[ð 6ð 6™˜˜B  BØŸš a¨¨R° _Ñ5Ô5Ð5Ð5Ø�q‘�ð ˜’*�*øð €Lr!   c                óú   ‡	— t          | |dz
  d¦  «        Š	‰	rt          ‰	¦  «        dk     rdS ˆ	fd„} |d¦  «        } |d¦  «        } |d¦  «        } |d¦  «        } |d¦  «        } |d	¦  «        }||||||d
œS )zRDoc cac truong quanh S de xac nhan la struct nguoi choi: toa do tai +0x270/+0x274.é@   iÀ  Nc                ó€   •— t          t          j        ‰| | dz   …         t          j        ¬¦  «        d         ¦  «        S )Nrh   rd   r   )r7   rq   rr   rs   )ÚrelÚraws    €r"   Úatzvalidate_player.<locals>.atÂ   s4   ø€ Ý•2”=  S¨¨q© [Ô!1½¼ÐBÑBÔBÀ1ÔEÑFÔFÐFr!   é(   é8   éD   i°  i´  )ry   ÚmanaÚstar€   ÚxÚy)rK   r4   )
rF   r„   r˜   ry   rœ   r�   r€   ÚcxÚcyr—   s
            @r"   Úvalidate_playerr¢   ¼   s½   ø€ å
�1�a˜$‘h Ñ
-Ô
-€CØð •#�c‘(”(˜UÒ"Ð"ØˆtðGð Gð Gð Gð Gð 
ˆˆK‰Œ€BØˆ2ˆk‰?Œ?€DØ
ˆ"ˆT‰(Œ(€CØ	ˆˆH‰Œ€BØ	ˆˆLÑ	Ô	€BØ	ˆˆLÑ	Ô	€BØ˜d¨3°b¸rÈÐKÐKÐKr!   c                ó^  — g }t          | ¦  «        D �]Ÿ\  }}}d}||k     �r�t          t          ||z
  ¦  «        }t          d|dz
  ¦  «        }t          |||z   dz   ¦  «        }	t	          | ||z   |	|z
  ¦  «        }
|
�r(t          j        |
dt          |
¦  «        dz  dz  …         t
          j        ¬¦  «        }|j	        }||z
  dz  }t          d|¦  «        }t          |dz
  ||dz  z   ¦  «        }||k    �r®t          j
        ||¦  «        }||dz
           }||dz
           }||d	z
           }||         }||d	z            }||d
z            }||dz            }|dk    |dk     z  |dk    z  |dk     z  |dk    z  |dk     z  |dk    z  |dk     z  ||k    z  |dk     z  |dk    z  |dk     z  |dk    z  |dk     z  }t          j        |¦  «        d         D ]Ó}t          |¦  «        |z   }||z   |dz  z   }|                     |t          ||dz
           ¦  «        t          ||dz
           ¦  «        t          ||d	z
           ¦  «        t          ||         ¦  «        t          ||d	z            ¦  «        t          ||d
z            ¦  «        t          ||dz            ¦  «        f¦  «         ŒÔ||z  }||k     �°��Œ¡|                     ¦   «          g }|D ]5}|r|d         |d         d         z
  dk     rŒ |                     |¦  «         Œ6 |dt          |¦  «        › dt          |¦  «        › d�¦  «         |S )z`Quet moi S co property-block + toa do hop le tai S+0x270/S+0x274 => candidate object (NPC/quai).r   i   Nrh   rd   rj   éž   ri   r   éœ   é�   rm   ro   rp   rn   i@B r   éÿÿÿÿr”   z  [candidates] z doi tuong (da dedup tu ú))rZ   r\   r]   r‰   rK   rq   rr   r4   rs   rH   rt   ru   r7   r6   Úsort)rF   r‹   ÚcandsrX   rH   r^   r_   r`   Úm0Úm1ra   rw   ÚcntÚoff_inÚj0Új1Újry   rz   r~   r   r€   r    r¡   r�   Úk0rƒ   r„   r9   Úcs                                 r"   Úscan_candidatesr´   Í   s—  € à€EÝ'¨™?œ?ð ñ ‰ˆˆd�CØˆØ�DŠj‰jÝ•E˜4 #™:Ñ&Ô&ˆAÝ�Q˜˜e™Ñ$Ô$ˆBÝ�T˜3 ™7 U™?Ñ+Ô+ˆBÝ˜A˜t b™y¨"¨r©'Ñ2Ô2ˆDØñ cÝ”M $Ð'=­#¨d©)¬)°q©.¸AÑ)=Ð'=Ô">ÅbÄhÐOÑOÔO�Ø”f�Ø ™( q™�Ý˜˜F‘^”^�Ý˜˜s™ F¨Q°!©V¡OÑ4Ô4�Ø˜’7‘7Ýœ	 " bÑ)Ô)�AØ˜1˜q™5œ�BØ˜1˜q™5œ�BØ˜1˜q™5œ�BØ˜1œ�BØ˜1˜q™5œ�BØ˜1˜s™7œ�BØ˜1˜s™7œ�BØ˜qš& R¨*¢_Ñ5¸¸eºÑDÈÈTÊ	ÑRØ˜uš*ñ&Ø)+¨dªñ4Ø79¸Q²wñ@ØCEÈÂ<ñQà š(ñ$à')¨I¢~ñ7ð ˜qš&ñ"ð &(¨(¢]ñ4ð 8:¸A²vñ?ð CEÀxÂ-ñQ�Aõ !œj¨™mœm¨AÔ.ð cð c˜Ý ™GœG b™L˜Ø  2™I¨¨A©Ñ-˜ØŸš a­¨Q¨q°1©u¬X©¬½¸A¸aÀ!¹e¼H¹¼ÅsÈ1ÈQÐQRÉUÌ8Á}Ä}Ý&)¨!¨A¬$¡i¤iµ°Q°q¸1±u´X±´ÅÀAÀaÈ#ÁgÄJÁÄÕQTÐUVÐWXÐ[^ÑW^ÔU_ÑQ`ÔQ`ð&bñ cô cð cð cà�1‰HˆCð; �DŠj‰jùð< 
‡J‚J�L„L€LØ
€CØð ð ˆØð 	�1�Q”4˜#˜bœ' !œ*Ñ$ tÒ+Ð+ØØ�
Š
�1‰ŒˆˆØ€CÐI�#˜c™(œ(ÐIÐI½CÀ¹J¼JÐIÐIÐIÑJÔJÐJØ€Jr!   c                ó
  ‡— t          ˆfd„| D ¦   «         ¦  «        }g }|D ]a\  }}|rC||d         d         dz   k    r.|d         d         t          |d         d         |¦  «        f|d<   ŒJ|                     ||f¦  «         Œb|S )Nc              3  óH   •K  — | ]}t          d |‰z
  ¦  «        |‰z   fV — ŒdS ©r   N)r‰   )r,   ÚtÚradiuss     €r"   ú	<genexpr>z#merged_intervals.<locals>.<genexpr>û   s:   øè è € ÐDÐD°q•3�q˜!˜f™*Ñ%Ô% q¨6¡zÐ2ÐDÐDÐDÐDÐDÐDr!   r§   r   rh   r   )Úsortedr‰   r6   )Útargetsr¹   ÚintsÚmergedÚsÚes    `    r"   Úmerged_intervalsrÁ   ú   s¤   ø€ ÝÐDÐDÐDÐD¸GÐDÑDÔDÑDÔD€DØ€FØð "ð "‰ˆˆ1Øð 	"�a˜6 "œ: aœ=¨1Ñ,Ò,Ð,Ø  œ* Qœ-­¨V°B¬Z¸¬]¸AÑ)>Ô)>Ð?ˆF�2‰JˆJà�MŠM˜1˜a˜&Ñ!Ô!Ð!Ð!Ø€Mr!   FÚ c           	     óª  — t          ||¦  «        }|sg S t          j        d„ |D ¦   «         t          j        ¬¦  «        }t          j        d„ |D ¦   «         t          j        ¬¦  «        }g }t	          | ¦  «        D �]C\  }	}
}|r|	dk    rŒd}||
k     �r*t          t          |
|z
  ¦  «        }t          | |	|z   |¦  «        }|rðt          j        |dt          |¦  «        dz  dz  …         t          j        ¬¦  «        }t          j
        ||d¬	¦  «        d
z
  }|dk    }|                     ¦   «         r�t          j        |¦  «        d         }||         }||         ||         k    }||         D ]D}t          |¦  «        }|                     |	|z   |dz  z   t          ||         ¦  «        f¦  «         ŒE||z  }||
k     �°*�ŒE|                     ¦   «          |S )z[Tra ve list (hit_addr, value) noi value nam trong [t-radius, t+radius] voi t thuoc targets.c                ó   — g | ]\  }}|‘ŒS r    r    )r,   r¿   Ú_s      r"   r.   z pointer_hits.<locals>.<listcomp>
  s   € Ð,Ð,Ð,™T˜Q �qÐ,Ð,Ð,r!   rd   c                ó   — g | ]\  }}|‘ŒS r    r    )r,   rÅ   rÀ   s      r"   r.   z pointer_hits.<locals>.<listcomp>  s   € Ð*Ð*Ð*™4˜1˜a�QÐ*Ð*Ð*r!   i   r   Nrh   Úright)Úsider   )rÁ   rq   ÚarrayÚuint32rZ   r\   r]   rK   rr   r4   ÚsearchsortedÚanyru   r7   r6   r©   )rF   r¼   r¹   Ústatic_onlyÚlabelr¾   ÚstartsÚendsÚhitsrX   rH   r^   r_   r`   ra   rw   ÚposÚvmaskr‚   ÚpvÚokrƒ   s                         r"   Úpointer_hitsrÖ     sê  € å˜g vÑ.Ô.€FØð Øˆ	ÝŒXÐ,Ð, VÐ,Ñ,Ô,µB´IÐ>Ñ>Ô>€FÝŒ8Ð*Ð* 6Ð*Ñ*Ô*µ"´)Ð<Ñ<Ô<€DØ€DÝ'¨™?œ?ð ñ ‰ˆˆd�CØð 	˜4 :Ò-Ð-ØØˆØ�DŠj‰jÝ•E˜4 #™:Ñ&Ô&ˆAÝ˜A˜t c™z¨1Ñ-Ô-ˆDØð 
EÝ”M $Ð'=­#¨d©)¬)°q©.¸AÑ)=Ð'=Ô">ÅbÄiÐPÑPÔP�Ý”o f¨a°gÐ>Ñ>Ô>ÀÑB�Ø˜qš�Ø—9’9‘;”;ð EÝœ* UÑ+Ô+¨AÔ.�CØ˜Sœ�BØ˜3œ 4¨¤8Ò+�BØ  œWð Eð E˜Ý ™FœF˜ØŸš T¨C¡Z°!°a±%Ñ%7½¸Q¸q¼T¹¼Ð$CÑDÔDÐDÐDØ�1‰HˆCð �DŠj‰jùð 	‡I‚I�K„K€KØ€Kr!   rg   c                ó$  — g }g }| D ]`}|r1|d         |d         d         z
  dk    r|                      |¦  «         Œ5t          |¦  «        |k    r|                      |¦  «         |g}Œat          |¦  «        |k    r|                      |¦  «         |S )Nr   r§   rh   )r6   r4   )rÑ   Úmin_lenÚrunsÚcurÚhhs        r"   Ú	find_runsrÜ   $  s£   € Ø€DØ
€CØð ð ˆØð 	�2�a”5˜3˜rœ7 1œ:Ñ%¨Ò*Ð*Ø�JŠJ�r‰NŒNˆNˆNå�3‰xŒx˜7Ò"Ð"Ø—’˜CÑ Ô Ð Ø�$ˆCˆCÝ
ˆ3�x„x�7ÒÐØ�Š�CÑÔÐØ€Kr!   c           	     ó‚  — t          | ||¦  «        }|s |d|d›�¦  «         d S  |d|› d|d›d|› d�¦  «         t          dt          |¦  «        d¦  «        D ]e}|||dz   …         }d	                     d
„ |D ¦   «         ¦  «        }d                     d„ |D ¦   «         ¦  «        }	 |d||z   d›d|› d|	› �¦  «         Œfd S )Nz   dump fail @0xÚXz   --- dump z @0xz (z bytes) ---r   é    ú c              3  ó   K  — | ]}|d ›V — Œ	dS )Ú02XNr    ©r,   Úbs     r"   rº   zdump_window.<locals>.<genexpr>:  s&   è è € Ð2Ð2 q˜1˜
˜
Ð2Ð2Ð2Ð2Ð2Ð2r!   rÂ   c              3  óX   K  — | ]%}d |cxk    rdk     rn nt          |¦  «        ndV — Œ&dS )rß   é   ú.N)Úchrrã   s     r"   rº   zdump_window.<locals>.<genexpr>;  sD   è è € ÐFÐF¸1  a  ¢ ¨#¢    •c˜!‘f”f�f°3ÐFÐFÐFÐFÐFÐFr!   z   Ú08Xz: z  )rK   Úranger4   Újoin)
rF   rG   rH   r‹   rÎ   r—   r_   ÚchunkÚhexsÚascs
             r"   Údump_windowrï   2  s  € Ý
�1�d˜DÑ
!Ô
!€CØð ØˆÐ'˜tÐ'Ð'Ð'Ñ(Ô(Ð(ØˆØ€CÐ=�uÐ=Ð= $Ð=Ð=Ð=¨DÐ=Ð=Ð=Ñ>Ô>Ð>Ý�Q�˜C™œ "Ñ%Ô%ð 3ð 3ˆØ�C˜˜b™�LÔ!ˆØ�xŠxÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆØ�gŠgÐFÐFÀÐFÑFÔFÑFÔFˆØˆÐ1�$˜‘*Ð1Ð1Ð1 DÐ1Ð1¨CÐ1Ð1Ñ2Ô2Ð2Ð2ð	3ð 3r!   c                 óœ  ‡1‡2‡3— dd l } ddlm} t          ¦   «         }t	          d|› �¦  «         |D �]‹}t
          j                             t          d|› d�¦  «        }g }t          j	        ¦   «         }||fd„} |d|› d�¦  «         t                               t          t          z  d	|¦  «        }|s  |d
t          j        ¦   «         › �¦  «         Œ¡	 t!          |t"          d¦  «        }	t!          |t$          d¦  «        }
t!          |t&          d¦  «        }|	r0|	                     dd¦  «        d                              dd¦  «        nd}|
rt,                               |
d¦  «        nd}|r#t,                               |d d…         d¦  «        nd} |d|› d|› d|› �¦  «         g }t1          |||d¬¦  «        } |dt3          |¦  «        › �¦  «         |d d…         D ]Ï\  }}}}t5          ||¦  «        }t7          |o#|d         dk    o|d         dk    o|d         dk    ¦  «        } |d|d ›d!|› d"|› d#|› d$�	|rGd%|d         › d&|d         › d't9          |d         d(z  ¦  «        › d&t9          |d         d)z  ¦  «        › d*�	nd+z   |rd,nd-z   ¦  «         |r|                     ||f¦  «         ŒÐ|sÒ |d.¦  «         t1          |||d	¬¦  «        } |d/t3          |¦  «        › �¦  «         |d d0…         D ]Ž\  }}}}t5          ||¦  «        }t7          |o#|d         dk    o|d         dk    o|d         dk    ¦  «        }|rB|                     ||f¦  «          |d1|d ›d!|› d"|› d#|› d2|d         › d&|d         › d3�¦  «         Œ�|sO |d4¦  «         	 t                               |¦  «          |d|› d5t          j	        ¦   «         |z
  d6›d7�¦  «         �Œ¡|d         \  Š1}|d         |d         cŠ2Š3 |d8‰1d ›d2‰2› d&‰3› d't9          ‰2d(z  ¦  «        › d&t9          ‰3d)z  ¦  «        › d*�¦  «         d9„ t?          |‰1gd:d	¬;¦  «        D ¦   «         } |d<t3          |¦  «        › �¦  «          |ˆ1fd=„|D ¦   «         ¦  «                              d>¦  «        D ]\  }} |d?|› d@|dAz  d ›dB|› �¦  «         ŒtC          ||¦  «        }|�r0| "                    ˆ2ˆ3fdC„¬D¦  «          |dE¦  «         |d dF…         D ]�} |dG|d         d ›d!|d         › dH|dI         › d&|dJ         › dK|d         › d#|dL         › d2|dM         › d&|dN         › dOt9          |dM         ‰2z
  d(z  ¦  «        › d&t9          |dN         ‰3z
  d)z  ¦  «        › d*�¦  «         Œ�|d dI…         D ](}tG          ||d         dPz
  dQ|dR|d         d ›�¦  «         Œ)dS„ |d dT…         D ¦   «         }t?          ||dUd	¬;¦  «        }dV„ |D ¦   «         } |dWt3          |¦  «        › �¦  «         tI          |dJ¬X¦  «        } |dYt3          |¦  «        › �¦  «         tK          dZ„ |D ¦   «         ¦  «        } g }!|D ]�}"d}#|"D ]E\  }$}%|  &                    | |%dUz
  ¦  «        }&|&t3          | ¦  «        k     r| |&         |%dUz   k    r|#dz  }#ŒF|!                     |#t3          |"¦  «        |"d         d         d[„ |"D ¦   «         d d>…         f¦  «         Œ‘|! "                    d¬\¦  «         |!d d…         D ])\  }'}(})}* |d]|)d ›d^|(› d_|'› d`da„ |*D ¦   «         › �¦  «         Œ*db„ |!d dc…         D ¦   «         }+|+r¶t?          ||+dPd¬;¦  «        }, |ddt3          |,¦  «        › �¦  «         |,d d…         D ]\  }-}% |de|-d ›df|%d ›�¦  «         Œ|,rct?          |dg„ |,d d…         D ¦   «         dd¬;¦  «        }. |dht3          |.¦  «        › �¦  «         |.d d…         D ]\  }-}% |di|-d ›df|%d ›�¦  «         ŒnF# tN          $ r9}/dd l(}0 |dj|/› �¦  «          ||0 )                    ¦   «         ¦  «         Y d }/~/nd }/~/ww xY wt                               |¦  «          |d|› d5t          j	        ¦   «         |z
  d6›d7�¦  «         �ŒG# t                               |¦  «          |d|› d5t          j	        ¦   «         |z
  d6›d7�¦  «         w xY wt	          dk¦  «         d S )lNr   )ÚCounterzvggame PIDs: Ú
phase1_pidz.txtc                ó(  — dt          j        d¦  «        › d| › �}t          |¦  «         |                     |¦  «         t	          |dd¬¦  «        5 }|                     d                     |¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nú[z%H:%M:%Sz] Úwzutf-8)Úencodingú
)ÚtimeÚstrftimeÚprintr6   ÚopenÚwriterë   )ÚmsgÚ_linesÚ_pathr¿   Úfs        r"   r‹   zmain.<locals>.logJ  sÒ   € Ø6•D”M *Ñ-Ô-Ð6Ð6°Ð6Ð6ˆAÝ�!‰HŒHˆHØ�MŠM˜!ÑÔÐÝ�e˜S¨7Ð3Ñ3Ô3ð +°qØ—’˜Ÿ	š	 &Ñ)Ô)Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   Á)BÂBÂBz
===== PID z =====FzOpenProcess FAILED err=rß   rh   rf   ó    r   Úlatin1r&   ú?Úlittler§   zname='z' level=z mapId=Tr‡   z  [sig/strict] matches=é   r�   rž   rŸ   z   S=0xrÞ   z hp=z sta=ú/rà   zcoords=(ú,z) HUD=(r   i   r¨   z	read-failz VALIDrÂ   z,  strict khong co struct hop le -> thu loosez  [sig/loose] matches=r™   z   LOOSE S=0xz	 coords=(z) VALIDz   khong co struct hop le -> skipz	 done in z.1fzs =====z  => PlayerS=0xc                óN   — g | ]"}|d          dz  dk    ¯|d         dz  dk    ¯ |‘Œ#S ©r   rg   r   r    ©r,   r¸   s     r"   r.   zmain.<locals>.<listcomp>y  sH   € ÐxÐxÐx˜1ÐUVÐWXÔUYÐ\]ÑU]ÐbcÒTcÐTcÐijÐklÔimÐpqÑiqÐvwÒhwÐhw�QÐhwÐhwÐhwr!   r	   )rÍ   u,     [passA] refs aligned quanh S_p (Â±0x400): c              3  ó(   •K  — | ]\  }}‰|z
  V — Œd S )Nr    )r,   rÅ   ÚvalÚS_ps      €r"   rº   zmain.<locals>.<genexpr>{  s+   øè è € Ð@Ð@©h¨q°#  c¡	Ð@Ð@Ð@Ð@Ð@Ð@r!   é   z     delta=z (0xl   ÿÿ z) xc                ó>   •— | d         ‰z
  dz  | d         ‰z
  dz  z   S )Nrj   r/   é   r    )r³   ÚpxÚpys    €€r"   ú<lambda>zmain.<locals>.<lambda>€  s&   ø€ ¨!¨A¬$°©)¸Ñ)9¸Q¸q¼TÀB¹YÈ1Ñ<LÑ)L€ r!   )Úkeyz  [passB] top 15 gan nhat:é   z	     S=0xz sig=(r/   rg   z) sta=ri   rj   r  z) dHUD~(r”   i@  Úcand0xc                ó   — g | ]
}|d          ‘ŒS )r   r    ©r,   r³   s     r"   r.   zmain.<locals>.<listcomp>ˆ  s   € Ð:Ð:Ð:¨  !¤Ð:Ð:Ð:r!   éú   i   c                ó0   — g | ]}|d          dz  dk    ¯|‘ŒS r	  r    r
  s     r"   r.   zmain.<locals>.<listcomp>Š  s%   € Ð=Ð=Ð=˜q¨a°¬d°Q©h¸1ª_¨_˜¨_¨_¨_r!   z)  [passC] refs (aligned) toi candidates: )rØ   z$  [passC] runs (>=3 slot lien tuc): c              3  ó&   K  — | ]}|d          V — ŒdS r·   r    r  s     r"   rº   zmain.<locals>.<genexpr>Ž  s&   è è € Ð2Ð2 q˜a œdÐ2Ð2Ð2Ð2Ð2Ð2r!   c                ó   — g | ]\  }}|‘ŒS r    r    )r,   rÅ   Úvs      r"   r.   zmain.<locals>.<listcomp>–  s   € ÐATÐATÐATÉÈÈ1À!ÐATÐATÐATr!   )Úreversez     RUN base=0xz len=z	 matched=z sample_vals=c                ó,   — g | ]}t          |¦  «        ‘ŒS r    )Úhex)r,   r  s     r"   r.   zmain.<locals>.<listcomp>™  s#   € ÐZrÐZrÐZrÐfgÕ[^Ð_`Ñ[aÔ[aÐZrÐZrÐZrr!   c                ó6   — g | ]}|d          d k    ¯|d         ‘ŒS )r   r/   r    )r,   r¿   s     r"   r.   zmain.<locals>.<listcomp>›  s%   € ÐCÐCÐC a¸!¸A¼$Àº(¸(˜Q˜qœT¸(¸(¸(r!   é
   z,  [passD] static/global refs toi run bases: z     STATIC? 0xz -> 0xc                ó   — g | ]\  }}|‘ŒS r    r    )r,   ÚhitrÅ   s      r"   r.   zmain.<locals>.<listcomp>¢  s   € Ð/MÐ/MÐ/M¹¸¸Q°Ð/MÐ/MÐ/Mr!   z  [passD.2] refs level-2: z     STATIC2 0xzEXCEPTION: zALL DONE)*ÚbisectÚcollectionsrñ   r=   rú   ÚosÚpathrë   ÚLOG_DIRrø   rA   ÚOpenProcessÚPROCESS_QUERY_INFORMATIONÚPROCESS_VM_READr   Úget_last_errorrK   ÚSTATIC_NAMEÚSTATIC_LEVELÚ
STATIC_MAPr3   Údecoder7   Ú
from_bytesr’   r4   r¢   ÚboolÚroundr6   ÚCloseHandlerÖ   Úmost_commonr´   r©   rï   rÜ   r»   Úbisect_leftÚ	ExceptionÚ	tracebackÚ
format_exc)4r%  rñ   r:   rŠ   Úlog_pathÚlinesÚt0r‹   rF   ÚnmBÚlvBÚmpBÚnameÚlevelÚmapidÚchosenÚmatchesr„   ry   r   r€   r  rÕ   Úmatches2ÚvpÚhitsPÚdr³   rª   Úcand_targetsÚhitsCrÙ   ÚcsetÚscoredÚrunÚmatchedrÅ   r  rx   r�   ÚlnÚ	base_addrÚsampleÚ	top_basesÚhitsDr$  Úlvl2Úexr9  r  r  r  s4                                                    @@@r"   ÚmainrW  ?  sq  øøø€ Ø€M€M€MØ#Ð#Ð#Ð#Ð#Ð#å‰=Œ=€DÝ	Ð
 ˜$Ð
 Ð
 Ñ!Ô!Ð!Øð gJñ gJˆÝ”7—<’<¥Ð)?°cÐ)?Ð)?Ð)?Ñ@Ô@ˆØˆÝŒY‰[Œ[ˆà!¨ð 	+ð 	+ð 	+ð 	+ð 	ˆÐ$˜Ð$Ð$Ð$Ñ%Ô%Ð%Ý�OŠOÕ5½ÑGÈÐPSÑTÔTˆØð 	ØˆCÐC­&Ô*?Ñ*AÔ*AÐCÐCÑDÔDÐDØðV	JÝ˜1�k¨2Ñ.Ô.ˆCÝ˜1�l¨AÑ.Ô.ˆCÝ˜1�j¨!Ñ,Ô,ˆCØKNÐW�3—9’9˜W aÑ(Ô(¨Ô+×2Ò2°8¸YÑGÔGÐGÐTWˆDØ58Ð@•C—N’N 3¨Ñ1Ô1Ð1¸bˆEØ9<ÐD•C—N’N 3 r¨ r¤7¨HÑ5Ô5Ð5À"ˆEØˆCÐ<˜Ð<Ð< uÐ<Ð<°UÐ<Ð<Ñ=Ô=Ð=àˆFÝ(¨¨C°¸TÐBÑBÔBˆGØˆCÐ8­#¨g©,¬,Ð8Ð8Ñ9Ô9Ð9Ø#*¨3¨B¨3¤<ð *ð *‘��B˜˜BÝ# A qÑ)Ô)�Ý˜!ÐJ  %¤¨1¢ÐJ°°3´¸!²ÐJÀÀ#ÄÈÂ
ÑKÔK�Ø�Ð:˜aÐ:Ð:Ð: rÐ:Ð:°Ð:Ð:°RÐ:Ð:Ð:ð  NOð  ?`ð  ?JÈÈ3Ìð  ?Jð  ?JÐRSÐTWÔRXð  ?Jð  ?JÕafÐghÐilÔgmÐnqÑgqÑarÔarð  ?Jð  ?JÕuzÐ{|ð  ~Aô  |Bð  CFñ  |Fñ  vGô  vGð  ?Jð  ?Jð  ?Jð  ?Jð  U`ñ  að  qsð  e{ð  emð  emð  y{ñ  |ñ  }ô  }ð  }Øð *Ø—M’M 1 a &Ñ)Ô)Ð)øØð 	jØ�ÐBÑCÔCÐCÝ-¨a°°cÀ%ÐHÑHÔH�Ø�Ð<­S°©]¬]Ð<Ð<Ñ=Ô=Ð=Ø'/°°°¤}ð jð j‘O�Q˜˜B Ý'¨¨1Ñ-Ô-�AÝ˜aÐN A e¤H¨q¢LÐN°Q°s´V¸a²ZÐNÀAÀcÄFÈQÂJÑOÔO�BØð jØŸš q¨! fÑ-Ô-Ð-Ø˜Ðh¨AÐhÐhÐh°RÐhÐh¸bÐhÐhÀ2ÐhÐhÐPQÐRUÔPVÐhÐhÐYZÐ[^ÔY_ÐhÐhÐhÑiÔiÐiøØð Ø�Ð6Ñ7Ô7Ð7Øõn �OŠO˜AÑÔÐØˆCÐH˜SÐHÐH­4¬9©;¬;¸Ñ+;ÐHÐHÐHÐHÑIÔIÐIÑIðo ˜Q”i‰GˆC�Ø˜”W˜b œgˆFˆB�ØˆCÐb #ÐbÐbÐb°"ÐbÐb°rÐbÐbÅ%ÈÈ3ÉÁ-Ä-ÐbÐbÕRWÐXZÐ[^ÑX^ÑR_ÔR_ÐbÐbÐbÑcÔcÐcàxÐx¥¨Q°°°uÈ%Ð PÑ PÔ PÐxÑxÔxˆEØˆCÐK½sÀ5¹z¼zÐKÐKÑLÔLÐLØ˜Ð@Ð@Ð@Ð@¸%Ð@Ñ@Ô@Ñ@Ô@×LÒLÈRÑPÔPð Cð C‘��1Ø�ÐA !ÐAÐA¨¨Z©ÐAÐAÐA¸aÐAÐAÑBÔBÐBÐBå# A sÑ+Ô+ˆEØñ &HØ—
’
ÐLÐLÐLÐLÐL�
ÑMÔMÐMØ�Ð0Ñ1Ô1Ð1Ø˜s ˜sœð hð h�AØ�Cð g A a¤DÐ]ð gð g°°!´ð gð g¸A¸a¼Dð gð gÀ1ÀQÄ4ð gð gÈqÐQRÌtð gð gÐVWÐXYÔVZð gð gØ#$ Q¤4ðgð gØ*+¨A¬$ðgð gÝ8=¸qÀ¼tÀB¹wÈ¹mÑ8LÔ8Lðgð gÝOTÐVWÐXYÔVZÐ[]ÑV]Ð_bÑUbÑOcÔOcðgð gð gñ hô hð hð hà˜r ˜rœð Oð O�AÝ  1 Q¤4¨$¡;°°sÐ<MÀQÀqÄTÐ<MÐ<MÐ<MÑNÔNÐNÐNà:Ð:¨e°D°S°D¬kÐ:Ñ:Ô:�Ý$ Q¨°eÈÐOÑOÔO�Ø=Ð= EÐ=Ñ=Ô=�Ø�ÐLÅÀEÁ
Ä
ÐLÐLÑMÔMÐMÝ  °Ð2Ñ2Ô2�Ø�ÐF½3¸t¹9¼9ÐFÐFÑGÔGÐGÝÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2�Ø�Øð \ð \�CØ�GØ"%ð )ð )™˜˜3Ø"×.Ò.¨t°S¸5±[ÑAÔA˜Ø�s 4™yœyš=˜=¨T°!¬W¸¸e¹Ò-CÐ-CØ# q™L˜GøØ—M’M 7­C°©H¬H°c¸!´f¸Q´iÐATÐATÐPSÐATÑATÔATÐUXÐVXÐUXÔAYÐ"ZÑ[Ô[Ð[Ð[Ø—’ D�Ñ)Ô)Ð)Ø28¸¸"¸´+ð vð vÑ.�Q˜˜I vØ�CÐt¨9ÐtÐtÐt¸RÐtÐtÈ!ÐtÐtÐZrÐZrÐkqÐZrÑZrÔZrÐtÐtÑuÔuÐuÐuàCÐC¨6°#°2°#¬;ÐCÑCÔC�	Øð 	HÝ(¨¨I°tÈÐNÑNÔN�EØ�CÐSÅsÈ5ÁzÄzÐSÐSÑTÔTÐTØ&+¨C¨R¨C¤jð Dð D™
˜˜cØ˜ÐB¨cÐBÐBÐB¸3ÐBÐBÐBÑCÔCÐCÐCØð HÝ+¨AÐ/MÐ/MÀ%ÈÈÈÄ*Ð/MÑ/MÔ/MÈsÐ`dÐeÑeÔe˜Ø˜ÐD½¸T¹¼ÐDÐDÑEÔEÐEØ*.¨s°¨s¬)ð Hð H™J˜S #Ø˜CÐ F°#Ð FÐ FÐ F¸sÐ FÐ FÐ FÑGÔGÐGÐGøøÝð 	(ð 	(ð 	(ØÐÐÐØˆCÐ"˜bÐ"Ð"Ñ#Ô#Ð#ØˆC�	×$Ò$Ñ&Ô&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'øøøøð	(øøøõ
 �OŠO˜AÑÔÐØˆCÐH˜SÐHÐH­4¬9©;¬;¸Ñ+;ÐHÐHÐHÐHÑIÔIÐIÑIøõ �OŠO˜AÑÔÐØˆCÐH˜SÐHÐH­4¬9©;¬;¸Ñ+;ÐHÐHÐHÐHÑIÔIÐIÐIøøøÝ	ˆ*ÑÔÐÐÐs9   ÃJ;_.ÏP_.ß-a7ß.
`1ß8/`,à'a7à,`1à1a7á7Ab:Ú__main__)T)rI   rD   rX   r7   )FrÂ   )rg   )rÂ   )8Ú__doc__Ú
__future__r   r   r'  r0   rø   r   Únumpyrq   r)  ÚmakedirsÚWinDLLrA   r,  r+  ÚHANDLEr*  Úrestyper   ÚBOOLÚargtypesrB   ÚLPCVOIDÚLPVOIDr   ÚPOINTERrO   r   r5  r.  r/  r0  rP   Ú	MEM_IMAGErS   ÚMEM_PRIVATErR   rQ   r]   Ú	Structurer   r=   rK   rZ   rb   r…   r’   r¢   r´   rÁ   rÖ   rÜ   rï   rW  r   r    r!   r"   ú<module>rh     s¯  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð à
,€Ø €„ˆG˜dÐ #Ñ #Ô #Ð #à€f„m�J¨tÐ4Ñ4Ô4€Ø€Ø"Ð à"œ/€„Ô Ø$œN¨H¬M¸8¼>ÐJ€„Ô Ø (¤€Ô Ô Ø"*¤/°8Ô3CÀXÄ_Ø"(¤/°>°6´>À&Ä/Ñ3RÔ3Rð"T€Ô Ô à#œ_€Ô Ô Ø'œ°Ô0@À&Ä/ÐSYÔSbÐc€Ô Ô Ø$œOÐ,€„Ô à€Ø€Ø€
à€
Ø€	Ø€
Ø€Ø€
Ø€à€ð	ð 	ð 	ð 	ð 	ˆ&Ô
ñ 	ô 	ð 	ðð ð ð"ð "ð "ðð ð ð,ð ð ðð ð ð ð ð@ ð  ð  ð  ðFLð Lð Lð"*ð *ð *ðZð ð ðð ð ð ð>ð ð ð ð
3ð 
3ð 
3ð 
3ðnð nð nðb ˆzÒÐØ€D�F„F€F€F€Fð Ðr!   