Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo usar vb para simular presionar ctrl Alt del

Cómo usar vb para simular presionar ctrl Alt del

Me tomó una hora resolverlo.

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

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

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)

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)