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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Inyeccion Dll básica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Inyeccion Dll básica  (Leído 1,480 veces)
dapz

Desconectado Desconectado

Mensajes: 15



Ver Perfil
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



« Última modificación: 28 Agosto 2017, 18:37 pm por dapz » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inyeccion sql (mysql) Pasa x alto la inyeccion
Nivel Web
Littl3 3 6,233 Último mensaje 5 Marzo 2009, 22:56 pm
por pedrox@
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines