¿Maldades con la Win API de C?

(1/1)

Parado_larga_duracion_ESP:
¿Esto es un keylogger a bajo nivel?

Código
#include <windows.h>
#include <stdio.h>
 
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
   if (nCode >= 0) {
       if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
           KBDLLHOOKSTRUCT *pKey = (KBDLLHOOKSTRUCT *)lParam;
           printf("Tecla pulsada: %d\n", pKey->vkCode);
       }
   }
 
   return CallNextHookEx(NULL, nCode, wParam, lParam);
}
 
int main() {
   // Instalar el gancho de teclado
   HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
   if (hook == NULL) {
       printf("Error al instalar el gancho de teclado.\n");
       return 1;
   }
 
   // Mantener el programa en ejecución
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0) > 0) {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
   }
 
   // Desinstalar el gancho de teclado antes de salir
   UnhookWindowsHookEx(hook);
 
   return 0;
}
 

¿Y esto, es un proceso de nombre travieso?

Código
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
 
int main() {
   srand(time(NULL)); // Inicializar la semilla para generar nombres aleatorios
 
   while (1) {
       // Generar un nuevo nombre aleatorio para el proceso
       char nuevo_nombre[256];
       sprintf(nuevo_nombre, "Proceso_%d", rand());
 
       // Obtener el identificador del proceso actual
       DWORD id_proceso = GetCurrentProcessId();
 
       // Obtener el identificador del proceso
       HANDLE h_proceso = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION, FALSE, id_proceso);
 
       if (h_proceso != NULL) {
           // Cambiar el nombre del proceso
           if (!SetProcessDEPPolicy(0)) {
               printf("Error al cambiar el nombre del proceso. Código de error: %d\n", GetLastError());
               return 1;
           }
 
           // Restaurar el nombre del proceso utilizando un método de bajo nivel
           HMODULE kernel32 = GetModuleHandleA("kernel32.dll");
           if (kernel32 != NULL) {
               FARPROC proc = GetProcAddress(kernel32, "SetProcessInformation");
               if (proc != NULL) {
                   ((BOOL(WINAPI *)(HANDLE, DWORD, PVOID, DWORD))proc)(h_proceso, 0x1d, nuevo_nombre, strlen(nuevo_nombre) + 1);
               }
           }
 
           // Cerrar el handle del proceso
           CloseHandle(h_proceso);
       } else {
           printf("Error al obtener el identificador del proceso. Código de error: %d\n", GetLastError());
           return 1;
       }
 
       // Esperar un segundo antes de cambiar el nombre nuevamente
       Sleep(1000);
   }
 
   return 0;
}
 

No lo sé. ¿Lo son? ¿Qué otras cosas se pueden hacer? Mmmm...

¿Interceptar todo el tráfico?

Código
#include <stdio.h>
#include <pcap.h>
 
void procesar_paquete(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) {
   printf("Paquete capturado, longitud: %d\n", header->len);
}
 
int main() {
   pcap_t *handle;
   char errbuf[PCAP_ERRBUF_SIZE];
 
   // Abrir la interfaz de red para capturar
   handle = pcap_open_live("\\Device\\NPF_{A6D38AA9-CCE1-49B9-BC0C-2B3C79E349E1}", 65536, 1, 1000, errbuf);
   if (handle == NULL) {
       fprintf(stderr, "Error al abrir la interfaz: %s\n", errbuf);
       return 1;
   }
 
   // Compilar y aplicar el filtro (opcional)
   struct bpf_program fp;
   char filter_exp[] = "ip"; // Filtro de ejemplo para capturar paquetes IP
   if (pcap_compile(handle, &fp, filter_exp, 0, PCAP_NETMASK_UNKNOWN) == -1) {
       fprintf(stderr, "Error al compilar el filtro: %s\n", pcap_geterr(handle));
       return 1;
   }
   if (pcap_setfilter(handle, &fp) == -1) {
       fprintf(stderr, "Error al aplicar el filtro: %s\n", pcap_geterr(handle));
       return 1;
   }
 
   // Capturar y procesar paquetes
   pcap_loop(handle, 0, procesar_paquete, NULL);
 
   // Cerrar el manejador de captura
   pcap_close(handle);
 
   return 0;
}
 
 


No sé si funcionarán. ¿Más del estilo?

malvads:
¿Cual es el punto de hacerlo a bajo nivel?

Navegación

[0] Índice de Mensajes