From 3243f6e8fc0ee80bb2a13e5ff724814c0d2f3200 Mon Sep 17 00:00:00 2001 From: Clement Rouault Date: Wed, 27 Apr 2016 16:36:17 +0200 Subject: [PATCH] more doc --- TODO | 9 - doc/source/com.rst | 42 ++- doc/source/index.rst | 1 + doc/source/sample.rst | 27 +- doc/source/various.rst | 1 - doc/source/winproxy.rst | 424 ++++++++++++++++++++++- samples/debugger.py | 5 + samples/local_debugger.py | 5 + samples/local_debugger_remote_process.py | 5 + samples/native_utils.py | 5 + samples/network.py | 1 - samples/remote_veh_segv.py | 7 +- samples/veh_segv.py | 5 + windows/debug.py | 16 +- windows/utils/winutils.py | 2 + 15 files changed, 510 insertions(+), 45 deletions(-) diff --git a/TODO b/TODO index 3afde44..8905f95 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,6 @@ TODO: - Documentation - Pass 0.2 when doc is done <3 - - type pass to dbg callback - ProcessMemory object ? (metasm like) @@ -42,17 +41,9 @@ TODO: CHANGELOG: - * NEW REGISTRY -> change examples and documentation - * WinProcess is not a PROCESSENTRY32 anymore (change doc) * re-check every sample Documentation - * Debugger - * LocalDebugger - * windows.com - * New stuff in exception ? - * windows.utils - * verif samples FIXME: diff --git a/doc/source/com.rst b/doc/source/com.rst index 8044eb4..307bcf2 100644 --- a/doc/source/com.rst +++ b/doc/source/com.rst @@ -1,21 +1,43 @@ -COM - Component Object Model -"""""""""""""""""""""""""""" +:mod:`windows.com` - Component Object Model +"""""""""""""""""""""""""""""""""""""""""""" + +.. module:: windows.com A module to call `COM` interfaces from `Python` or `COM` vtable in python. -This code is only used in :mod:`windows.wmi`. +This code is only used in :mod:`windows.winobject.wmi` and :mod:`windows.winobject.network` for the firewall. The ability to create `COM` vtable is used in the `LKD project `_ . -To call a `COM` interface you need to: +Using a COM interface +''''''''''''''''''''' - 1. Describe the `COM` interface `CODE1 `_ - 2. Use an instance (which is a PVOID) to get the interface `CODE2 `_ - 3. Use the object ! `CODE3 `_ +It's possible to directly call `COM` interface from python. All you need is the definition of the `COM` interface. + +There are three ways to get the definition of the code interface: + + * By using it from :mod:`windows.generated_def.interfaces` + * By writing it yourself : `_ + * By generating it. + +To generate a `COM` interface you need its definition from the ".c" file. +Then add thisit to ``PythonForWindows\ctypes_generation\com\MyInterface.txt``. +Finally re-generate the interface using ``generate.py``. + +When you have the `COM` interface defintion you can create an instance of it. +Then you need to retrieve the interface by using an API returning an object or :func:`window.com.create_instance`. +You can then use the instance to call whatever method you need. + +.. note:: + + see sample :ref:`sample_com_firewall` + +Implementing a COM interface +'''''''''''''''''''''''''''' To create `COM` object you need to: - 1. Describe your ComVtable `CODE4 `_ - 2. Implement the python functions described `CODE5 `_ - 3. Create an instance and pass it to whatever native function expects it `CODE6 `_ \ No newline at end of file + 1. Describe your ComVtable `CODE1 `_ + 2. Implement the python functions described `CODE2 `_ + 3. Create an instance and pass it to whatever native function expects it `CODE3 `_ \ No newline at end of file diff --git a/doc/source/index.rst b/doc/source/index.rst index fda44bf..6246398 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -19,6 +19,7 @@ Contents: utils.rst wintrust.rst debug.rst + com.rst iat_hook.rst wip.rst internals.rst diff --git a/doc/source/sample.rst b/doc/source/sample.rst index d0a2f4b..ad71782 100644 --- a/doc/source/sample.rst +++ b/doc/source/sample.rst @@ -436,4 +436,29 @@ Ouput:: * {'Caption': u'C:', 'FreeSpace': u'43991547904', 'FileSystem': u'NTFS'} * {'Caption': u'E:', 'FreeSpace': u'82776027136', 'FileSystem': u'NTFS'} * {'Caption': u'F:', 'FreeSpace': u'5711265792', 'FileSystem': u'FAT32'} - * {'Caption': u'G:', 'FreeSpace': None, 'FileSystem': None} \ No newline at end of file + * {'Caption': u'G:', 'FreeSpace': None, 'FileSystem': None} + +.. _sample_com_firewall: + +using COM: ``INetFwPolicy2`` +'''''''''''''''''''''''''''' + +.. literalinclude:: ..\..\samples\com_inetfwpolicy2.py + +Output:: + + (cmd λ) python .\samples\com_inetfwpolicy2.py + Initialisation of COM + Creating INetFwPolicy2 variable + (value = None) + + Generating CLSID + + + Creating COM instance + (value = 0x8984848) + + Checking for enabled profiles + * NET_FW_PROFILE2_DOMAIN(0x1L) -> True + * NET_FW_PROFILE2_PRIVATE(0x2L) -> True + * NET_FW_PROFILE2_PUBLIC(0x4L) -> True \ No newline at end of file diff --git a/doc/source/various.rst b/doc/source/various.rst index b856450..4a9ea92 100644 --- a/doc/source/various.rst +++ b/doc/source/various.rst @@ -15,5 +15,4 @@ This sections describes them by group of relation. network.rst service.rst volume.rst - com.rst wmi.rst \ No newline at end of file diff --git a/doc/source/winproxy.rst b/doc/source/winproxy.rst index af3b6e1..87a68d2 100644 --- a/doc/source/winproxy.rst +++ b/doc/source/winproxy.rst @@ -88,24 +88,42 @@ Transparent proxies: * DebugBreak() * DebugBreakProcess(Process) * DebugSetProcessKillOnExit(KillOnExit) +* EnumWindows(lpEnumFunc, lParam) * ExitProcess(uExitCode) * ExitThread(dwExitCode) * FreeConsole() +* GetComputerNameA(lpBuffer, lpnSize) +* GetComputerNameW(lpBuffer, lpnSize) * GetCurrentProcess() * GetCurrentProcessorNumber() * GetCurrentThread() * GetCurrentThreadId() +* GetDriveTypeA(lpRootPathName) +* GetDriveTypeW(lpRootPathName) * GetExitCodeProcess(hProcess, lpExitCode) * GetExitCodeThread(hThread, lpExitCode) * GetLastError() +* GetLogicalDriveStringsA(nBufferLength, lpBuffer) +* GetLogicalDriveStringsW(nBufferLength, lpBuffer) * GetProcAddress(hModule, lpProcName) * GetProcessId(Process) * GetSidSubAuthority(pSid, nSubAuthority) * GetSidSubAuthorityCount(pSid) * GetStdHandle(nStdHandle) +* GetSystemMetrics(nIndex) * GetThreadId(Thread) +* GetVersionExA(lpVersionInformation) +* GetVersionExW(lpVersionInformation) +* GetVolumeNameForVolumeMountPointA(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength) +* GetVolumeNameForVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength) +* GetWindowModuleFileNameA(hwnd, pszFileName, cchFileNameMax) +* GetWindowModuleFileNameW(hwnd, pszFileName, cchFileNameMax) +* GetWindowTextA(hWnd, lpString, nMaxCount) +* GetWindowTextW(hWnd, lpString, nMaxCount) * LoadLibraryA(lpFileName) * LoadLibraryW(lpFileName) +* QueryDosDeviceA(lpDeviceName, lpTargetPath, ucchMax) +* QueryDosDeviceW(lpDeviceName, lpTargetPath, ucchMax) * ResumeThread(hThread) * SetStdHandle(nStdHandle, hHandle) * SetTcpEntry(pTcpRow) @@ -117,6 +135,8 @@ Transparent proxies: * Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection) * Wow64GetThreadContext(hThread, lpContext) * Wow64RevertWow64FsRedirection(OldValue) +* lstrcmpA(lpString1, lpString2) +* lstrcmpW(lpString1, lpString2) Functions: * AddVectoredContinueHandler:: @@ -137,12 +157,52 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* AlpcGetMessageAttribute:: + + AlpcGetMessageAttribute(Buffer, AttributeFlag) + Errcheck: + Nothing special + +* AlpcInitializeMessageAttribute:: + + AlpcInitializeMessageAttribute(AttributeFlags, Buffer, BufferSize, RequiredBufferSize) + +* CoCreateInstance:: + + CoCreateInstance(rclsid, pUnkOuter=None, dwClsContext=tagCLSCTX.CLSCTX_INPROC_SERVER(0x1L), riid=NeededParameter, ppv=NeededParameter) + Errcheck: + Nothing special + +* CoInitializeEx:: + + CoInitializeEx(pvReserved=None, dwCoInit=tagCOINIT.COINIT_MULTITHREADED(0x0L)) + Errcheck: + Nothing special + +* CoInitializeSecurity:: + + CoInitializeSecurity(pSecDesc, cAuthSvc, asAuthSvc, pReserved1, dwAuthnLevel, dwImpLevel, pAuthList, dwCapabilities, pReserved3) + Errcheck: + Nothing special + * CreateFileA:: CreateFileA(lpFileName, dwDesiredAccess=GENERIC_READ(0x80000000L), dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING(0x3L), dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL(0x80L), hTemplateFile=None) Errcheck: raise Kernel32Error if result is NOT 0 +* CreateFileMappingA:: + + CreateFileMappingA(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE(0x4L), dwMaximumSizeHigh=0, dwMaximumSizeLow=NeededParameter, lpName=NeededParameter) + Errcheck: + raise Kernel32Error if result is 0 + +* CreateFileMappingW:: + + CreateFileMappingW(hFile, lpFileMappingAttributes=None, flProtect=PAGE_READWRITE(0x4L), dwMaximumSizeHigh=0, dwMaximumSizeLow=0, lpName=NeededParameter) + Errcheck: + raise Kernel32Error if result is 0 + * CreateFileW:: CreateFileW(lpFileName, dwDesiredAccess=GENERIC_READ(0x80000000L), dwShareMode=0, lpSecurityAttributes=None, dwCreationDisposition=OPEN_EXISTING(0x3L), dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL(0x80L), hTemplateFile=None) @@ -179,27 +239,213 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* CryptCATAdminAcquireContext:: + + CryptCATAdminAcquireContext(phCatAdmin, pgSubsystem, dwFlags) + Errcheck: + raise Kernel32Error if result is 0 + +* CryptCATAdminCalcHashFromFileHandle:: + + CryptCATAdminCalcHashFromFileHandle(hFile, pcbHash, pbHash, dwFlags) + Errcheck: + raise Kernel32Error if result is 0 + +* CryptCATAdminEnumCatalogFromHash:: + + CryptCATAdminEnumCatalogFromHash(hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo) + Errcheck: + Nothing special + +* CryptCATAdminReleaseCatalogContext:: + + CryptCATAdminReleaseCatalogContext(hCatAdmin, hCatInfo, dwFlags) + Errcheck: + Nothing special + +* CryptCATAdminReleaseContext:: + + CryptCATAdminReleaseContext(hCatAdmin, dwFlags) + Errcheck: + Nothing special + +* CryptCATCatalogInfoFromContext:: + + CryptCATCatalogInfoFromContext(hCatInfo, psCatInfo, dwFlags) + Errcheck: + raise Kernel32Error if result is 0 + * DeviceIoControl:: DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize=None, lpOutBuffer=NeededParameter, nOutBufferSize=None, lpBytesReturned=None, lpOverlapped=None) Errcheck: raise Kernel32Error if result is 0 -* GetExtendedTcpTable:: +* DuplicateHandle:: - GetExtendedTcpTable(pTcpTable, pdwSize=None, bOrder=True, ulAf=NeededParameter, TableClass=5, Reserved=0) - Errcheck: - raise IphlpapiError if result is NOT 0 - -* GetMappedFileNameA:: - - GetMappedFileNameA(hProcess, lpv, lpFilename, nSize=None) + DuplicateHandle(hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, lpTargetHandle, dwDesiredAccess=0, bInheritHandle=False, dwOptions=0) Errcheck: raise Kernel32Error if result is 0 -* GetMappedFileNameW:: +* EnumServicesStatusExA:: - GetMappedFileNameW(hProcess, lpv, lpFilename, nSize=None) + EnumServicesStatusExA(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName) + Errcheck: + raise Kernel32Error if result is 0 + +* EnumServicesStatusExW:: + + EnumServicesStatusExW(hSCManager, InfoLevel, dwServiceType, dwServiceState, lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned, lpResumeHandle, pszGroupName) + Errcheck: + raise Kernel32Error if result is 0 + +* GetExtendedTcpTable:: + + GetExtendedTcpTable(pTcpTable, pdwSize=None, bOrder=True, ulAf=NeededParameter, TableClass=_TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL(0x5L), Reserved=0) + Errcheck: + raise IphlpapiError if result is NOT 0 + +* GetFileVersionInfoA:: + + GetFileVersionInfoA(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter) + Errcheck: + raise Kernel32Error if result is 0 + +* GetFileVersionInfoSizeA:: + + GetFileVersionInfoSizeA(lptstrFilename, lpdwHandle=None) + Errcheck: + raise Kernel32Error if result is 0 + +* GetFileVersionInfoSizeW:: + + GetFileVersionInfoSizeW(lptstrFilename, lpdwHandle=None) + Errcheck: + raise Kernel32Error if result is 0 + +* GetFileVersionInfoW:: + + GetFileVersionInfoW(lptstrFilename, dwHandle=0, dwLen=None, lpData=NeededParameter) + Errcheck: + raise Kernel32Error if result is 0 + +* GetIfTable:: + + GetIfTable(pIfTable, pdwSize, bOrder=False) + Errcheck: + raise IphlpapiError if result is NOT 0 + +* GetInterfaceInfo:: + + GetInterfaceInfo(pIfTable, dwOutBufLen=None) + Errcheck: + raise IphlpapiError if result is NOT 0 + +* GetIpAddrTable:: + + GetIpAddrTable(pIpAddrTable, pdwSize, bOrder=False) + Errcheck: + raise IphlpapiError if result is NOT 0 + +* GetMappedFileNameAWrapper:: + + GetMappedFileNameAWrapper(hProcess, lpv, lpFilename, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetMappedFileNameAWrapper:: + + GetMappedFileNameAWrapper(hProcess, lpv, lpFilename, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetMappedFileNameWWrapper:: + + GetMappedFileNameWWrapper(hProcess, lpv, lpFilename, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetMappedFileNameWWrapper:: + + GetMappedFileNameWWrapper(hProcess, lpv, lpFilename, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetModuleBaseNameAWrapper:: + + GetModuleBaseNameAWrapper(hProcess, hModule, lpBaseName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetModuleBaseNameAWrapper:: + + GetModuleBaseNameAWrapper(hProcess, hModule, lpBaseName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetModuleBaseNameWWrapper:: + + GetModuleBaseNameWWrapper(hProcess, hModule, lpBaseName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetModuleBaseNameWWrapper:: + + GetModuleBaseNameWWrapper(hProcess, hModule, lpBaseName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetProcessImageFileNameAWrapper:: + + GetProcessImageFileNameAWrapper(hProcess, lpImageFileName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetProcessImageFileNameAWrapper:: + + GetProcessImageFileNameAWrapper(hProcess, lpImageFileName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetProcessImageFileNameWWrapper:: + + GetProcessImageFileNameWWrapper(hProcess, lpImageFileName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetProcessImageFileNameWWrapper:: + + GetProcessImageFileNameWWrapper(hProcess, lpImageFileName, nSize=None) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* GetProcessTimes:: + + GetProcessTimes(hProcess, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime) Errcheck: raise Kernel32Error if result is 0 @@ -215,10 +461,34 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* GetVolumeInformationA:: + + GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize) + Errcheck: + raise Kernel32Error if result is 0 + +* GetVolumeInformationW:: + + GetVolumeInformationW(lpRootPathName, lpVolumeNameBuffer=None, nVolumeNameSize=0, lpVolumeSerialNumber=None, lpMaximumComponentLength=None, lpFileSystemFlags=None, lpFileSystemNameBuffer=None, nFileSystemNameSize=0) + Errcheck: + raise Kernel32Error if result is 0 + * LdrLoadDll:: LdrLoadDll(PathToFile, Flags, ModuleFileName, ModuleHandle) +* LookupAccountSidA:: + + LookupAccountSidA(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse) + Errcheck: + raise Kernel32Error if result is 0 + +* LookupAccountSidW:: + + LookupAccountSidW(lpSystemName, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse) + Errcheck: + raise Kernel32Error if result is 0 + * LookupPrivilegeValueA:: LookupPrivilegeValueA(lpSystemName=None, lpName=NeededParameter, lpLuid=NeededParameter) @@ -231,6 +501,28 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* MapViewOfFile:: + + MapViewOfFile(hFileMappingObject, dwDesiredAccess=FILE_MAP_ALL_ACCESS(0xf001fL), dwFileOffsetHigh=0, dwFileOffsetLow=0, dwNumberOfBytesToMap=NeededParameter) + Errcheck: + raise Kernel32Error if result is 0 + +* NtAlpcAcceptConnectPort:: + + NtAlpcAcceptConnectPort(PortHandle, ConnectionPortHandle, Flags, ObjectAttributes, PortAttributes, PortContext, ConnectionRequest, ConnectionMessageAttributes, AcceptConnection) + +* NtAlpcConnectPort:: + + NtAlpcConnectPort(PortHandle, PortName, ObjectAttributes, PortAttributes, Flags, RequiredServerSid, ConnectionMessage, BufferLength, OutMessageAttributes, InMessageAttributes, Timeout) + +* NtAlpcCreatePort:: + + NtAlpcCreatePort(PortHandle, ObjectAttributes, PortAttributes) + +* NtAlpcSendWaitReceivePort:: + + NtAlpcSendWaitReceivePort(PortHandle, Flags, SendMessage, SendMessageAttributes, ReceiveMessage, BufferLength, ReceiveMessageAttributes, Timeout) + * NtCreateThreadEx:: NtCreateThreadEx(ThreadHandle=None, DesiredAccess=2097151, ObjectAttributes=0, ProcessHandle=NeededParameter, lpStartAddress=NeededParameter, lpParameter=NeededParameter, CreateSuspended=0, dwStackSize=0, Unknown1=0, Unknown2=0, Unknown=0) @@ -239,6 +531,26 @@ Functions: NtGetContextThread(hThread, lpContext) +* NtOpenDirectoryObject:: + + NtOpenDirectoryObject(DirectoryHandle, DesiredAccess, ObjectAttributes) + +* NtOpenEvent:: + + NtOpenEvent(EventHandle, DesiredAccess, ObjectAttributes) + +* NtOpenSymbolicLinkObject:: + + NtOpenSymbolicLinkObject(LinkHandle, DesiredAccess, ObjectAttributes) + +* NtProtectVirtualMemory:: + + NtProtectVirtualMemory(ProcessHandle, BaseAddress, NumberOfBytesToProtect, NewAccessProtection, OldAccessProtection=None) + +* NtQueryDirectoryObject:: + + NtQueryDirectoryObject(DirectoryHandle, Buffer, Length, ReturnSingleEntry, RestartScan, Context, ReturnLength) + * NtQueryInformationProcess:: NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength=0, ReturnLength=None) @@ -247,6 +559,14 @@ Functions: NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength=0, ReturnLength=None) +* NtQueryObject:: + + NtQueryObject(Handle, ObjectInformationClass, ObjectInformation=None, ObjectInformationLength=0, ReturnLength=NeededParameter) + +* NtQuerySymbolicLinkObject:: + + NtQuerySymbolicLinkObject(LinkHandle, LinkTarget, ReturnedLength) + * NtQuerySystemInformation:: NtQuerySystemInformation(SystemInformationClass, SystemInformation=None, SystemInformationLength=0, ReturnLength=NeededParameter) @@ -263,6 +583,22 @@ Functions: NtWow64ReadVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None) +* NtWow64WriteVirtualMemory64:: + + NtWow64WriteVirtualMemory64(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesWritten=None) + +* OpenEventA:: + + OpenEventA(dwDesiredAccess, bInheritHandle, lpName) + Errcheck: + raise Kernel32Error if result is 0 + +* OpenEventW:: + + OpenEventW(dwDesiredAccess, bInheritHandle, lpName) + Errcheck: + raise Kernel32Error if result is 0 + * OpenProcess:: OpenProcess(dwDesiredAccess=PROCESS_ALL_ACCESS(0x1f0fffL), bInheritHandle=0, dwProcessId=NeededParameter) @@ -276,6 +612,18 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* OpenSCManagerA:: + + OpenSCManagerA(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS(0xf003fL)) + Errcheck: + raise Kernel32Error if result is 0 + +* OpenSCManagerW:: + + OpenSCManagerW(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS(0xf003fL)) + Errcheck: + raise Kernel32Error if result is 0 + * OpenThread:: OpenThread(dwDesiredAccess=THREAD_ALL_ACCESS(0x1f03ffL), bInheritHandle=0, dwThreadId=NeededParameter) @@ -285,17 +633,47 @@ Functions: * Process32First:: Process32First(hSnapshot, lpte) - Set byref(lpte) if needed Errcheck: - Nothing special + raise Kernel32Error if result is 0 * Process32Next:: Process32Next(hSnapshot, lpte) - Set byref(lpte) if needed Errcheck: Nothing special +* QueryWorkingSetWrapper:: + + QueryWorkingSetWrapper(hProcess, pv, cb) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* QueryWorkingSetExWrapper:: + + QueryWorkingSetExWrapper(hProcess, pv, cb) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* QueryWorkingSetExWrapper:: + + QueryWorkingSetExWrapper(hProcess, pv, cb) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + +* QueryWorkingSetWrapper:: + + QueryWorkingSetWrapper(hProcess, pv, cb) + Errcheck: + raise Kernel32Error if result is 0 + Errcheck: + raise Kernel32Error if result is 0 + * ReadProcessMemory:: ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead=None) @@ -356,7 +734,7 @@ Functions: Thread32First(hSnapshot, lpte) Set byref(lpte) if needed Errcheck: - Nothing special + raise Kernel32Error if result is 0 * Thread32Next:: @@ -365,6 +743,18 @@ Functions: Errcheck: Nothing special +* VerQueryValueA:: + + VerQueryValueA(pBlock, lpSubBlock, lplpBuffer, puLen) + Errcheck: + raise Kernel32Error if result is 0 + +* VerQueryValueW:: + + VerQueryValueW(pBlock, lpSubBlock, lplpBuffer, puLen) + Errcheck: + raise Kernel32Error if result is 0 + * VirtualAlloc:: VirtualAlloc(lpAddress=0, dwSize=NeededParameter, flAllocationType=MEM_COMMIT(0x1000L), flProtect=PAGE_EXECUTE_READWRITE(0x40L)) @@ -395,6 +785,12 @@ Functions: Errcheck: raise Kernel32Error if result is 0 +* VirtualProtectEx:: + + VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect=None) + Errcheck: + raise Kernel32Error if result is 0 + * WaitForDebugEvent:: WaitForDebugEvent(lpDebugEvent, dwMilliseconds=INFINITE(0xffffffffL)) diff --git a/samples/debugger.py b/samples/debugger.py index 9ea288a..05572bf 100644 --- a/samples/debugger.py +++ b/samples/debugger.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import windows import windows.test import windows.debug diff --git a/samples/local_debugger.py b/samples/local_debugger.py index d2911a2..aa7f415 100644 --- a/samples/local_debugger.py +++ b/samples/local_debugger.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import ctypes import windows import windows.debug diff --git a/samples/local_debugger_remote_process.py b/samples/local_debugger_remote_process.py index 1b735b1..42c5432 100644 --- a/samples/local_debugger_remote_process.py +++ b/samples/local_debugger_remote_process.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import ctypes import windows import windows.test diff --git a/samples/native_utils.py b/samples/native_utils.py index d7e2826..a736428 100644 --- a/samples/native_utils.py +++ b/samples/native_utils.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import windows import windows.test diff --git a/samples/network.py b/samples/network.py index 5eeab44..75290d0 100644 --- a/samples/network.py +++ b/samples/network.py @@ -1,7 +1,6 @@ import sys import os.path import socket - sys.path.append(os.path.abspath(__file__ + "\..\..")) import windows diff --git a/samples/remote_veh_segv.py b/samples/remote_veh_segv.py index 07316a9..600399e 100644 --- a/samples/remote_veh_segv.py +++ b/samples/remote_veh_segv.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import windows import windows.test @@ -7,7 +12,7 @@ python_code = """ import windows import ctypes import windows -from windows.exception import VectoredException +from windows.winobject.exception import VectoredException import windows.generated_def.windef as windef from windows.generated_def.winstructs import * diff --git a/samples/veh_segv.py b/samples/veh_segv.py index 0211a7a..cc01d41 100644 --- a/samples/veh_segv.py +++ b/samples/veh_segv.py @@ -1,3 +1,8 @@ +import sys +import os.path +import pprint +sys.path.append(os.path.abspath(__file__ + "\..\..")) + import ctypes import windows from windows.winobject.exception import VectoredException diff --git a/windows/debug.py b/windows/debug.py index b5bd1a7..3380c58 100644 --- a/windows/debug.py +++ b/windows/debug.py @@ -439,35 +439,35 @@ class Debugger(object): return DBG_CONTINUE def on_create_process(self, create_process): - """Called on create_process event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679286(v=vs.85).aspx)""" + """Called on create_process event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679286(v=vs.85).aspx)""" pass def on_exit_process(self, exit_process): - """Called on exit_process event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679334(v=vs.85).aspx)""" + """Called on exit_process event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679334(v=vs.85).aspx)""" pass def on_create_thread(self, create_thread): - """Called on create_thread event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679287(v=vs.85).aspx)""" + """Called on create_thread event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679287(v=vs.85).aspx)""" pass def on_exit_thread(self, exit_thread): - """Called on exit_thread event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679335(v=vs.85).aspx)""" + """Called on exit_thread event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms679335(v=vs.85).aspx)""" pass def on_load_dll(self, load_dll): - """Called on load_dll event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx)""" + """Called on load_dll event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680351(v=vs.85).aspx)""" pass def on_unload_dll(self, unload_dll): - """Called on unload_dll event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms681403(v=vs.85).aspx)""" + """Called on unload_dll event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms681403(v=vs.85).aspx)""" pass def on_output_debug_string(self, debug_string): - """Called on debug_string event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680545(v=vs.85).aspx)""" + """Called on debug_string event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680545(v=vs.85).aspx)""" pass def on_rip(self, rip_info): - """Called on rip_info event (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680587(v=vs.85).aspx)""" + """Called on rip_info event (for param type see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680587(v=vs.85).aspx)""" pass def debug(path, args=None, dwCreationFlags=0, show_windows=False): diff --git a/windows/utils/winutils.py b/windows/utils/winutils.py index ca8f488..80feef1 100644 --- a/windows/utils/winutils.py +++ b/windows/utils/winutils.py @@ -150,9 +150,11 @@ def check_debug(): def datetime_from_filetime(filetime): + """return a :class:`datetime.datetime` from a ``windows`` FILETIME int""" return datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=filetime / 10) def filetime_from_datetime(dtime): + """Return the FILETIME value from a :class:`datetime.datetime` in a python :class:`int`""" return int((dtime - datetime.datetime(1601,1,1)).total_seconds() * 1000) * 10000