Sobre inyecciones en EXE's y DLL

Iniciado por Martinss, 30 Mayo 2006, 04:32 AM

0 Miembros y 1 Visitante están viendo este tema.

Eternal Idol

Cita de: _Hendrix_ en 13 Junio 2006, 15:29 PMSi por ejemplo, hiciera un server de troyano, tendria que poner todo el codigo en la DLL y luego dentro de la DLL hacer lalmadas a sus propias opciones que estan dentro de esa DLL????

Todo lo que hagas en la DLL va a ser hecho desde el programa que la carga, da lo mismo que sea cargada mendiante una inyeccion de codigo o por un programa diseñado para cargarla.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Hendrix

Ok...pues a eso ya lo pille....Gracias... ;) ;) ;)

Otra duda (esta mas peñeñita...), si inyectara la DLL en un proceso del sistema (SYSTEM) tendria esos privilegios la DLL inyectada???

Porke a eso yo ya le veo muchas posibilidades....

Salu2



"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

Eternal Idol

Cita de: _Hendrix_ en 13 Junio 2006, 16:02 PMOtra duda (esta mas peñeñita...), si inyectara la DLL en un proceso del sistema (SYSTEM) tendria esos privilegios la DLL inyectada???

Si.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Hendrix

Weno, tengo este kode para inyectar DLL:

Option Explicit

Public hModule          As Long
Public hProcess         As Long
Public dwSize           As Long
Public dwPid            As Long
Public dwBytesWritten   As Long
Public dwTid            As Long

Public SE               As SECURITY_ATTRIBUTES

Public Const PAGE_READONLY              As Long = &H2
Public Const PAGE_READWRITE             As Long = &H4
Public Const PAGE_EXECUTE               As Long = &H10
Public Const PAGE_EXECUTE_READ          As Long = &H20
Public Const PAGE_EXECUTE_READWRITE     As Long = &H40
Public Const MEM_RELEASE                As Long = &H8000
Public Const MEM_COMMIT                 As Long = &H1000
Public Const MEM_RESERVE                As Long = &H2000
Public Const MEM_RESET                  As Long = &H80000
Public Const STANDARD_RIGHTS_REQUIRED   As Long = &HF0000
Public Const SYNCHRONIZE                As Long = &H100000
Public Const PROCESS_ALL_ACCESS         As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Public Const INFINITE                   As Long = &HFFFFFF

Public Type SECURITY_ATTRIBUTES
       nLength                 As Long
       lpSecurityDescriptor    As Long
       bInheritHandle          As Long
End Type

Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Public Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Sub Main()
Inject App.Path & "\Ejemplo.dll", "Notepad"
End Sub

Public Function Inject(szDll As String, szTargetWindowClassName As String) As Boolean
Dim hWnd        As Long
Dim k32LL       As Long
Dim Thread      As Long

   SE.nLength = Len(SE)
   SE.lpSecurityDescriptor = False
   
   'Encontrar la ventana y abrir el proceso
   hWnd = FindWindow(szTargetWindowClassName, vbNullString)
   GetWindowThreadProcessId hWnd, dwPid
   hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, dwPid)
   If hProcess = 0 Then GoTo Inject_Error
   k32LL = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")
   
   'Reservamos memoria
   hModule = VirtualAllocEx(hProcess, 0, LenB(szDll), MEM_COMMIT, PAGE_READWRITE)
   If hModule = 0 Then GoTo Inject_Error
   WriteProcessMemory hProcess, ByVal hModule, ByVal szDll, LenB(szDll), dwBytesWritten
   
   Thread = CreateRemoteThread(hProcess, SE, 0, ByVal k32LL, ByVal hModule, 0, dwTid)
   If Thread = 0 Then GoTo Inject_Error
   
   'Clean up a bit
   WaitForSingleObject Thread, 100
   VirtualFreeEx hProcess, hModule, 0&, MEM_RELEASE
   CloseHandle Thread

Exit Function

Inject_Error:
   Inject = False
   MsgBox "error"
   Exit Function
End Function


Es de cKrispin creo....Y lo que me pasa es que kon una DLL echa en VB ni me fucniona....Krispin explika que mejor ahcer las DLL en C...pero no hay ni una remota posibilidad de que en VB funcionen las DLL's???

Salu2

"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

LuckyMonkey

Con visual basic por lo que tengo entendido sólo se puede programar librerias activex así que yo diria que es imposible hacerlo.
La gracia que tiene aplicar esto para saltarte el firewall es que estos no miran lo que hace cada libreria de un programa y si una dll inyectada en iexplorer.exe se conecta a internet el firewall al tener permisos para el iexplorer no saltaría.

El problema es que la última versión de zonealarm por ejemplo detecta como peligroso el uso de createremotethread y saca un mensaje. De momento se pueden usar algunas técnicas alternativas, mucho menos conocidas que puedes encontrar en google si buscas bien y estudias el tema. Pero en las proximas versiones de zonealarm se ha anunciado que se filtrarán las librerias por separado así que tampoco va a durar mucho más el tema.
En dos dias sólo nos quedará la inyección en los espacios por alineación del ejecutable...... mucho más complicado y mucho más restrictivo :(

P.D:Si tienes problemas con tu código mandame un MP y te mando un troyano con funcionalidades de rootkit que programé sobre esto mismo.

Saludos
Mira!! detrás de ti!! un mono de tres cabezas!!

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Krnl64

Eternal Idol.

Estas equivocado. Aun siguiendo ese procedimiento, no se hacen Dll's verdaderas.

No exportan funciones.

La prueba la tienes en que Si desensamblas una DLL hecha con ese procedimiento, mantiene la referencia a MSVBVM.DLL.

Es decir, que sin ese archivo no funcionara la DLL creada.


Otra forma de ver que no es 1 DLL normal es con RunDll32

Si creamos 1 DLL en VB con una funcion por ejemplo,  y ponemos Rundll32 midll.dll,nombrefuncion dara error de entrypoint. Una DLL de "verdad" ejecutaria la funcion

Lo mejor es hacerla en C. ( yo se muy poco)

ah, hablando de inyeccion creo que la DLL generada de esta forma no sirve para eso.

Salu2


Eternal Idol

Cita de: Krnl64 en 15 Junio 2006, 04:44 AMEstas equivocado. Aun siguiendo ese procedimiento, no se hacen Dll's verdaderas.

¿Seguro que estoy equivocado? Te doy la posibilidad de leer el articulo COMPLETO (son 3 paginas) de nuevo y retractarte ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Krnl64

#28
Veras Eternal Idol, he leido varios articulos de como crear DLL "verdaderas" en VB. Entre ellos ese.

Creo que no estoy equivovocado.  Te pediria que lo comprobaras.

Yo he probado todas las maneras posibles, incluso creando 1 compilador nuevo que reemplazaba a C2.EXE

Pero no son DLL's verdaderas. Lo que no son, son DLL's ActiveX.

Mantienen el vinculo a la maquina virtual de VB.

mira, posteo 1 fragmento de una DLL que cree en VB:


00000000  4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00  MZ.......ÿÿ..
00000010  B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00  ¸.......@.......
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030  00 00 00 00 00 00 00 00 00 00 00 00 C0 00 00 00  ............À...
00000040  0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68  º.´.Í!¸LÍ!Th
00000050  69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F  is program canno
00000060  74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20  t be run in DOS
00000070  6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00  mode....$.......
00000080  29 0B DC DB 6D 6A B2 88 6D 6A B2 88 6D 6A B2 88  ) ÜÛmj²ˆmj²ˆmj²ˆ
00000090  EE 76 BC 88 6C 6A B2 88 04 75 BB 88 6F 6A B2 88  îv¼ˆlj²ˆu»ˆoj²ˆ
000000A0  84 75 BF 88 6C 6A B2 88 85 75 B6 88 6C 6A B2 88  ,,u¿ˆlj²ˆ...u¶ˆlj²ˆ
000000B0  52 69 63 68 6D 6A B2 88 00 00 00 00 00 00 00 00  Richmj²ˆ........
000000C0  50 45 00 00 4C 01 04 00 31 37 7E 44 00 00 00 00  PE..L.17~D....
000000D0  00 00 00 00 E0 00 0E 21 0B 01 06 00 00 50 00 00  ....à.! ..P..
000000E0  00 30 00 00 00 00 00 00 90 13 00 00 00 10 00 00  .0...........
000000F0  00 60 00 00 00 00 00 11 00 10 00 00 00 10 00 00  .`...........
00000100  04 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00  .............
00000110  00 90 00 00 00 10 00 00 DC 0E 01 00 02 00 00 00  ......Ü....
00000120  00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00  ............
00000130  00 00 00 00 10 00 00 00 40 59 00 00 50 01 00 00  .......@Y..P..
00000140  C4 53 00 00 28 00 00 00 00 70 00 00 FC 08 00 00  ÄS..(....p..ü..
00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000160  00 80 00 00 80 05 00 00 00 00 00 00 00 00 00 00  .€..€..........
00000170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000190  58 02 00 00 20 00 00 00 00 10 00 00 38 01 00 00  X.. ......8..
000001A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001B0  00 00 00 00 00 00 00 00 2E 74 65 78 74 00 00 00  .........text...
000001C0  90 4A 00 00 00 10 00 00 00 50 00 00 00 10 00 00  J......P.....
000001D0  00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60  ............ ..`
000001E0  2E 64 61 74 61 00 00 00 F4 03 00 00 00 60 00 00  .data...ô...`..
000001F0  00 10 00 00 00 60 00 00 00 00 00 00 00 00 00 00  ....`..........
00000200  00 00 00 00 40 00 00 C0 2E 72 73 72 63 00 00 00  ....@..À.rsrc...
00000210  FC 08 00 00 00 70 00 00 00 10 00 00 00 70 00 00  ü...p......p..
00000220  00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 40  ............@..@
00000230  2E 72 65 6C 6F 63 00 00 B8 05 00 00 00 80 00 00  .reloc..¸...€..
00000240  00 10 00 00 00 80 00 00 00 00 00 00 00 00 00 00  ....€..........
00000250  00 00 00 00 40 00 00 42 EC CF 3A 40 10 00 00 00  ....@..BìÏ:@...
---------------------------AKI
00000260  00 00 00 00 00 00 00 00 4D 53 56 42 56 4D 36 30  ........MSVBVM60
00000270  2E 44 4C 4C 00 00 00 00 00 00 00 00 00 00 00 00  .DLL............
00000280  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................



Si te interesa, detallo el proceso que segui y pongo el code.

Por ahora, sigo diciendo que no son DLL's "verdaderas" y que no valen para inyeccion.

Espero tu contestacion

Salu2


Eternal Idol

Bueno, este era el mensaje que no queria tener que publicar:

Cita de: Krnl64 en 15 Junio 2006, 04:44 AMEstas equivocado. Aun siguiendo ese procedimiento, no se hacen Dll's verdaderas.

La verdad es que NO, el que esta equivocado sos vos y en gran forma.

Cita de: Krnl64 en 15 Junio 2006, 04:44 AMNo exportan funciones.

Leyendo tremenda barbaridad me vienen a la mente dos preguntas: ¿Leiste el articulo? ¿Llevaste el procedimiento a la practica? ¿De verdad lo leiste? ¿Seguro que lo probaste?

Cita de: Krnl64 en 15 Junio 2006, 04:44 AMLa prueba la tienes en que Si desensamblas una DLL hecha con ese procedimiento, mantiene la referencia a MSVBVM.DLL.
Es decir, que sin ese archivo no funcionara la DLL creada.

Entonces mi DLL mono.dll escrita en assembly no es verdadera ya que depende de mi otra DLL perro.dll escrita en C ... ¿Acaso no eso es lo que estas diciendo? Mas aun, trazando un claro paralelismo entre la MSVBVMXX.dll y la MSVCRT.dll (Run Time de C) tenemos que una DLL escrita en C y con la Run Time enlazada dinamicamente TAMPOCO es una DLL "verdadera".
Bueno, la respuesta es que nuevamente estas equivocado, que siga dependiendo de MSVBVMXX.DLL no prueba absolutamente nada mas que eso. Por favor, antes de decir que alguien esta equivocado hay que sopesar si uno sabe de lo que esta hablando.
Y desensamblar la DLL para ver que tiene una dependencia es una incongruencia, en el codigo no vas a ver la dependencia ya que la misma es simplemente una llamada a una direccion alojada en una tabla. Para ver las dependencias se usan programas mucho mas simples que un desensamblador como el Dependency Walker.

Cita de: Krnl64 en 15 Junio 2006, 04:44 AMSi creamos 1 DLL en VB con una funcion por ejemplo,  y ponemos Rundll32 midll.dll,nombrefuncion dara error de entrypoint. Una DLL de "verdad" ejecutaria la funcion

Vuelvo a la anterior: ¿De verdad leiste el articulo? En la segunda pagina se muestra como creando una DLL ActiveX da el error que comentas ya que ciertamente por defecto VB no permite exportar funciones pero en la tercera pagina explica como hacer que el enlazador exporte las funciones que queres mediante un par de metodos diferentes ...


Cita de: Krnl64 en 15 Junio 2006, 04:44 AMah, hablando de inyeccion creo que la DLL generada de esta forma no sirve para eso.

No hay que creer, sino probar y saber: estas equivocado (de nuevo).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón