Foro de elhacker.net

Seguridad Informática => Hacking => Mensaje iniciado por: lubo en 14 Octubre 2013, 23:10 pm



Título: Duda Inyección DLL
Publicado por: lubo en 14 Octubre 2013, 23:10 pm
Buenos días.
Estaba siguiendo este tutorial http://foro.elhacker.net/hacking_avanzado/paper_inyecciones_dll-t159111.0.html (http://foro.elhacker.net/hacking_avanzado/paper_inyecciones_dll-t159111.0.html) , pero no me funciona.

Compilador: Microsoft Visual Studio 2013 RC
Plataforma: Windows 8

Tengo el código que inyecta en el proceso la DLL:
CreateRemoteThread
Código
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7. DWORD pid;
  8. HANDLE proc;
  9. char buf[MAX_PATH] = "";
  10. char laDll[] = "C:\\laDll.dll";
  11. LPVOID RemoteString;
  12. LPVOID nLoadLibrary;
  13. char Entrada[255];
  14. printf("Ejemplo CreateRemoteThread by MazarD\nhttp://www.mazard.info\n");
  15. printf("Introduce el PID del programa (puedes verlos en el taskmanager): ");
  16. fgets(Entrada, 255, stdin);
  17. pid = (DWORD)atoi(Entrada);
  18. proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  19. //Aquí usamos directamente GetModuleHandle en lugar de loadlibrary ya que kernel32 la cargan todos los ejecutables
  20. //Con esto tenemos un puntero a LoadLibraryA
  21. nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
  22. //Reservamos memoria en el proceso abierto
  23. RemoteString = (LPVOID)VirtualAllocEx(proc, NULL, strlen(laDll), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  24. //Escribimos la ruta de la dll en la memoria reservada del proceso remoto
  25. WriteProcessMemory(proc, (LPVOID)RemoteString, laDll, strlen(laDll), NULL);
  26. //Lanzamos el hilo remoto en loadlibrary pasandole la dirección de la cadena
  27. CreateRemoteThread(proc, NULL, NULL, (LPTHREAD_START_ROUTINE)nLoadLibrary, (LPVOID)RemoteString, NULL, NULL);
  28. CloseHandle(proc);
  29. return true;
  30. }
  31.  
Y el programa compila perfectamente.


Esta es la DLL (generará laDll.dll):
dllmain.cpp
Código
  1. // dllmain.cpp : Define el punto de entrada de la aplicación DLL.
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <Windows.h>
  5.  
  6. BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
  7. {
  8. if (ul_reason_for_call == DLL_PROCESS_ATTACH)
  9. {
  10. FILE *arch;
  11. fopen_s(&arch, "C:\\mehecargado.txt", "w");
  12. fclose(arch);
  13. }
  14. else
  15. {
  16. FILE *arch;
  17. fopen_s(&arch, "C:\\NOmehecargado.txt", "w");
  18. fclose(arch);
  19. }
  20.  
  21. return TRUE;
  22. }
  23.  
También compila sin problema alguno.

He creado laDll.cpp y laDll.h, pero no definido funciones a exportar, por lo que los archivos están vacíos, ya que ni siquiera tengo funciones.



Ejecuto el programa, pongo el PID y no sucede nada... ¿Qué puede pasar?

Gracias por la ayuda que me podáis dar, en la carrera no me explican nada de esto, y me interesan mucho los temas de seguridad.


Título: Re: Duda Inyección DLL
Publicado por: MCKSys Argentina en 14 Octubre 2013, 23:24 pm
No tengo muy en claro el porqué, pero CreateRemoteThread falla en Win8. Aunque debo admitir que no he revisado la MSDN.

Para inyectar en este OS, pordrías usar las APIs de debug o bien Read/WriteProcessMemory...

Saludos!


Título: Re: Duda Inyección DLL
Publicado por: lubo en 14 Octubre 2013, 23:49 pm
No tengo muy en claro el porqué, pero CreateRemoteThread falla en Win8. Aunque debo admitir que no he revisado la MSDN.

Para inyectar en este OS, pordrías usar las APIs de debug o bien Read/WriteProcessMemory...

Saludos!

Vaya, lo probaré en Win7.

¿Apis de debug?

Creo que con Read/Write te refieres a inyectar directamente en la memoria del programa ajeno, ¿no? Porque ya estoy usando WriteProcessMemory...


Título: Re: Duda Inyección DLL
Publicado por: lubo en 15 Octubre 2013, 19:27 pm
No tengo muy en claro el porqué, pero CreateRemoteThread falla en Win8. Aunque debo admitir que no he revisado la MSDN.

Para inyectar en este OS, pordrías usar las APIs de debug o bien Read/WriteProcessMemory...

Saludos!

Perdón, doblepost (pero para que te aparezca como no leído). Lo he probado en Win7 con el proceso explorer.exe (con su PID, claro), y no funciona. ¿Qué ocurre?

Gracias.


Título: Re: Duda Inyección DLL
Publicado por: MCKSys Argentina en 15 Octubre 2013, 22:26 pm
Deberias depurarlo para ver los valores de retorno de las APIs.

Asi podras tener una idea de que puede estar fallando.

Saludos!