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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Operaciones básicas en el kernel [drivers] en: 1 Octubre 2017, 12:55 pm
...
2  Programación / Programación C/C++ / 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

3  Programación / Programación C/C++ / Inyeccion Dll básica en: 28 Agosto 2017, 18:31 pm
Como hacer una inyección básica de una dll en C

Código dll

Código
  1. #include <Windows.h>
  2.  
  3. BOOL APIENTRY DllMain(HMODULE hMod, DWORD callback, LPVOID Param)
  4. {
  5. switch(callback)
  6. {
  7. case DLL_PROCESS_ATTACH:
  8. aqui ponemos el codigo que queremos que se ejecute en la dll
  9. MessageBoxW(NULL, TEXT("Hola desde proceso injectado !"), TEXT("Test"), MB_ICONINFORMATION);
  10. case DLL_PROCESS_DETACH:
  11. case DLL_THREAD_ATTACH:
  12. case DLL_THREAD_DETACH:
  13. default:
  14. break;
  15. }
  16. return TRUE;
  17. }

codigo de la aplicacion externa

Código
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <winternl.h>
  4.  
  5. #pragma comment(lib, "ntdll.lib")
  6.  
  7. typedef struct _CLIENT_ID
  8. {
  9. HANDLE UniqueProcess;
  10. HANDLE UniqueThread;
  11. } CLIENT_ID, *PCLIENT_ID;
  12.  
  13. extern "C" NTSTATUS NTAPI ZwOpenProcess(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientID);
  14.  
  15.  
  16. int main(int argc, char *argv[]) {
  17.  
  18. char *ruta_dll = "C:\\Dlltest.dll";
  19. ULONG pid;
  20. OBJECT_ATTRIBUTES oa;
  21. HANDLE hproc;
  22. CLIENT_ID cid;
  23. NTSTATUS status;
  24.  
  25.  
  26. printf("\n pid -> ");
  27. scanf("%d", &pid);
  28.  
  29.  
  30. cid.UniqueProcess = (HANDLE)pid;
  31. cid.UniqueThread = 0;
  32. InitializeObjectAttributes(&oa, NULL, 0, NULL, NULL);
  33. if(NT_SUCCESS(ZwOpenProcess(&hproc, PROCESS_ALL_ACCESS, &oa, &cid))) {
  34. if(NT_SUCCESS(status)) {
  35. HMODULE dll = GetModuleHandle(L"kernel32");
  36. if(dll != NULL) {
  37. FARPROC load = GetProcAddress(dll, "LoadLibraryA");
  38. if(load != ERROR) {
  39. LPVOID base = VirtualAllocEx(hproc, NULL, 256, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  40. if(base != ERROR) {
  41. BOOL exito = WriteProcessMemory(hproc, base, ruta_dll, strlen(ruta_dll) + 1, NULL);
  42. if(exito != 0) {
  43. HANDLE thread = CreateRemoteThread(hproc, NULL, NULL, (LPTHREAD_START_ROUTINE)load, base, NULL, NULL);
  44. if(thread != ERROR) {
  45. printf("\n dll inyectada en proceso id: %d", pid);
  46. }
  47. }
  48. }
  49. }
  50. }
  51. }
  52. }
  53. return 0;
  54.  
  55. }
  56.  
http://imgur.com/DsEoTz4
http://imgur.com/6HoVbVR
http://imgur.com/jD3CYTH

4  Programación / Programación C/C++ / Terminar Proceso usando funciones NTAPI en: 21 Agosto 2017, 20:44 pm
Usando NtOpenProcess para conseguir el handle del proceso NtTerminateProcess para acabarlo

Código
  1. #include <Windows.h>
  2. #include <winternl.h>
  3. #include <stdio.h>
  4.  
  5.  
  6. #pragma comment(lib, "ntdll.lib")
  7.  
  8. typedef struct _CLIENT_ID
  9. {
  10.     PVOID UniqueProcess;
  11.     PVOID UniqueThread;
  12. } CLIENT_ID, *PCLIENT_ID;
  13.  
  14. EXTERN_C NTSTATUS NTAPI NtOpenProcess(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID);
  15. EXTERN_C NTSTATUS NTAPI NtTerminateProcess(HANDLE, NTSTATUS);
  16.  
  17. void main() {
  18. OBJECT_ATTRIBUTES oa;
  19. HANDLE hProc;
  20. ULONG pid;
  21. CLIENT_ID cid;
  22.  
  23.  
  24. printf("\n introduce pid-> ");
  25. scanf("%ld", &pid);
  26. cid.UniqueProcess = (HANDLE)pid;
  27. cid.UniqueThread = 0;
  28. InitializeObjectAttributes(&oa, NULL, 0, NULL, NULL);
  29. if(NT_SUCCESS(NtOpenProcess(&hProc, PROCESS_TERMINATE, &oa, &cid))) {
  30. NTSTATUS status = NtTerminateProcess(hProc, 1);
  31. if(NT_SUCCESS(status)) {
  32. MessageBoxW(0, TEXT("proceso terminado"), TEXT("test"), MB_ICONINFORMATION);
  33. }
  34. }
  35. NtClose(hProc);
  36.  
  37.  
  38.  
  39.  
  40. }
5  Seguridad Informática / Análisis y Diseño de Malware / C++ Conseguir Privilegios para inyectar en procesos en: 8 Abril 2017, 16:20 pm
Código
  1. int privilegios() //esto nos dara los permisos para inyectar en otros procesos
  2. {
  3.        HANDLE Token;
  4. TOKEN_PRIVILEGES tp;
  5. if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
  6.                  TOKEN_QUERY, &Token))
  7. {
  8. LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
  9. int i = GetLastError();
  10. tp.PrivilegeCount = 1;
  11. tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  12. if (AdjustTokenPrivileges(Token, 0, &tp, sizeof(tp), NULL, NULL) == 0) {
  13. return 1;
  14. }
  15. else {
  16. if (GetLastError() == ERROR_SUCCESS) {
  17. return 1;
  18. }
  19. else {
  20. return 0;
  21. }
  22. }
  23. }
  24. return 1;
  25. }
  26.  
  27. int main()
  28. {
  29. privilegios();
  30. return EXIT_SUCCESS;
  31. }
  32.  


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines