Cómo usar vb para simular presionar ctrl Alt del
Esta es la última pregunta que respondí sobre Baidu. Siempre rechazaré a Baidu en el futuro.
Espero que puedas adoptar mi respuesta, gracias.
Opción explícita
Función de declaración privada OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declaración privada Función ReadProcessMemory Lib "kernel32" (ByVal hProcess mientras, ByVal lpBaseAddress mientras, lpBuffer como cualquiera, ByVal nSize mientras,_
lpNumberOfBytesWritten mientras) mientras
Función de declaración privada WriteProcessMemory Lib "kernel32" (ByVal hProcess mientras, ByVal byVal hProcess mientras, ByVal lpBaseAddress mientras, lpBuffer como cualquiera, ByVal nSize mientras,_
lpNumberOfBytesWritten As Long) mientras
Función de declaración privada GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomW" (ByVal lpString As Long) como entero
Función de declaración privada GlobalDeleteAtom Lib "kernel32" (ByVal nAtom como IntegerInteger) como entero
Función de declaración privada GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomW" (ByVal lpString As Long) como entero
Const privada TH32CS_SNAPPROCESS = 2
Tipo privado PROCESSENTRY32W p>
dwSize As Long
cntUsage As Long '
h32ProcessID As Long ' // este proceso
th32DefaultHeapID As Long '
h32ModuleID As Long ' // exe asociado
cntThreads As Long '
th32ParentProcessID As Long ' // el proceso padre de este proceso
pcPriClassBase As Long ' / / Prioridad básica de los subprocesos del proceso Nivel
dwFlags As Long '
szExeFile(1 To 260) As Integer '
// Ruta
Tipo de fin
Función de declaración privada CreateToolphelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Función de declaración privada Process32First Lib "kernel32" Alias "Process32FirstW" (ByVal hSnapshot As Long, lpPE As PROCESSENTRY32W) As Long
Función de declaración privada Process32Next Lib "kernel32" Alias "Process32NextW" (ByVal hSnapshot As Long, lpPE como PROCESSENTRY32W) mientras
Función de declaración privada lstrcmpi Lib "kernel32" Alias "lstrcmpiW" (lpString1 como entero, ByVal lpString2 mientras) mientras
Función de declaración privada CloseHandle Lib " kernel32" (ByVal hObject As Long) As Long
Tipo privado LUID
parte baja As Long
parte alta As Long
Fin Tipo
Tipo privado LUID_AND_ATTRIBUTES
pLuid como LUID
Atributos como largos
Tipo final
Tipo privado TOKEN_PRIVILEGES
PrivilegeCount Mientras
Privilegios Como LUID_AND_ATTRIBUTES
Tipo de Fin
Const Privada PROCESS_ALL_ACCESS Mientras = &H1F0FFF
Const privada TOKEN_QUERY Mientras = &H8&
Const privada TOKEN_ADJUST_PRIVILEGES Mientras = &H20&
Const privada SE_PRIVILEGE_ ENABLED Mientras = &H2
Const privada SE_DEBUG_NAME As String = "SeDebugPrivilege"
Función de declaración privada GetCurrentProcess Lib " kernel32" () As Long
Función de declaración privada OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess Mientras, TokenHandle Mientras) TokenHandle Mientras) Como Lon
g
Función de declaración privada LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueW" (ByVal lpSystemName mientras sea largo, ByVal lpName mientras, lpLuid como LUID) mientras
Declaración privada Función AjustarTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle mientras, ByVal DisableAllPrivileges mientras, NewState como TOKEN_PRIVILEGES, _
ByVal BufferLength mientras, ByVal PrevState mientras, ByVal N mientras) Mientras p>
Función de declaración privada LoadLibrary Lib "kernel32" Alias "LoadLibraryW" (ByVal lpLibFileName As Long) Siempre
Función de declaración privada GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Función de declaración privada FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Const privada MEM_COMMIT As Long = &H1000
Const privada MEM_DECOMMIT mientras = &H4000
Const privada PAGE_READWRITE mientras = 4
Const privada PAGE_EXECUTE_READWRITE mientras = &H40
Función de declaración privada VirtualAllocEx Lib "kernel32" (ByVal ProcessHandle mientras, ByVal lpAddress mientras, ByVal dwSize mientras, _
ByVal flAllocationType mientras, ByVal flProtect mientras) Mientras
Función de declaración privada VirtualFreeEx Lib "kernel32" (ByVal ProcessHandle As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Función de declaración privada CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, ByVal lpThreadAttributes Mientras, ByVal dwStackSizeAs
Largo, _
ByVal lpStartAddress Mientras, ByVal lpParameter Mientras, ByVal dwCreationFlags Mientras, lpThreadId Mientras) Mientras
Private Const CODELONG_LEN = 33
Código mlShell privado (CODELONG_LEN - 1) siempre y cuando
'================================== = ===========
' Función de inserción remota de subprocesos
' Función: Insertar código de subproceso remoto en el proceso Winlogon y ejecutarlo
' Retorno: .T. Éxito
' ================================= === ========
Función pública SendSysKey() como booleana
Const WINLOGON como cadena = "Winlogon.exe"
Const SHELL_CODE_LENGTH = CODELONG_LEN * 4
Const SHELL_FUNCOFFSET = 2 * 4
Atenuar hProcess As Long 'Manejador de proceso remoto
Atenuar hPId As Long 'Remoto ID de proceso
Dim lResult As Long 'Variable de retorno general
Atenuar pToken As TOKEN_PRIVILEGES
Atenuar hToken As Long
Atenuar hRemoteThread As Long
Atenuar hRemoteThreadID mientras dure
Atenuar lDbResult(1) mientras dure
Atenuar lRemoteAddr mientras dure
'------ --- --------------------
'Obtener ID del proceso Winlogon
'- ----------------------------------
hPId = GetProcessIdFromName(WINLOGON)
Si hPId = 0 Entonces
Debug.Assert False
Salir de la función
Finalizar si
'-- --- ----------------------------------
'Elevar los permisos de este proceso para obtener acceso al proceso winlogon Permiso para realizar operaciones
'-' ---------------------------- ------
lResultado = OpenProcessToken(GetCurrentProcess(), Assert lResultado
lResultado = LookupPrivilegeValue(0, StrPtr(SE_DEBUG_NAME), pToken.Assert lResultado
'---- --------------------------------
'Abre el winlogon proceso
'-------------
--------------------------
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hPId)
Depurar. Afirmar hProcess
Si hProcess Entonces
'------------------------------ --- ------
'Código de inyección inicial
'---------------------- --- ---- -------
Llamar a InitialShellCode
'------------------ --- ---------------
'Asignación de memoria de proceso remoto
'------------ - --------------- -----
lRemoteAddr = VirtualAllocEx(hProcess, 0, SHELL_CODE_LENGTH, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
Depurar . Afirmar lRemoteAddr
'---------------------------------------- -----
'Escribir código shell
'-------------------------- -------- --
Si lRemoteAddr entonces
Llame a WriteProcessMemory(hProcess, lRemoteAddr, mlShellCode(0), SHELL_CODE_LENGTH, 0)
De lo contrario
Salir de la función
Finalizar si
'----------------------- ----------- -----
'Crear hilo remoto
'--------------- ----------- ----------
hRemoteThread = CreateRemoteThread(hProcess, 0, 0, lRemoteAddr + SHELL_FUNCOFFSET, 0, 0, hRemoteThreadID) p>
Debug.Assert hRemoteThread(hProcess, 0, 0, lRemoteAddr + SHELL_FUNCOFFSET, 0, 0, 0, hRemoteThreadID) bucle
'------------- ----------- ------------
'Liberar memoria de proceso remoto
'------- ----------- ------------------
Llamar a VirtualFreeEx(hProcess, lRemoteAddr, SHELL_CODE_LENGTH, MEM_DECOMMIT)
Finalizar si
Finalizar función
'=========================== = =========== ======
' Leer ID de proceso del nombre del archivo ejecutable
' Parámetro: nombre del archivo ejecutable (con extensión)
' Devuelve: ID del proceso.
0 significa ninguno
'======================================== == =====
Función privada GetProcessIdFromName(ByVal sName como cadena) mientras
Atenuar hSnapshot mientras
Atenuar lpPE como PROCESSENTRY32W
Atenuar lpWinlogon siempre
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Debug.Assert hSnapshot
lpPE.dwSize = Len(lpPE)
Si Process32First(hSnapshot, lpPE) Entonces
lpWinlogon = StrPtr(sName)
Hacer
Si lstrcmpi(lpPE.dwSize = Len (lpPE .dwTamaño)