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 ordinario, 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 el directorio de inicio rápido
Directorio de inicio rápido
El directorio de inicio rápido es un método simple y de inicio automático que no necesita modificar ningún dato del sistema y es el más sencillo de implementar.
Mientras el programa se coloque en la carpeta de inicio rápido, el sistema cargará y ejecutará automáticamente el programa correspondiente cuando se inicie, para lograr la función de autoarranque en el arranque.
El directorio de inicio rápido no es un directorio fijo. El directorio de inicio rápido de cada computadora es diferente, pero el programa puede obtener este directorio a través de la API de WINDOWS.
Introducción a WINAPI
SHGetSpecialFolderPath
Prototipo de función
BOOL SHGetSpecialFolderPath(
HWND hwndOwner,
LPTSTR lpszPath,
int nFolder,
BOOL fCreate)
Explicación de parámetros
- hwndOwner: identificador del propietario de la ventana
- lpszPath: buffer de ruta de retorno, el tamaño es MAX_PATH
- nFolder: identificador CSIDL de la ruta del sistema
- fCreate: indica si se debe crear una carpeta cuando no existe, FALSE no es crear.
Valor de retorno
- Ejecución exitosa, devuelve VERDADERO
- De lo contrario, devuelva FALSO
wsprintf
Prototipo de función
int __cdecl wsprintf(
_Out_ LPTSTR lpOut,
_In_ LPCTSTR lpFmt,
_In_...);
Descripción del parámetro
- lpOut: recibe salida con formato de búfer. El tamaño máximo del búfer es de 1.024 bytes
- lpFmt: controla el formato de la salida, similar al primer parámetro de printf
- Parámetros variables
Copiar archivo
Prototipo de función
BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists );
Descripción del parámetro
- lpExistingFileName: nombre del archivo fuente
- lpNewFileName: nombre del archivo de destino
- bFailIfExists: si es VERDADERO, una vez que el archivo de destino existe, la ejecución falla, si es FALSO, el archivo se reescribirá
Valor de retorno
- VERDADERO para una ejecución exitosa
- De lo contrario FALSO
Implementación de codificación
Coloque el programa de la calculadora en el directorio de inicio rápido, la idea básica es la siguiente:
- Obtenga el directorio de inicio rápido del sistema
- Construya la ruta del directorio de inicio rápido + exe
- Copie el archivo PE en el directorio de inicio rápido
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
BOOL Auto_Run(LPCWSTR srcFilename, LPCWSTR destFilename)
{
wchar_t pszExePath[MAX_PATH] = { 0 };
wchar_t dest_update[MAX_PATH] = { 0 };
BOOL bRet = FALSE;
bRet = SHGetSpecialFolderPath(NULL, pszExePath, CSIDL_STARTUP, FALSE);
if (bRet == FALSE)
{
printf("file path error!\n");
return FALSE;
}
printf("%ws\n", pszExePath);
wsprintf(dest_update, L"%ws\\%ws", pszExePath, destFilename);
printf("%ws\n", dest_update);
printf("%ws\n", srcFilename);
if (CopyFile(srcFilename, dest_update, FALSE) == FALSE)
{
printf("copy error!\n");
return FALSE;
}
return TRUE;
}
int main()
{
LPCWSTR srcFilename = L"C:\\Windows\\System32\\calc.exe";
LPCWSTR destFilename = L"calc.exe";
BOOL flag = Auto_Run(srcFilename, destFilename);
if (flag == TRUE)
{
printf("success\n");
}
return 0;
}
Tabla de efecto de ejecución
Tinder informó directamente sobre el veneno, tratando de cambiar las opciones de inicio
Después de hacer clic en Permitir, puede encontrar el programa de la calculadora en este directorio.