La cosa es asi:
Estoy Programado una DLL normal en VB6, para hacerlo segui esta guia depues de creear el contol de compilacion como dice la guia y probar que fucnionaba usando el ejemplo alli descrito me propuse crear un dll la cul su funcion es:
Verificar si existe un proceso DAdo, si este existe cerrarlo y continuar la ejecucionde proceso Padre, en caso contrario(el proceso buscado no existe) la dll cierra el proceso padre y abre el programa enscionad al pricipio.
Ahora ahi que desctacar varias cosas sin las cuales no se entenderia el problema.
La dll esta hookeada usando olly para editar el EXE el hook es de esta forma
HOOK:
Código
Luego de hookear la dll con este metodo, cambio el EP por el del PUSH + offset DLL
PUSH + offset Loader.dll LOADLIBRARYA OR EAX,EAX JE (DB 00) PUSH offset_DllMain PUSH EAX PUSH GetProcAddress CALL EAX JMP OEP
La dll debe ser iniciada con un proceso que en este caso se LLama DllMain
Este es el unico metodo de hook que puedo hacer ya que una inyecion dese otro programa no me sirve y no tengo acceso al codigo del exe para hacer el hook de otra forma
MODULO.bas
Código
Para cree un exe estandar y pude declare la dll
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Funciòn APi para buscar Ventanas de Windows Public Declare Function FindWindow _ Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long 'Para finalizar dicha ventana Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hwnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long Public Sub Comprobar() Dim clase As String clase = "ThunderRT6FormDC" Dim ret As Long ' busca la ventana y retorna el Handle ret = FindWindow(clase, "MuPaysandú V 1.0.59") 'si retorna distinto _ de 0 es porque la encontró If ret <> 0 Then ' Finaliza la ventana Log ("Launcher cerrado corectamente con el HWD " & ret) SendMessage ret, "&H112", "&HF060&", ByVal 0 Else Log ("Launcher no encontrado.") ret = FindWindow("MU", vbNullString) If ret <> 0 Then SendMessage ret, "&H112", "&HF060&", ByVal 0 Log ("Procediendo a cerrar el Cliente.") Log ("Abriendo Launcher.") ShellExecute ret, "Open", App.Path & "\MU.exe", vbNullString, "0", "1" Else Log ("MuPaysandu No encontrado.") End If End If End Sub Public Sub Log(Razon As String) Open App.Path & "\log.txt" For Append As 1 Print #1, "[" & Date & "] " & Razon Close #1 End Sub Public Function DllMain() As String Comprobar End Function
y luego hice la llamada y el resultado es:
Error '429 en tiempo de ejecucion.
El componente ActiveX no puede crear el objecto.
Código
si pruebo este mismo exe dese el IDE no pasa nada
Private Declare Function DllMain Lib "Loader.dll" () As String Private Sub Command1_Click() DllMain End Sub
y si hookeo la dll al ejecutable al cual va destinado genera el tipico "Main.exe ha generado un error y deb cerrarse"