Added new ctypes definition

This commit is contained in:
hakril
2020-01-17 21:08:20 +01:00
parent c589a41902
commit 5ae6fb2634
17 changed files with 310 additions and 93 deletions
@@ -0,0 +1,39 @@
/* From ntdbg.h */
#define X86_KGDT_NULL 0
#define X86_KGDT_R0_CODE 8
#define X86_KGDT_R0_DATA 16
#define X86_KGDT_R3_CODE 24
#define X86_KGDT_R3_DATA 32
#define X86_KGDT_TSS 40
#define X86_KGDT_R0_PCR 48
#define X86_KGDT_R3_TEB 56
#define X86_KGDT_VDM_TILE 64
#define X86_KGDT_LDT 72
#define X86_KGDT_DF_TSS 80
#define X86_KGDT_NMI_TSS 88
#define X86_FRAME_EDITED 0xfff8
#define X86_MODE_MASK 1
#define X86_EFLAGS_V86_MASK 0x00020000
#define AMD64_KGDT64_NULL (0 * 16) // NULL descriptor
#define AMD64_KGDT64_R0_CODE (1 * 16) // kernel mode 64-bit code
#define AMD64_KGDT64_R0_DATA (1 * 16) + 8 // kernel mode 64-bit data (stack)
#define AMD64_KGDT64_R3_CMCODE (2 * 16) // user mode 32-bit code
#define AMD64_KGDT64_R3_DATA (2 * 16) + 8 // user mode 32-bit data
#define AMD64_KGDT64_R3_CODE (3 * 16) // user mode 64-bit code
#define AMD64_KGDT64_SYS_TSS (4 * 16) // kernel mode system task state
#define AMD64_KGDT64_R3_CMTEB (5 * 16) // user mode 32-bit TEB
#define AMD64_KGDT64_LAST (6 * 16)
/* From i386.h & amd64.h */
#define MODE_BIT 0
#define MODE_MASK 1 // ntosp
#define RPL_MASK 3
/* Custom usefull define for CS userland values 0x23 * 0x33 */
#define CS_USER_32B (AMD64_KGDT64_R3_CMCODE | RPL_MASK)
#define CS_USER_64B (AMD64_KGDT64_R3_CODE | RPL_MASK)
@@ -334,4 +334,27 @@
SC_MANAGER_ENUMERATE_SERVICE | \
SC_MANAGER_LOCK | \
SC_MANAGER_QUERY_LOCK_STATUS | \
SC_MANAGER_MODIFY_BOOT_CONFIG)
SC_MANAGER_MODIFY_BOOT_CONFIG)
/// Active Directory
#define ADS_RIGHT_DELETE 0x10000
#define ADS_RIGHT_READ_CONTROL 0x20000
#define ADS_RIGHT_WRITE_DAC 0x40000
#define ADS_RIGHT_WRITE_OWNER 0x80000
#define ADS_RIGHT_SYNCHRONIZE 0x100000
#define ADS_RIGHT_ACCESS_SYSTEM_SECURITY 0x1000000
#define ADS_RIGHT_GENERIC_READ 0x80000000
#define ADS_RIGHT_GENERIC_WRITE 0x40000000
#define ADS_RIGHT_GENERIC_EXECUTE 0x20000000
#define ADS_RIGHT_GENERIC_ALL 0x10000000
#define ADS_RIGHT_DS_CREATE_CHILD 0x1
#define ADS_RIGHT_DS_DELETE_CHILD 0x2
#define ADS_RIGHT_ACTRL_DS_LIST 0x4
#define ADS_RIGHT_DS_SELF 0x8
#define ADS_RIGHT_DS_READ_PROP 0x10
#define ADS_RIGHT_DS_WRITE_PROP 0x20
#define ADS_RIGHT_DS_DELETE_TREE 0x40
#define ADS_RIGHT_DS_LIST_OBJECT 0x80
#define ADS_RIGHT_DS_CONTROL_ACCESS 0x100
+6 -1
View File
@@ -14,7 +14,12 @@ class Flag(long):
def __repr__(self):
return "{0}({1:#x})".format(self.name, self)
__str__ = __repr__
# Custom __str__ removed for multiple reason
# Main one -> it breaks the json encoding of structure with flags :)
# Moving to a new politic -> if people want the name in a string use {x!r}
# The __str__ of security descriptor & guid will change soon as well :)
# __str__ = __repr__
# Fix pickling with protocol 2
def __getnewargs__(self, *args):
@@ -535,4 +535,13 @@ BOOL CryptGetOIDFunctionValue(
DWORD *pdwValueType,
BYTE *pbValueData,
DWORD *pcbValueData
);
BOOL CertCloseStore(
HCERTSTORE hCertStore,
DWORD dwFlags
);
BOOL CryptMsgClose(
HCRYPTMSG hCryptMsg
);
@@ -226,3 +226,12 @@ DWORD SetNamedSecurityInfoW(
PACL pDacl,
PACL pSacl
);
/* Not documented but exported : guess from test*/
DWORD GetStringConditionFromBinary(
BYTE* BinaryAceCondition,
DWORD BinaryAceConditionSize,
DWORD Reserved1,
LPWSTR *StringAceCondition
);
@@ -36,6 +36,12 @@ BOOL WINAPI SymGetModuleInfo64(
_Out_ PIMAGEHLP_MODULE64 ModuleInfo
);
BOOL WINAPI SymGetModuleInfoW64(
_In_ HANDLE hProcess,
_In_ DWORD64 qwAddr,
_Out_ PIMAGEHLP_MODULEW64 ModuleInfo
);
BOOL WINAPI SymInitialize(
_In_ HANDLE hProcess,
_In_opt_ LPCSTR UserSearchPath,
@@ -48,7 +54,11 @@ BOOL WINAPI SymFromName(
_Inout_ PSYMBOL_INFO Symbol
);
BOOL WINAPI SymFromNameW(
_In_ HANDLE hProcess,
_In_ PCWSTR Name,
_Inout_ PSYMBOL_INFOW Symbol
);
DWORD64 WINAPI SymLoadModuleEx(
_In_ HANDLE hProcess,
@@ -65,6 +75,8 @@ DWORD WINAPI SymSetOptions(
_In_ DWORD SymOptions
);
DWORD SymGetOptions(
);
BOOL WINAPI SymEnumSymbols(
_In_ HANDLE hProcess,
@@ -247,7 +259,6 @@ BOOL SymEnumSymbolsForAddrW(
);
BOOL WINAPI SymGetTypeFromName(
_In_ HANDLE hProcess,
_In_ ULONG64 BaseOfDll,
@@ -295,11 +306,21 @@ PVOID SymFunctionTableAccess(
DWORD AddrBase
);
PVOID SymFunctionTableAccess64(
HANDLE hProcess,
DWORD64 AddrBase
);
DWORD SymGetModuleBase(
HANDLE hProcess,
DWORD dwAddr
);
DWORD64 SymGetModuleBase64(
HANDLE hProcess,
DWORD64 qwAddr
);
BOOL SymRefreshModuleList(
HANDLE hProcess
);
@@ -361,4 +382,26 @@ BOOL StackWalk(
PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
);
BOOL SymGetSearchPath(
HANDLE hProcess,
PSTR SearchPath,
DWORD SearchPathLength
);
BOOL SymGetSearchPathW(
HANDLE hProcess,
PWSTR SearchPath,
DWORD SearchPathLength
);
BOOL SymSetSearchPath(
HANDLE hProcess,
PCSTR SearchPath
);
BOOL SymSetSearchPathW(
HANDLE hProcess,
PCWSTR SearchPath
);
@@ -0,0 +1,75 @@
typedef struct _EXCEPTION_DEBUG_INFO {
EXCEPTION_RECORD ExceptionRecord;
DWORD dwFirstChance;
} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
typedef struct _CREATE_THREAD_DEBUG_INFO {
HANDLE hThread;
LPVOID lpThreadLocalBase;
LPTHREAD_START_ROUTINE lpStartAddress;
} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
typedef struct _CREATE_PROCESS_DEBUG_INFO {
HANDLE hFile;
HANDLE hProcess;
HANDLE hThread;
LPVOID lpBaseOfImage;
DWORD dwDebugInfoFileOffset;
DWORD nDebugInfoSize;
LPVOID lpThreadLocalBase;
LPTHREAD_START_ROUTINE lpStartAddress;
LPVOID lpImageName;
WORD fUnicode;
} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
typedef struct _EXIT_THREAD_DEBUG_INFO {
DWORD dwExitCode;
} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
typedef struct _EXIT_PROCESS_DEBUG_INFO {
DWORD dwExitCode;
} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
typedef struct _LOAD_DLL_DEBUG_INFO {
HANDLE hFile;
LPVOID lpBaseOfDll;
DWORD dwDebugInfoFileOffset;
DWORD nDebugInfoSize;
LPVOID lpImageName;
WORD fUnicode;
} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
typedef struct _UNLOAD_DLL_DEBUG_INFO {
LPVOID lpBaseOfDll;
} UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
typedef struct _OUTPUT_DEBUG_STRING_INFO {
LPSTR lpDebugStringData;
WORD fUnicode;
WORD nDebugStringLength;
} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
typedef struct _RIP_INFO {
DWORD dwError;
DWORD dwType;
} RIP_INFO, *LPRIP_INFO;
typedef union _TMP_UNION_DEBUG_INFO {
EXCEPTION_DEBUG_INFO Exception;
CREATE_THREAD_DEBUG_INFO CreateThread;
CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
EXIT_THREAD_DEBUG_INFO ExitThread;
EXIT_PROCESS_DEBUG_INFO ExitProcess;
LOAD_DLL_DEBUG_INFO LoadDll;
UNLOAD_DLL_DEBUG_INFO UnloadDll;
OUTPUT_DEBUG_STRING_INFO DebugString;
RIP_INFO RipInfo;
} TMP_UNION_DEBUG_INFO;
typedef struct _DEBUG_EVENT {
DWORD dwDebugEventCode;
DWORD dwProcessId;
DWORD dwThreadId;
_TMP_UNION_DEBUG_INFO u;
} DEBUG_EVENT, *LPDEBUG_EVENT;
@@ -616,7 +616,6 @@ typedef struct _DnsRecordFlags
DWORD Delete : 1;
DWORD CharSet : 2;
DWORD Unused : 3;
DWORD Reserved : 24;
}
DNS_RECORD_FLAGS;
@@ -5,6 +5,7 @@ typedef enum _ACL_INFORMATION_CLASS {
AclSizeInformation = 2,
} ACL_INFORMATION_CLASS;
/* ACL Stuff */
typedef struct _ACL {
@@ -104,7 +104,7 @@ typedef struct _IMAGEHLP_MODULE64 {
CHAR LoadedImageName[256];
CHAR LoadedPdbName[256];
DWORD CVSig;
CHAR CVData[780]; // MAX_PATH * 3
CHAR CVData[MAX_PATH * 3];
DWORD PdbSig;
GUID PdbSig70;
DWORD PdbAge;
@@ -117,6 +117,34 @@ typedef struct _IMAGEHLP_MODULE64 {
BOOL Publics;
} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
typedef struct _IMAGEHLP_MODULEW64 {
DWORD SizeOfStruct;
DWORD64 BaseOfImage;
DWORD ImageSize;
DWORD TimeDateStamp;
DWORD CheckSum;
DWORD NumSyms;
SYM_TYPE SymType;
WCHAR ModuleName[32];
WCHAR ImageName[256];
WCHAR LoadedImageName[256];
WCHAR LoadedPdbName[256];
DWORD CVSig;
WCHAR *CVData[MAX_PATH * 3];
DWORD PdbSig;
GUID PdbSig70;
DWORD PdbAge;
BOOL PdbUnmatched;
BOOL DbgUnmatched;
BOOL LineNumbers;
BOOL GlobalSymbols;
BOOL TypeInfo;
BOOL SourceIndexed;
BOOL Publics;
DWORD MachineType;
DWORD Reserved;
} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
TI_GET_SYMTAG,
@@ -1714,82 +1714,6 @@ typedef struct _SID_IDENTIFIER_AUTHORITY {
BYTE Value[6];
} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
typedef struct _EXCEPTION_DEBUG_INFO {
EXCEPTION_RECORD ExceptionRecord;
DWORD dwFirstChance;
} EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
typedef struct _CREATE_THREAD_DEBUG_INFO {
HANDLE hThread;
LPVOID lpThreadLocalBase;
LPTHREAD_START_ROUTINE lpStartAddress;
} CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
typedef struct _CREATE_PROCESS_DEBUG_INFO {
HANDLE hFile;
HANDLE hProcess;
HANDLE hThread;
LPVOID lpBaseOfImage;
DWORD dwDebugInfoFileOffset;
DWORD nDebugInfoSize;
LPVOID lpThreadLocalBase;
LPTHREAD_START_ROUTINE lpStartAddress;
LPVOID lpImageName;
WORD fUnicode;
} CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
typedef struct _EXIT_THREAD_DEBUG_INFO {
DWORD dwExitCode;
} EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
typedef struct _EXIT_PROCESS_DEBUG_INFO {
DWORD dwExitCode;
} EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
typedef struct _LOAD_DLL_DEBUG_INFO {
HANDLE hFile;
LPVOID lpBaseOfDll;
DWORD dwDebugInfoFileOffset;
DWORD nDebugInfoSize;
LPVOID lpImageName;
WORD fUnicode;
} LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
typedef struct _UNLOAD_DLL_DEBUG_INFO {
LPVOID lpBaseOfDll;
} UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
typedef struct _OUTPUT_DEBUG_STRING_INFO {
LPSTR lpDebugStringData;
WORD fUnicode;
WORD nDebugStringLength;
} OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
typedef struct _RIP_INFO {
DWORD dwError;
DWORD dwType;
} RIP_INFO, *LPRIP_INFO;
typedef union _TMP_UNION_DEBUG_INFO {
EXCEPTION_DEBUG_INFO Exception;
CREATE_THREAD_DEBUG_INFO CreateThread;
CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
EXIT_THREAD_DEBUG_INFO ExitThread;
EXIT_PROCESS_DEBUG_INFO ExitProcess;
LOAD_DLL_DEBUG_INFO LoadDll;
UNLOAD_DLL_DEBUG_INFO UnloadDll;
OUTPUT_DEBUG_STRING_INFO DebugString;
RIP_INFO RipInfo;
} TMP_UNION_DEBUG_INFO;
typedef struct _DEBUG_EVENT {
DWORD dwDebugEventCode;
DWORD dwProcessId;
DWORD dwThreadId;
_TMP_UNION_DEBUG_INFO u;
} DEBUG_EVENT, *LPDEBUG_EVENT;
typedef struct _STRING {
USHORT Length;
+6 -11
View File
@@ -1,18 +1,11 @@
_INITIAL_PSID = PSID
class PSID(_INITIAL_PSID): # _INITIAL_PSID -> PVOID
# def __init__(self, strsid=None):
# if strsid is not None:
# windows.winproxy.ConvertStringSidToSidA(strsid, self)
def __str__(self):
sid_str = LPCSTR()
windows.winproxy.ConvertSidToStringSidA(self, sid_str)
result = sid_str.value
windows.winproxy.LocalFree(sid_str)
return result
def __eq__(self, other):
return windows.winproxy.EqualSid(self, other)
return bool(windows.winproxy.EqualSid(self, other))
def __ne__(self, other):
return not windows.winproxy.EqualSid(self, other)
@property
def size(self):
@@ -37,6 +30,8 @@ class PSID(_INITIAL_PSID): # _INITIAL_PSID -> PVOID
windows.winproxy.LocalFree(sid_str)
return result
__str__ = to_string
def __repr__(self):
try:
return """<{0} "{1}">""".format(type(self).__name__, self.to_string())
@@ -26,11 +26,14 @@ class _GUID(INITIAL_GUID):
__sprint__ = __repr__
def to_string(self):
data4_format = "{0:02X}{1:02X}-" + "".join("{{{i}:02X}}".format(i=i + 2) for i in range(6))
data4_str = data4_format.format(*self.Data4)
return "{0:08X}-{1:04X}-{2:04X}-".format(self.Data1, self.Data2, self.Data3) + data4_str
__str__ = to_string
def update_strid(self):
new_strid = self.to_string()
self.strid = new_strid
@@ -0,0 +1,12 @@
# typedef struct _LOAD_DLL_DEBUG_INFO {
# HANDLE hFile;
# LPVOID lpBaseOfDll;
# DWORD dwDebugInfoFileOffset;
# DWORD nDebugInfoSize;
# LPVOID lpImageName;
# WORD fUnicode;
# } LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
class _LOAD_DLL_DEBUG_INFO(_LOAD_DLL_DEBUG_INFO):
def hello(self):
return "hello"
@@ -0,0 +1,42 @@
class _SERVICE_STATUS_PROCESS(_SERVICE_STATUS_PROCESS):
SERVICE_STATE = FlagMapper(SERVICE_STOPPED,
SERVICE_START_PENDING,
SERVICE_STOP_PENDING,
SERVICE_RUNNING,
SERVICE_CONTINUE_PENDING,
SERVICE_PAUSE_PENDING,
SERVICE_PAUSED)
SERVICE_TYPE = FlagMapper(SERVICE_KERNEL_DRIVER,
SERVICE_FILE_SYSTEM_DRIVER,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_WIN32_SHARE_PROCESS,
SERVICE_INTERACTIVE_PROCESS)
SERVICE_CONTROLE_ACCEPTED = FlagMapper()
SERVICE_FLAGS = FlagMapper(SERVICE_RUNS_IN_SYSTEM_PROCESS)
@property
def dwCurrentState(self):
return self.SERVICE_STATE[super(_SERVICE_STATUS_PROCESS, self).dwCurrentState]
@property
def dwServiceType(self):
return self.SERVICE_TYPE[super(_SERVICE_STATUS_PROCESS, self).dwServiceType]
@property
def dwControlsAccepted(self):
return self.SERVICE_CONTROLE_ACCEPTED[super(_SERVICE_STATUS_PROCESS, self).dwControlsAccepted]
@property
def dwServiceFlags(self):
return self.SERVICE_FLAGS[super(_SERVICE_STATUS_PROCESS, self).dwServiceFlags]
# Python friendly names
state = dwCurrentState
type = dwServiceType
control_accepted = dwControlsAccepted
flags = dwServiceFlags
@@ -0,0 +1,5 @@
old_SYMBOL_INFOW = _SYMBOL_INFOW
class _SYMBOL_INFOW(old_SYMBOL_INFOW):
@property
def tag(self):
return SymTagEnum.mapper[self.Tag]
@@ -0,0 +1,5 @@
class _tagADDRESS64(_tagADDRESS64):
def __repr__(self):
if not self.Segment:
return "<{0} {offset:#x}>".format(type(self).__name__, offset=self.Offset)
return "<{0} {seg:#x}:{offset:#x}>".format(type(self).__name__, seg=self.Segment, offset=self.Offset)