Serie de programación de hackers de Windows (4): modifique el par clave-valor del registro para comenzar

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.

Publicado 300 artículos originales · Me gusta 162 · Visita 300,000+

Supongo que te gusta

Origin blog.csdn.net/AcSuccess/article/details/105590356
Recomendado
Clasificación