o
    j&,                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ e dkrTedded d	kr_d
ndZG dd dejZG dd dej Z!G dd dej Z"dd Z#dZ$dZ%dZ&dZ'dZ(e$e%B e&B e'B Z)e)e(B Z*e# e"j+j,kre)e(B dB Z-ne)e(B dB Z-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5dZ6d!Z7d"Z8d#Z9d$Z:d%Z;dZ<dZ=d&Z>d'Z?d(Z@d"ZAd'ZBd(ZCd&ZDd)ZE	 ejFZGeGjHZIejJj
eI_KejjLjMZNejJj
eN_KeGjOZOejJj
eO_KeZPejjLjQZRee
e
ePe
e
efeR_SejJjeR_KeTeZUeTe
ZVejjLjWZWd*eW_SeeW_KejjLjXZXeefeX_Se	eX_KejjLjYZYefeY_Se	eY_KejjLjZZZe
e	e
feZ_SeeZ_Kejj[j\Z\ee
ee
e
e
e
fe\_Se	e\_Kd+d, Z]d-d. Z^d/d0 Z_d6d1d2Z`d3d4 Zaebd5kr{ea  dS dS )7    N)	HANDLEBOOLDWORDHWND	HINSTANCEHKEYLPVOIDLPWSTRPBOOL)c_ulongc_char_pc_intc_void_pWinErrorget_last_errorwindll)enable_debug_privilegeWindowsz/This script will ovbiously only work on Windows   P    FTc                   @   sh   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdS )MINIDUMP_TYPEr            r      r   @         i      i      i    i @  i                  i N)__name__
__module____qualname__MiniDumpNormalMiniDumpWithDataSegsMiniDumpWithFullMemoryMiniDumpWithHandleDataMiniDumpFilterMemoryMiniDumpScanMemoryMiniDumpWithUnloadedModules&MiniDumpWithIndirectlyReferencedMemoryMiniDumpFilterModulePathsMiniDumpWithProcessThreadData"MiniDumpWithPrivateReadWriteMemoryMiniDumpWithoutOptionalDataMiniDumpWithFullMemoryInfoMiniDumpWithThreadInfoMiniDumpWithCodeSegsMiniDumpWithoutAuxiliaryStateMiniDumpWithFullAuxiliaryState"MiniDumpWithPrivateWriteCopyMemory MiniDumpIgnoreInaccessibleMemoryMiniDumpWithTokenInformationMiniDumpWithModuleHeadersMiniDumpFilterTriageMiniDumpValidTypeFlags r@   r@   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/utils/createminidump.pyr      s0    r   c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )WindowsBuildi(
  i  ip  i  i#  i%  i (  iZ)  i98  i:  N)r&   r'   r(   WIN_XPWIN_2K3	WIN_VISTAWIN_7WIN_8WIN_BLUEWIN_10_1507WIN_10_1511WIN_10_1607WIN_10_1707r@   r@   r@   rA   rB   -   s    rB   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	WindowsMinBuildi	  i  i  iX  i@  i$  iH&  N)
r&   r'   r(   rC   rD   rE   rF   rG   rH   WIN_10r@   r@   r@   rA   rM   9   s    rM   c                  C   sF   G dd dt j} tt jjd}|  }t | |_|t | |jS )Nc                   @   sD   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d fgZdS )	z&getWindowsBuild.<locals>.OSVersionInfodwOSVersionInfoSizedwMajorVersiondwMinorVersiondwBuildNumberdwPlatformIdszCSDVersionr   N)r&   r'   r(   ctypesr   c_char_fields_r@   r@   r@   rA   OSVersionInfoD   s    rX   GetVersionExA)	rU   	Structuregetattrr   kernel32sizeofrO   byrefrR   )rX   GetVersionExversionr@   r@   rA   getWindowsBuildC   s   ra   r!   r"   r#   r$   r%   i  i  r   r   r   i    i         l        i   @i    i   r   r   r   i  r@   c                 C   s>   t  }t| t|}|dkrtd tt  t|j	 S )Nr   z#Failed to get process version info!)
r   IsWow64ProcessrU   r^   loggingwarningr   r   boolvalue)process_handleis64resr@   r@   rA   is64bitProc   s   

rl   c                  C   sz   t d } |  }t  }tt|t|t|}|dkr'ttt  g S t	|j
tt   }dd |d | D S )Nr    r   c                 S      g | ]}|qS r@   r@   ).0ir@   r@   rA   
<listcomp>       zenum_pids.<locals>.<listcomp>)r   EnumProcessesrU   r^   r]   re   errorr   r   intrh   )	max_arraypProcessIdspBytesReturnedrk   	nReturnedr@   r@   rA   	enum_pids   s   ry   c                  C   s   i } t  D ]K}d| |< tttB d|}|d u r$td|tt f  qtj	t
  }td}t|d|t|}|dkrItd|tt f  q|j | |< q| S )Nz	Not foundFz:[Enum Processes]Failed to open process PID: %d Reason: %s r    r   zD[Enum Proceses]Failed GetProcessImageFileName on PID: %d Reason: %s )ry   OpenProcessPROCESS_QUERY_INFORMATIONPROCESS_VM_READre   debugr   r   rU   rV   MAX_PATHr   QueryFullProcessImageNamer^   rh   decode)pid_to_namepidri   
image_namemax_pathrk   r@   r@   rA   enum_process_names   s   
r   c           
      C   sX  |rt d t }ddg| }t d|  t d|   ttd| }|d u r9t d|   t tt  d S t d|  t	|}|t
krYt d	t
sOd
nd|sTd
ndf  t d t|ttB dd ttd }|dkr}t d t tt  d S t d t|| ||ddd}	t|	st d t tt  t d t| t| d S )NEnabling SeDebugPrivilegefailuresuccessSeDebugPrivilege assignment %szOpening process PID: %dFzFailed to open process PID: %dzProcess handle: 0x%04xz]process architecture mismatch! This could case error! Python arch: %s Target process arch: %sx86x64z$Creating file handle for output filer   zFailed to create filezDumping process to filezFailed to dump process to filezDump file created succsessfully)re   r}   r   rz   PROCESS_ALL_ACCESSrf   rs   r   r   rl   IS_PYTHON_64
CreateFileFILE_GENERIC_READFILE_GENERIC_WRITEFILE_CREATE_ALWAYSFILE_ATTRIBUTE_NORMALMiniDumpWriteDumprg   infoCloseHandle)
r   output_filenamemindumptype
with_debugassignedmsgri   rj   file_handlerk   r@   r@   rA   create_dump   s:   
"




r   c                  C   s   dd l } | jdd}|jddddd |jd	d
dddd |jdd}d|_d|_|jddd}|jddd}|jdd}|jddtdd |jdddd |jddd dd! |	 }|j
dkrhtjtjd" n|j
d#krutjtjd" ntjd#d" tjtjB }|jrtd$ t }d%d&g| }	td'|	  |jdkrt }
d(d) |
D }|  |D ]}td*||
| f  qd S |jdkr|jrtd+|j  t|j|j||jd, |jrt }
|
D ]!}|
| |jd-krtd+|  t||j||jd,  d S qtd. d S d S d S )/Nr   z.Tool to create process dumps using windows API)descriptionz-dz--with-debug
store_truezbenable SeDebugPrivilege, use this if target process is not in the same user context as your script)actionhelpz-vz	--verbosecountzverbosity, add more - see more)r   defaultr   commands)r   TcommandenumzEnumerate running processesdumpzDump running process)requiredz-pz--pidzPID of process to dump)typer   z-nz--namezName of process to dumpz-oz	--outfilezOutput .dmp file name)r   r   )levelr   r   r   r   r   c                 S   rm   r@   r@   )rn   pr@   r@   rA   rp   1  rq   zmain.<locals>.<listcomp>zPID: %d Name: %szDumpig process PID %d)r   r   zFailed to find process by name!)argparseArgumentParseradd_argumentadd_subparsersr   dest
add_parseradd_mutually_exclusive_grouprt   
parse_argsverbosere   basicConfigINFODEBUGr   r)   r+   r   r}   r   r   r   sortr   r   r   outfilenamefind)r   parser
subparsersenumerate_group
dump_grouptarget_groupargsr   r   r   r   tr   r@   r@   rA   main  s^   



r   __main__)F)cossysrU   r   platformre   structctypes.wintypesr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   minidump.utils.privilegesr   system	Exceptioncalcsizer   IntFlagr   EnumrB   rM   ra   DELETEREAD_CONTROL	WRITE_DACWRITE_OWNERSYNCHRONIZESTANDARD_RIGHTS_REQUIREDSTANDARD_RIGHTS_ALLrE   rh   r   FILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETEFILE_FLAG_OPEN_REPARSE_POINTFILE_FLAG_BACKUP_SEMANTICSFILE_CREATE_NEWr   FILE_OPEN_EXISTINGFILE_OPEN_ALWAYSFILE_TRUNCATE_EXISTINGr   r   FILE_GENERIC_EXECUTEFILE_GENERIC_ALLFILE_ATTRIBUTE_READONLYFILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_DIRECTORYr   FILE_ATTRIBUTE_REPARSE_POINTGENERIC_READFILE_READ_ATTRIBUTESr{   r|   r~   psapiPsapiGetProcessImageFileNameAGetProcessImageFileNamewintypesrestyper\   QueryFullProcessImageNameAr   rr   LPSECURITY_ATTRIBUTESCreateFileWr   argtypesPOINTERPHANDLEPDWORDGetCurrentProcessrd   r   rz   DbgHelpr   rl   ry   r   r   r   r&   r@   r@   r@   rA   <module>   s    ,$
	





	







	
!
8
