miércoles, 23 de enero de 2013

Inyectar DLL en memoria [C++]

DLL a Inyectar [ASM]
format PE GUI 4.0 DLL
entry DllEntryPoint

include 'C:\fasm\INCLUDE\WIN32AX.INC'

section '.code' code readable executable
 proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
     
   cmp [fdwReason],1
      JE mensaje
      mensaje:
      invoke MessageBox,0,"Kiere Pelea?","Ola Ke Ase?",MB_OK
      ret
 endp
 
 section '.idata' import data readable writeable
  library user,'USER32.DLL'
import user,\
       MessageBox, 'MessageBoxA'
Inyector.exe [C++]
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{
 HWND hwProceso;
 DWORD idProceso;
 HANDLE hProceso; 
 HANDLE hThread;
 LPVOID memoria;
 char *DLL="C:\\dll.dll";
 
 //Buscamos el proceso a inyectar.
 if(!(hwProceso=FindWindowEx(0,0,0,"Calculadora")))
 {
  MessageBox(0,"Ventana no encontrada","ERROR X",0);
  return 1;
 }
 
 if(!(GetWindowThreadProcessId(hwProceso,&idProceso)))
 {
  MessageBox(0,"No se pudo Obtener la id del proceso","ERROR X",0);
  return 1;
 }
 
 //Abrimos el proceso
 if(!(hProceso=OpenProcess(PROCESS_ALL_ACCESS,false,idProceso)))
 {
  MessageBox(0,"No se pudo abrir el proceso","ERROR X",0);
  return 1;
 }
 
 //Reservamos memoria en el proceso para la DLL 
 memoria=VirtualAllocEx(hProceso,0,strlen(DLL),MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
 SIZE_T write=0;
 
 //Escribimos en el proceso
 if(WriteProcessMemory(hProceso,memoria,(LPVOID)DLL,strlen(DLL),&write)==0)
 {
  MessageBox(0,"No se pudo escribir en el proceso","ERROR X",0);
 }
 
 //Creamos un nuevo hilo de ejecucion en el proceso
 if( (hThread=CreateRemoteThread(hProceso,0,0,(LPTHREAD_START_ROUTINE)GetProcAddress(LoadLibrary("Kernel32.dll"),"LoadLibraryA"),memoria,0,0))==NULL)
 {
  MessageBox(0,"No se pudo EJECUTAR en el proceso","ERROR X",0);
 }
 
}

martes, 22 de enero de 2013

Algo de Esteganografía

La idea basica es lograr ocultar archivos de winrar dentro de una imagen, lo cual podemos hacerlo con el comando copy.

para ello tenemos los siguientes archivos.



con lo cual en cmd.exe escribimos el siguiente comando "copy /b hulk.jpg + premiums.rar resultado.jpg"

donde el parametro /b solo indica que se hara una copia binaria.


con lo cual podemos seguir abriendo la imagen normalmente, solo que al cambiarle la extension a .rar  nos reconocera el archivo rar que hemos juntado a la imagen sin dañar los archivos.


lo unico que diferencia al archivo resultado.jpg de hulk.jpg es el tamaño del archivo claro esta, con algun editor hexadecimal podemos comprar que solo es una copia binaria.


Como vemos la imagen hulk.jpg termina en el offset 774597 decimal.

 

y aqui fijamos que premiums.rar termina en el offset 100 decimal.



 aqui podemos apreciar que el archivo final termina en el offset 774598 = 774597 + 100 + 1 de EOF.