Directorio de artículos
Tecnología de arranque automático
Para un troyano de virus, lo importante no es cómo destruirlo, sino también cómo ejecutarlo. Un troyano de virus solo puede manifestar verdaderamente su poder destructivo cuando se carga en la memoria y comienza a ejecutarse. De lo contrario, es solo un archivo de disco normal, y la privacidad no representa una ligera amenaza para los datos de los usuarios de computadoras.
La tecnología de arranque automático incluye principalmente cuatro tipos:
- Registro
- Directorio de inicio rápido
- Tarea programada
- Servicio del sistema
Este artículo presenta principalmente la tecnología de registro.
Registro
Hay muchas formas y formas de lograr el inicio propio, entre las cuales la modificación del registro es la más utilizada. El registro es una gran base de datos del sistema operativo, que registra todos los aspectos de los datos en el sistema, y no faltan datos que directa o indirectamente conduzcan a un arranque automático en el arranque.
Introducción a WINAPI
Función RegOpenKeyEx
Abrir un registro especificado
LONG WINAPI RegOpenKey(
HKEY, hKey,
LPCTSTR lpSubkey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)
Descripción del parámetro
- hKey: tipo de clave primaria, las siguientes claves están predefinidas:
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_USER
- HKEY_LOCAL_MACHINE
- HKEY_USERS
- HEEY_CURRENT_CONFIG
- lpSubkey: señala el nombre de la clave que se abrirá en una cadena que no se rompe. Si se establece en NULL o apunta a una cadena vacía, se abrirá un nuevo controlador.
- ulOptions: reservado, establecido en 0
- samDesired: derechos de acceso, como se muestra en la tabla a continuación
- phkResult: apunta a una variable que contiene el identificador para abrir el registro. Si el identificador ya no se usa, use RegCloseKey para cerrarlo.
Valor | Significado |
---|---|
KEY_CREATE_LINK | Permiso para generar claves de símbolos |
KEY_CREATE_SUB_KEY | Permitir generación de subclaves |
KEY_ENUMERATE_SUB_KEYS | Permitir la generación de subclaves enumeradas |
KEY_EXECUTE | Permiso para leer |
KEY_NOTIFY | Aviso de permiso para reemplazar |
KEY_QUERY_VALUE | Permitir subclave de consulta |
KEY_ALL_ACCESS | Proporcionar acceso completo |
KEY_READ | KEY_QUERY_VALUE 、 KEY_ENUMERATE_SUB_KEYS 、 KEY_NOTIFY 的 组合 |
KEY_SET_VALUE | Permitir que se establezcan subclaves |
KEY_WRITE | Combinación KEY_SET_VALUE, KEY_CREATE_SUB_KEY |
KEY_WOW64_32KEY | Indica que la aplicación en el sistema de 64 bits debe ejecutarse en la vista de registro de 32 bits, el sistema de 32 bits ignorará este indicador |
KEY_WOW64_64KEY | Indica que las aplicaciones en sistemas de 64 bits deben ejecutarse en la vista de registro de 64 bits, los sistemas de 32 bits ignorarán este indicador |
Valor de retorno
- La llamada exitosa devuelve cero (ERROR_SUCCESS)
- De lo contrario, se devuelve un código de error distinto de cero
Cuando la clave especificada no existe, la función no crea una nueva clave
RegSetValueEx
Establezca los datos y el tipo del valor especificado bajo la clave de registro
LONG WINAPI RegSetValueEx(
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
const BYTE *lpData,
DWORD cbData)
Descripción del parámetro
- hKey: especifique un identificador para abrir el elemento
- lpValueName: un puntero a una cadena que contiene el nombre del valor preestablecido
- Reservado: valor reservado, 0
- dwType: especifique el tipo de datos que se almacenarán
- * lpData: apunta a un búfer que contiene los datos almacenados del nombre de clave especificado
- cbData: especifica el tamaño de datos del parámetro lpData, en bytes
Valor de retorno
- Llamada exitosa devuelve 0
- De lo contrario, se devuelve un código de error distinto de cero
Código
El valor clave de la entrada de la tabla de inicio automático suele ser las dos rutas siguientes:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Ahora usamos regedit para encontrar el camino:
Nuestra programación de Windows es principalmente para agregar pares clave-valor de archivos ejecutables para Ejecutar . Ahora simplemente escribimos una demostración y agregamos la calculadora a la entrada de la tabla Ejecutar para lograr el autoinicio.
Al mismo tiempo, debe prestar atención: HKEY_LOCAL_MACHINE para modificar la clave de registro requiere permisos de administrador, y HKEY_CURRENT_USER para modificar la apariencia solo requiere los permisos predeterminados del usuario.
La codificación es la siguiente:
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
BOOL Reg_CurrentUser(LPCTSTR lpszFilename, LPCTSTR lpszValueName)
{
HKEY hKey;
LPCTSTR lpSubkey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
if (RegOpenKeyEx(HKEY_CURRENT_USER, lpSubkey, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
{
printf("open error!\n");
return FALSE;
}
if (RegSetValueEx(hKey, lpszFilename, 0, REG_SZ, (BYTE *)lpszValueName, (1 + 2*lstrlen(lpszValueName))) != ERROR_SUCCESS)
{
printf("write error!\n");
return FALSE;
}
RegCloseKey(hKey);
return TRUE;
}
int main()
{
LPCTSTR lpszFilename = L"calc";
LPCTSTR lpszValueName = L"\"C:\\Windows\\System32\\calc.exe\"";
BOOL flag = Reg_CurrentUser(lpszFilename, lpszValueName);
if (flag == TRUE)
{
printf("success!\n");
}
return 0;
}
Unicode está codificado como bytes anchos, por lo que la longitud debe multiplicarse por 2; de lo contrario, el registro solo escribirá la mitad.
Si no utiliza la codificación Unicode y utiliza char *, habrá caracteres ilegibles.
Efecto corriente
Ahora usamos regedit para encontrar la ruta nuevamente, y encontramos que hay un par clave-valor más, que es el archivo ejecutable de la calculadora.