elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Ayuda con Inyector DLL en VB 2008
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Inyector DLL en VB 2008  (Leído 7,017 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Ayuda con Inyector DLL en VB 2008
« en: 18 Septiembre 2013, 02:51 am »

Bueno, hace 16 Hs que le meto a esto y no puedo encontrar el error,, o mejor dicho, como solucionarlo!! Ahi les va genios...

Código:

    Private Sub BtnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLoad.Click

        Dim LoadLibHandle As Integer
        Dim GetProcHandle As Integer
        Dim StartUp As New STARTUPINFO
        Dim ProcessInfo As New PROCESS_INFORMATION
        Dim DllTam As Integer
        Dim VirtualRet As Integer

        Dim bytes() As Byte
        bytes = System.Text.Encoding.Unicode.GetBytes(DllName)

        Dim Retorno As Integer

        LoadLibHandle = LoadLibraryA("kernel32.dll")
        GetProcHandle = GetProcAddress(LoadLibHandle, "LoadLibraryA")

        Retorno = CreateProcess(txtExeF.Text, vbNullString, vbNullString, vbNullString, vbNullString, PROCESS_CREATION_FLAG.CREATE_SUSPENDED, vbNullString, vbNullString, StartUp, ProcessInfo)

        DllTam = Len(txtDllName.Text)

        VirtualRet = VirtualAllocEx(ProcessInfo.hProcess, vbNullString, DllTam, MEM_COMMIT, PROCESS_ALL_ACCESS)
        WriteProcessMemory(ProcessInfo.hProcess, VirtualRet, bytes, DllTam, vbNullString)

        Try

            CreateRemoteThread(ProcessInfo.hProcess, 0, 0, GetProcHandle, VirtualRet, 0, 0)

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try

        ResumeThread(ProcessInfo.hProcess)

    End Sub


Claro esta que esto es una porcion del codigo,, txtDllName es el textbox que tiene el nombre de la dll, txtExeF es el textbox que tiene la ruta del exe..

El error que me salta es: Intento de leer o escribir en la memoria protegida..

Ya no se que hacer con esto!! Jaja Saludos!!
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #1 en: 18 Septiembre 2013, 03:50 am »

Y agregando MEM_RESERVE en el VAllocX?

Código:
        VirtualRet = VirtualAllocEx(ProcessInfo.hProcess, vbNullString, DllTam, MEM_COMMIT + MEM_RESERVE, PROCESS_ALL_ACCESS)
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #2 en: 18 Septiembre 2013, 05:00 am »

Gracias por responder MCK.. Mañana lo pruebo y les cuento.. ;) Gracias!
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #3 en: 18 Septiembre 2013, 20:14 pm »

Bueno,, sigo sin hacer andar esto... Ahora estoy viendo un ejemplo del señor Leandro Ascierto para ocultar procesos del administrador de tareas que utiliza WriteProcessMemory, VirtualAllocEx, OpenProcess... parecido al mio.. pero bueno, cualquier colaboración es bienvenida! Saludos!!

PD: Alguien sabe por que hay tantas definiciones de constantes diferentes para las constantes de las apis ?
EJ:

Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const PROCESS_ALL_ACCESS = 0
Private Const PROCESS_ALL_ACCESS As Long = 2035711

Son todas validas o que ??? Entiendo que estan en diferentes "formatos" pero siquiera son los mismos valores :/



2 hs despues: Creo que lo que falla es CreateProcess! Siempre retorna 0 y creo que 0 es error...

Ya no se que modificar.... :'|
« Última modificación: 18 Septiembre 2013, 21:54 pm por Vaagish » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #4 en: 19 Septiembre 2013, 21:35 pm »

Código:
    'ESTRUCTURA PROCESS_INFORMATION
    Private Structure PROCESS_INFORMATION
        Dim hProcess As Long
        Dim hThread As Long
        Dim dwProcessId As Long
        Dim dwThreadId As Long
    End Structure
    'ESTRUCTURA STARTUPINFO
    Private Structure STARTUPINFO
        Dim cb As Long
        Dim lpReserved As String
    End Structure
    'TIPOS PARA LA CREACION DEL PROCESO
    Enum PROCESS_CREATION_FLAG As Integer

        CREATE_BREAKAWAY_FROM_JOB = &H1000000
        CREATE_DEFAULT_ERROR_MODE = &H4000000
        CREATE_NEW_CONSOLE = &H10
        CREATE_NEW_PROCESS_GROUP = &H200
        CREATE_NO_WINDOW = &H8000000
        CREATE_PROTECTED_PROCESS = &H40000
        CREATE_PRESERVE_CODE_AUTHZ_LEVEL = &H2000000
        CREATE_SEPARATE_WOW_VDM = &H800
        CREATE_SHARED_WOW_VDM = &H1000
        CREATE_SUSPENDED = &H4
        CREATE_UNICODE_ENVIRONMENT = &H400
        DEBUG_ONLY_THIS_PROCESS = &H2
        DEBUG_PROCESS = &H1
        DETACHED_PROCESS = &H8
        EXTENDED_STARTUPINFO_PRESENT = &H80000
        INHERIT_PARENT_AFFINITY = &H10000
        NORMAL_PRIORITY_CLASS = &H10

    End Enum

    'CONSTANTES PARA VIRTUALALLOCEX
    Const PROCESS_VM_OPERATION = &H8
    Const PROCESS_VM_READ = &H10
    Const PROCESS_VM_WRITE = &H20
    Const PROCESS_ALL_ACCESS = 0

    Const MEM_COMMIT = &H1000
    Const MEM_RESERVE = &H2000
    Const MEM_DECOMMIT = &H4000
    Const MEM_RELEASE = &H8000
    Const MEM_FREE = &H10000
    Const MEM_PRIVATE = &H20000
    Const MEM_MAPPED = &H40000
    Const MEM_TOP_DOWN = &H100000

    Const PAGE_EXECUTE_READWRITE = &H40
    Const PAGE_READWRITE = &H4&

'FUNCIONES APIS
    Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpAppName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Integer, ByVal lpThreadAttributes As Integer, ByVal bInheritHandles As Integer, ByVal dwCreationFlags As Integer, ByVal lpEnvironment As Integer, ByVal lpCurrentDirectory As Integer, ByRef lpStartupInfo As STARTUPINFO, ByRef lpProcessInformation As PROCESS_INFORMATION) As Integer
    Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As IntPtr, ByVal lpAddress As IntPtr, ByVal dwSize As IntPtr, ByVal flAllocationType As Integer, ByVal flProtect As Integer) As IntPtr

    Public Sub Ejecutar(ByVal Programa As String)

        Dim pInfo As PROCESS_INFORMATION
        Dim sInfo As New STARTUPINFO

        Dim Process As Long
        Dim Memoria As Long


        Dim DllLen As Integer = Len(DllName)
        sInfo.cb = Len(sInfo)

        Try

            Process = CreateProcessA(vbNullString, Programa, 0, 0, False, PROCESS_CREATION_FLAG.CREATE_SUSPENDED, 0, 0, sInfo, pInfo)
            Memoria = VirtualAllocEx(pInfo.hProcess, 0, DllLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE)

        Catch e As Exception

            MsgBox(e.Message)

        End Try

    End Sub

Ahora me dice "Desbordamiento"??! Desbordamiento culeao? Me esta por enfermar esto...
Odio .NET que portabilidad ni portabilidad...
Alguien que quiera probar ese code a ver que pasa.. ? Gracias..

PD: DllName es el nombre de la dll, con extensión y sin ruta, DllLen es el tamaño del texto o sea: "dllvirus.dll" = 12 y Programa es el Exe a inyectar, con ruta y extensión..



Modificado varias horas despues: el valor con el que se rellena el campo hProcess de la estructura PROCESS_INFORMATION esta podrido... algo va mal cuando se llama a la api,, me da un valor super largo y por eso desborda.. Alguna segerencia???
« Última modificación: 19 Septiembre 2013, 23:36 pm por Vaagish » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #5 en: 21 Septiembre 2013, 00:25 am »

Nadie ha pasado por esto?? Soy el primero que hace un inyector en vb,net? Please Help!
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #6 en: 21 Septiembre 2013, 02:54 am »

Nadie ha pasado por esto?? Soy el primero que hace un inyector en vb,net? Please Help!

Al parecer, si...  :P

Personalmente, .net no me simpatiza para nada. Prefiero Python u otro lenguaje de alto nivel (que no sea Java).

Aunque para trabajar en windows, asm es la mejor opción.

Por las dudas: te estás inyectando en un proceso de 32 bits, no? Porque código de 32 en 64 no va a funcionar por más inyección que le hagas...  ;D

Una cosa que puedes hacer es depurar el .net y poner un BP luego de hacer el CreateProcess.
Te attachas con Olly al proceso creado y vas ejecutando en .net instruccion x instruccion y miras lo que pasa en olly (si se crea el nuevo thread, si apunta a la direccion correcta y si la DLL esta bien mapeada, etc.)

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #7 en: 22 Septiembre 2013, 01:24 am »

Gracias por responder MCKSys! Los procesos son de 32 bits todos.. voy a tener que hacerle un debug intensivo si.. no queria meterme en esa porque el .net genera un monton de codigo que me marea y no soy muy bueno con el olly ni el windbg :/

Por otro lado, en ASM lo hice andar con 15 Lineas en el codigo,, asi que para mi, queda desmentido que es mas dificil que un lenguaje de alto nivel.. jaja
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #8 en: 23 Septiembre 2013, 04:13 am »

Quizas deberia estar en programacion vb esto, quizas ahi lo puedamos solucionar.. ;)
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda con Inyector DLL en VB 2008
« Respuesta #9 en: 7 Octubre 2013, 19:07 pm »

 Bueno, hago esta ultima acotación sobre el asunto para que si alguno se encuentra en esta situación decida que hacer, el problema con CreateProcess suspended para inyectar una dll no es tan sencillo en VB.net al parecer, porque el proceso no se crea del todo (con la flag suspended) Mas sobre el tema se puede ver aqui: http://stackoverflow.com/questions/16882766/newly-created-suspended-processs-eip-is-failing-only-on-windows-xp-eip-under también hay una posible solución, pero me da terrible pereza hacer eso para lo que yo necesitaba..

Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Inyector para el Counter-Strike
Programación Visual Basic
XP. 3 2,278 Último mensaje 11 Septiembre 2006, 06:00 am
por XP.
[Source] Inyector de Dll's en C#
.NET (C#, VB.NET, ASP)
Hendrix 1 2,930 Último mensaje 3 Junio 2007, 17:23 pm
por BADBYTE-K
[Ayuda] VB-2008?
.NET (C#, VB.NET, ASP)
tito. 3 2,748 Último mensaje 27 Julio 2009, 16:58 pm
por Xaina
Problema con Inyector Dll
Programación C/C++
Vaagish 5 2,901 Último mensaje 24 Septiembre 2013, 19:34 pm
por Vaagish
inyectores poco útiles respecto a un inyector reflexivo?
Análisis y Diseño de Malware
Borito30 2 5,086 Último mensaje 7 Diciembre 2016, 13:31 pm
por Borito30
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines