elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Codigo para cargar Drivers en el kernel
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Codigo para cargar Drivers en el kernel  (Leído 1,760 veces)
dapz

Desconectado Desconectado

Mensajes: 15



Ver Perfil
Codigo para cargar Drivers en el kernel
« en: 17 Septiembre 2017, 17:45 pm »

Mi pequeño Loader, que hace :
1-) registrar un servicio y ejecutarlo
2-) detener un servicio y eliminarlo

Loader:

Código
  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4. char *driver = "C:\\hellowWorld.sys";
  5.  
  6. void instalar_driver() {
  7. SC_HANDLE Manager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
  8. if (Manager != ERROR) {
  9. printf("\nCargando el driver...");
  10. SC_HANDLE Service = CreateService(Manager, "TEST", "TEST", SERVICE_START | DELETE | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, driver, NULL, NULL, NULL, NULL, NULL);
  11. if (Service == ERROR) {
  12. Service = OpenService(Manager, "TEST", SERVICE_START | DELETE | SERVICE_STOP);
  13.  
  14. }
  15. if (Service) {
  16. StartService(Service, 0, NULL);
  17. printf("\nServicio Ejecutado");
  18. }
  19. CloseServiceHandle(Manager);
  20. }
  21.  
  22. }
  23.  
  24. void eliminar_driver() {
  25.  
  26. SC_HANDLE Manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  27. if (Manager != ERROR) {
  28. SC_HANDLE Service = OpenService(Manager, "TEST", SERVICE_START | DELETE | SERVICE_STOP);
  29. if (Service != ERROR) {
  30. SERVICE_STATUS status;
  31. ControlService(Service, SERVICE_CONTROL_STOP, &status);
  32. printf("\nServicio Detenido");
  33. DeleteService(Service);
  34. printf("\nServicio Eliminado");
  35. CloseServiceHandle(Service);
  36. }
  37. CloseServiceHandle(Manager);
  38. }
  39. }
  40.  
  41. int main(void) {
  42. int opcion;
  43. while (1)
  44. {
  45. printf("\n1) cargar driver");
  46. printf("\n2) eliminar driver de la memoria");
  47. printf("\n3) salir del menu");
  48. printf("\n\n->  ");
  49. scanf("%d", &opcion);
  50. switch (opcion) {
  51. case 1:
  52. instalar_driver();
  53. break;
  54. case 2:
  55. eliminar_driver();
  56. break;
  57. case 3:
  58. exit(1);
  59.  
  60. default:
  61. printf("\n\nOpcion incorrecta");
  62. break;
  63. }
  64.  
  65. }
  66. return 0;
  67. }
  68.  

Codigo del Driver

Código
  1. #include <ntddk.h>
  2.  
  3.  
  4. VOID Unload(PDRIVER_OBJECT DriverObject)
  5. {
  6. DbgPrint("Driver Unloaded From Memory\n");
  7. }
  8.  
  9. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
  10. {
  11. DbgPrint("Hellow World From Kernel Space\n");
  12. DriverObject->DriverUnload = Unload;  // No siempre hay que limpiar el codigo , pero si es recomendable si vamos a hacer pruebas, ya que , de lo contrario hay que reiniciar el ordenador continuamente
  13. return STATUS_SUCCESS;
  14. }

https://imgur.com/kfXwXNf
https://imgur.com/oeWnpO1
https://imgur.com/4obeza9



En línea

C/C++ ASM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cargar modulo del kernel Linux. « 1 2 »
ASM
0xDani 11 8,043 Último mensaje 27 Noviembre 2012, 16:01 pm
por 0xDani
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines