[Source] Inyeccion Dll en VB

Iniciado por Hendrix, 15 Junio 2007, 17:11 PM

0 Miembros y 2 Visitantes están viendo este tema.

Hendrix

Aqui les dejo este codigo que ya e traducido a C#, ahora a VB...mi proximo reto es traducirlo a ensamblador con el Fasm.... :xD :xD

Bueno, me dejo de chachara....aqui esta el codigo:

Modulo:

Código (vb) [Seleccionar]
'************************************************************************
'************************************************************************
'**                                                                    **
'**   Inyeccion Dll en VB a partir del codigo en C++ de MazarD         **
'**                                                                    **
'**                  Wrote on June 15, 2007 by Hendrix                 **
'**                                                                    **
'**                                                                    **
'**                         CopyLeft Licence                           **
'************************************************************************
'************************************************************************



Private Const PAGE_READWRITE As Long = &H4
Private Const MEM_RELEASE As Long = &H8000
Private Const MEM_COMMIT As Long = &H1000
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const SYNCHRONIZE As Long = &H100000
Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Private Const INFINITE As Long = &HFFFFFF

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
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 WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, lpThreadAttributes As Long, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long


Public Function Inyecta(RutaDll As String, Pid As Long) As Integer
Dim proc As Long
Dim nload As Long
Dim rems As Long
Dim longi As Long
Dim RemThread As Long
Dim Tid As Long

On Error GoTo Error
proc = OpenProcess(PROCESS_ALL_ACCESS, False, Pid)
nload = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")
rems = VirtualAllocEx(proc, 0, Len(RutaDll), MEM_COMMIT, PAGE_READWRITE)
WriteProcessMemory proc, ByVal rems, ByVal RutaDll, Len(RutaDll), longi
CreateRemoteThread proc, ByVal 0, 0, ByVal nload, ByVal rems, 0, Tid
WaitForSingleObject rems, INFINITE
CloseHandle proc
CloseHandle rems
Inyecta = 0
Exit Function
Error:
Inyecta = 1
End Function


Formulario:

Código (vb) [Seleccionar]
Private Sub Form_Load()
Dim ruta As Long
Dim resultado As Integer

ruta = Shell("notepad.exe")
resultado = Inyecta("C:\ladll.dll", ruta)

If resultado = 0 Then
MsgBox "Dll Inyectada con éxito!!!", , "Información"
Else
MsgBox "A ocurrido un error", vbCritical, "Información"
End If
End
End Sub


Un Saludo.  ;)

"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

LeandroA

Hola Hendrix esta muy interesante el code, pero no entiendo mucho su finalidad, que se supone aria la dll dentro del notepad?, puedes poner un ejemplo de como se ejecuta una funcion de la dll de esta forma?

Saludos

~~

Muy weno Hendrix, yo pensaba q en VB no se iba a poder xDD

Cita de: LeandroA en 15 Junio 2007, 23:37 PM
Hola Hendrix esta muy interesante el code, pero no entiendo mucho su finalidad, que se supone aria la dll dentro del notepad?, puedes poner un ejemplo de como se ejecuta una funcion de la dll de esta forma?

Saludos

Weno, tu tienes q hacerte una dll con dllmain (creo q esto en VB si q no vas a poder hacerlo, corregisme si me ekivoco), colocas esa dll en C:\ladll.dll con ese nombre y usas el codigo.

Con esto conseguiras crear un hilo remoto en el proceso del notepad q cargara la dll y ejecutara el dll main  :xD :xD asi conseguiras q el notepad haga lo q tu kieras, ideal para troyanos (asi el firewall dará permiso al IE para salir a internet) o para hacer tu proceso inmortal

Muy buen aporte Hendrix, hay q ver lo q te has tenido q complicar para hacerlo en VB xDDDD

Hendrix

Si....esto es demasiado "trabajo" para el VB....comparando el fuente de C y este hay mucha diferencia....xDDD e tenido que añadir un API porque me cerraba antes de tiempo...xDDD

Un Saludo.  ;)
"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

cheatmaster

entonces, podemos hacer que un form descargue la dll, se cierre cargue otro form , con ese codigo, y ejecute la dll, M.. q bueno !!

Una duda, tiene que ser el notepad o puede ser arternativo, ejemplo... msn, IE, firefox.. o tiene que ser el notepad ?

~~

Vale cualkier otro proceso, aunke yo e provado en C con el lsass y ese tipo de procesos y no funcionó, pero con firefox, msn o internet explorer si q funciona  :P

byebye

EON no te funciona con lsass por el tema de privilegios, que puedes ajustar tu mismo antes de abrir el proceso. despues lo puedes injectar donde quieras.

Mad Antrax

Cita de: E0N en 16 Junio 2007, 13:58 PM
Vale cualkier otro proceso, aunke yo e provado en C con el lsass y ese tipo de procesos y no funcionó, pero con firefox, msn o internet explorer si q funciona  :P

Si que puedes inyectar, leer memoria y escribir en memoria de otros procesos de SYSTEM (como lsass o svchost). Solo necesitas ejecutar tu aplicación con los privilegios heredades => a SYSTEM.

Cuando programé mi MemDumper (dumpeador de memoria de procesos) pude dumpear la memoria de svchost siempre y cuando mi aplicación se lanzara desde SYSTEM.

Para hacerlo solo tienes que usar el bug del comando AT (explicado por mí también en este foro) para pasar un proceso de Admin a SYSTEM.

Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

byebye

no hace falta bugs para hacerlo, con AdjustTokenPrivileges lo haces. ya que de la otra forma si es un bug algun AV puede saltar.

Hendrix

Cita de: - en 16 Junio 2007, 15:39 PM
no hace falta bugs para hacerlo, con AdjustTokenPrivileges lo haces. ya que de la otra forma si es un bug algun AV puede saltar.

Amén....eso se hace con la API, no con el comando At aunque es una buena opcion a la API... ;) ;)
"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