elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:04  


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [SOURCE] Library Injector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOURCE] Library Injector  (Leído 2,596 veces)
yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
[SOURCE] Library Injector
« en: 30 Agosto 2007, 01:21 »

Código
 
// Library Injector v1.0 - yeikos (at) gmail (dot) com
// GNU General Public License - http://www.gnu.org/licenses/gpl-3.0.txt
 
#include <windows.h>
#include <tlhelp32.h>
 
#define MAX_PID 6
 
int fncHelp() {
   printf("\n\t[INFO]\n"
"\t  -a\t\t\tShows every process id with his process name respective\n"
"\t  -s <process name>\tShows every process id from the process name\n\n"
"\t[INJECT]\n"
"\t  -l <library>\t\tLoads the library for the injection\n"
"\t  -n <process name>\tInjects the library in all process id from the process name\n"
"\t  -i <process id>\tInjects the library in the process id\n\n"
"\n\t  Usage: li.exe [[-a]|[-s]] [-l [-n]|[-i]]\n"); exit(1);
}
 
char strLibrary[MAX_PATH], strPName[MAX_PATH], strShow[MAX_PATH], strPID[MAX_PID];
unsigned short int i, optAll = 0, optShow = 0, optLibrary = 0, optPID= 0, optPName= 0;
 
int main(int argc, char **argv)
{
printf ("\n      Library Injector v1.0 - yeikos (at) gmail (dot) com\n\n");
 
if (argc < 2) { fncHelp(); }
 
for (i=1;i<argc;i+=2) {
switch((int)argv[i][1]) {                  
case 'a': if (optAll > 0 || argc != 2) { fncHelp(); } else { optAll = i+1; } break;    
case 's': if (optShow > 0 || argc != 3) { fncHelp(); } else { optShow = i+1; } break;  
case 'l': if (optLibrary > 0 || argc != 5) { fncHelp(); } else { optLibrary = i+1; } break;  
case 'i': if (optPID > 0 || argc != 5 || strlen(argv[i+1]) > MAX_PID ) { fncHelp(); } else { optPID = i+1; } break;  
case 'n': if (optPName > 0 || argc != 5) { fncHelp(); } else { optPName = i+1; } break;    
default: fncHelp(); break;
}
}
 
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(PROCESSENTRY32);
 
if (optAll > 0 || optShow > 0) { printf("\tID\t Name\n\t--       ----\n"); }
 
if (!Process32First(hProcessSnap,&pe32)) {
CloseHandle(hProcessSnap);
} do {
 
if (optAll > 0) {
                  if (pe32.th32ProcessID != 0) {
printf("\t[%i]\t %s\n", pe32.th32ProcessID, pe32.szExeFile);
       }
} else if (optShow > 0) {
strncpy(strShow, argv[optShow], sizeof(strShow));
 
if (strcmp(strShow,pe32.szExeFile) == 0) {
printf("\t[%i]\t %s\n", pe32.th32ProcessID, pe32.szExeFile);
}
 
} else if (optLibrary > 0) {
strncpy(strLibrary, argv[optLibrary], sizeof(strLibrary));
char tmpPID[MAX_PID]; sprintf(tmpPID, "%i", pe32.th32ProcessID);
 
if (optPName > 0) {
strncpy(strPName, argv[optPName], sizeof(strPName));
 
if (strcmp(strPName,pe32.szExeFile) == 0) {
sprintf(strPID, "%i", pe32.th32ProcessID);
}
 
} else if (optPID > 0) {
 
if (strcmp(argv[optPID],tmpPID) == 0) {
strncpy(strPName, pe32.szExeFile, sizeof(strPName));
strncpy(strPID, argv[optPID], sizeof(strPID));
}
 
}
 
if (strcmp(strPID,tmpPID) == 0) {
DWORD pid; pid=(DWORD)atoi(tmpPID);
HANDLE proc;
LPVOID RemoteString;
LPVOID nLoadLibrary;
proc = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
nLoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
RemoteString = (LPVOID)VirtualAllocEx(proc,0,strlen(strLibrary),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proc,(LPVOID)RemoteString,strLibrary,strlen(strLibrary),0);
CreateRemoteThread(proc,0,0,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,0,0);  
CloseHandle(proc);
printf("\t%s >> %s [%s]\n",strLibrary,strPName,tmpPID);
}
}
}
 
while(Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
 
if ((optLibrary > 0) && (strlen(strPName) == 0 || strlen(strPID) == 0)) { printf("\n\tResults (0)\n"); }
 
return 0;
}
 


« Última modificación: 30 Agosto 2007, 13:40 por yeikos » En línea
EvilGoblin


Desconectado Desconectado

Mensajes: 2.320


YO NO LA VOTE!


Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #1 en: 30 Agosto 2007, 14:41 »

=O!.....

El tema este lo andaban preguntando bastante! ^^


Gran aporte yeikos (aunq todavia no lo probe ;P)

me lo llevoy lo pruebo....  y aver si no lo detecta algun AV como ROOTKIT xD

^^"

Suerte! :)


En línea

Experimental Serial Lain [Linux User]
yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #2 en: 30 Agosto 2007, 15:11 »

En realidad no es ninguna herramienta de camuflaje, a pesar de que una de sus funciones sea esa.

Su uso es para la explotación de vulnerabilidades, por ejemplo, éstas dos últimas que han salido recientemente en Yahoo y MSN Messenger, en las que se tenía que inyectar la librería en el proceso del mensajero.

Código:
li.exe -i C:\overflow-yahoo.dll -n yahoo.exe
li.exe -i C:\overflow-msn.dll -n msnmsgr.exe

CreateRemoteThread es detectado por muchos antivirus, pero eso no importa para nada en esta herramienta, aún así, muchas gracias por el comentario.
En línea
MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 880


mazard.info


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #3 en: 31 Agosto 2007, 00:02 »

Es infinitamente detectado, hay varias fuentes casi identicas en este mismo foro, ahún así si lo va a usar solo para explotar igual es la mejor opción por ser, de las que yo conozco por lo menos, la técnica menos intrusiva.

Hace un tiempo vi no sé donde un código para fuzzear inyectandose al programa y hookeando winsock, ahora mismo no he logrado encontrarlo pero estaba realmente interesante.

Saludos.
En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #4 en: 31 Agosto 2007, 17:14 »

Oye MazarD lo q detecta el av es CreateRemoteThread no? y si se llama a esta api por su espacio en la dll lo detecta el av?
En línea
Hendrix
In The Kernel Land
Colaborador
***
Desconectado Desconectado

Mensajes: 2.272



Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #5 en: 31 Agosto 2007, 18:14 »

Oye MazarD lo q detecta el av es CreateRemoteThread no? y si se llama a esta api por su espacio en la dll lo detecta el av?

El Kav lo que hace es hookear el kernel, y, aunque la llames por su espacio de memoria o lo que quieras sabra que estas llamando a esa API y saltara  ;)
En línea

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián
Ferсhu


Desconectado Desconectado

Mensajes: 1.213

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #6 en: 31 Agosto 2007, 20:31 »

Aver si alguien me saca una duda q siempre tuve.

Se puede copiar el codigo(makina) de la funcion CreateRemoteThread y meterlo en nuestra aplicacion, es decir yo digo copiar la el tamaño de la funcion y guardarlo en nuestro programa como una funcion y llamar a esa, seguramente esta funcion llamara a otras apis, pero la llamada hacia la "MI CreateRemoteThread" por el hook del antivirus no pasa.

Es posible hacer eso? A ver si alguien sabe tanto y me responde jaja.

Saludos!!!
En línea

MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 880


mazard.info


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #7 en: 7 Septiembre 2007, 00:11 »

Esta función está llamando muchas otrás por debajo que terminarán usando recursos restringidos por/para el sistema operativo por lo que imagino que se podría hacer, pero sólo en ring0 y con lo poco documentado que está el tema a ese nivel seguro que terminas antes parcheando la sdt que es donde tengo entendido suelen hookear los antivirus.
No soy un entendido en tema de hooking en ring0 así que tampoco me hagas mucho caso xD
Saludos.
« Última modificación: 7 Septiembre 2007, 00:14 por MazarD » En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net
opterman

Desconectado Desconectado

Mensajes: 87



Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #8 en: 7 Septiembre 2007, 12:32 »

Nas a todos
Bueno respecto a lo que dice mazarD sobre cargar la librería desde Ring0 (modo driver del kernel ) aqui traigo una posible solucion para ello

Creamos un driver en el que se cree un callback donde sale todos los modulos que se cargan en el proceso cuando en el callback aparezca el proceso al que nosotros queremos inyectarnos abrimos el proceso mediante su pid y con ldrloaddll cargamos la dll en el proceso, asin de simple.

PD: si funciona bien, publicaré el codigo del driver para que lo prueben.

Saludos, Opterman
En línea
MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 880


mazard.info


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #9 en: 7 Septiembre 2007, 17:05 »

opterman no entiendo que quieres decir, eso mismo lo puedes hacer en ring3 directamente con loadlibrary, la cuestión es como dirigir el punto de ejecución que como comentamos se puede hacer con createremotethread, es obvio que hay otras opciones para conseguir lanzarlo sin ser detectados pero hablabamos de esta concreta y de si sería posible usarla con algun tipo de "walkaround", a lo que yo opinó que no, o que por lo menos sería tan costoso que no merecería la pena ni intentarlo.

De todos modos el hilo es 100% offtopic ya :P
« Última modificación: 7 Septiembre 2007, 17:07 por MazarD » En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net
c3r0x

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #10 en: 8 Septiembre 2007, 06:20 »

inyeccion de dll  paso de moda..detectado por los av's claro q si yeikos lo hice para explotar es otra cuestion :)

salu2
« Última modificación: 8 Septiembre 2007, 06:26 por c3r0x » En línea
De@th (L1zb3th)
TROLL


Desconectado Desconectado

Mensajes: 619

<-[Rin]->


Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #11 en: 8 Septiembre 2007, 18:08 »

inyeccion de dll  paso de moda..detectado por los av's claro q si yeikos lo hice para explotar es otra cuestion :)

salu2
sory ella, la fashion de la moda xDDDD
es asi, quizas vos no lo ves bien por que no conoces el tema en cuestion ...
es una buena técnica, depende del arte que le ponga uno, vi un par de articulos haciendolo a modo kernel driver como dice opterman, es ralativamente simple y la cuestion es que no se detecta =)

Au Revoir !
En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #12 en: 9 Septiembre 2007, 20:25 »

De la forma que se habla se detecta del mismo modo, pq terminas hookeando en modo usuario ¿pq no proteger el proceso de cualquier intento de acceso? desde un driver logico.
En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: [SOURCE] Library Injector
« Respuesta #13 en: 11 Septiembre 2007, 20:04 »

Citar
pero sólo en ring0 y con lo poco documentado que está el tema a ese nivel seguro que terminas antes parcheando la sdt que es donde tengo entendido suelen hookear los antivirus.

esta poco o nada documentado en castellano, en ingles tienes buenas bases y despues con windbg haces los deberes ;). tienes mal entendido, se hookea en la ssdt. la sdt  que exporta ntoskrnl con el nombre KeServiceDescriptorTable es una estructura donde lo que interesa es el primer miembro que es un puntero a la ssdt y ahi es donde estan las direcciones de las funciones. en realidad son 2 estructuras pero bueno al final solo importa este puntero.

saludos.
En línea
MazarD
Colaborador
***
Desconectado Desconectado

Mensajes: 880


mazard.info


Ver Perfil WWW
Re: [SOURCE] Library Injector
« Respuesta #14 en: 14 Septiembre 2007, 20:22 »

Citar
tienes mal entendido
Por eso el:
Citar
No soy un entendido en tema de hooking en ring0 así que tampoco me hagas mucho caso
;)


Gracias por la aclaración, es un tema realmente interesante.
En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
http://twitter.com/MazarD
irc://irc.freenode.org/elhacker.net
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como Undetectar un Injector Dll
Análisis y Diseño de Malware
LCheats 13 3,704 Último mensaje 30 Diciembre 2011, 23:27
por flyingwifi
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines