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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: [1] 2 3 4 5
1  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 8 Mayo 2011, 18:53 pm
En modulos clase:

Call CopyMemory(WindowProcAddress, ByVal (pVar + &H1C + (ProcIndex * 4&)), 4)
2  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 8 Mayo 2011, 04:26 am
.
ja ja ja por lo menos no me funciona este codigo creando una ventana con CreateWindowEx y despues sud-clásificandola TODO desde el modulo de clase xP.

cambiando como ya menciono LeandroA: 1784 por 28 en la linea ya indicada anteriormente.

Dulces Lunas!¡.

jejerejerejoju
3  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 6 Mayo 2011, 17:13 pm
muy bueno F3B14N, veo que eliminaste VirtualAlloc y VirtualFree con lo que se termino el problema que mencionaba anteriormente al parecer todo funciona de lujo  :), además se simplifico mucho mas.

Gracias por compartirlo.

PD: fijate quizas te guste mas para crear el ASM(), creo que asi lo hacia Cobein.

Código:
        Dim sCode As String

   
        sCode = "90FF05000000006A0054FF742418FF742418FF742418FF7424186800000000B800000000FFD0FF0D00000000A10000000085C075" & _
                "0458C21000A10000000085C0740458C2100058595858585868008000006A00680000000051B800000000FFE00000000000000000"
               
        For i = 0 To Len(sCode) - 1 Step 2
            bvASM(i / 2) = CByte("&h" & Mid$(sCode, i + 1, 2))
        Next
Saludos.

Por nada Leandro, aqui esta aun mas simple :-X :

Código
  1. Option Explicit
  2.  
  3. Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  4. Private Declare Function SetWindowLongA Lib "USER32" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  5. Private Declare Function CallWindowProcA Lib "USER32" (ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  6. Private Const GWL_WNDPROC As Long = -4
  7. Private Const WM_DESTROY As Long = &H2
  8. Private Const WM_MOUSEMOVE As Long = &H200
  9.  
  10. Private PrevWndProc As Long
  11. Private bvASM(40) As Byte
  12.  
  13. Public Function WindowProc(ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  14.    WindowProc = CallWindowProcA(PrevWndProc, Hwnd, Msg, wParam, lParam)
  15.  
  16.    If Msg = WM_DESTROY Then
  17.        Call StopSubclassing(Me.Hwnd)
  18.    ElseIf Msg = WM_MOUSEMOVE Then
  19.        Me.Caption = Timer
  20.    End If
  21. End Function
  22.  
  23. Private Sub SetSubclassing(Obj As Object, Hwnd As Long)
  24.    Dim WindowProcAddress As Long
  25.    Dim pObj As Long
  26.    Dim pVar As Long
  27.  
  28.    Dim i As Long
  29.  
  30.    For i = 0 To 40
  31.        bvASM(i) = Choose(i + 1, &H55, &H8B, &HEC, &H83, &HC4, &HFC, &H8D, &H45, &HFC, &H50, &HFF, &H75, &H14, _
  32.                                 &HFF, &H75, &H10, &HFF, &H75, &HC, &HFF, &H75, &H8, &H68, &H0, &H0, &H0, &H0, _
  33.                                 &HB8, &H0, &H0, &H0, &H0, &HFF, &HD0, &H8B, &H45, &HFC, &HC9, &HC2, &H10, &H0)
  34.    Next i
  35.  
  36.    pObj = ObjPtr(Obj)
  37.  
  38.    Call CopyMemory(pVar, ByVal pObj, 4)
  39.    Call CopyMemory(WindowProcAddress, ByVal (pVar + 1784), 4)
  40.  
  41.    Call LongToByte(pObj, bvASM, 23)
  42.    Call LongToByte(WindowProcAddress, bvASM, 28)
  43.  
  44.    PrevWndProc = SetWindowLongA(Hwnd, GWL_WNDPROC, VarPtr(bvASM(0)))
  45. End Sub
  46.  
  47. Private Sub StopSubclassing(Hwnd)
  48.    Call SetWindowLongA(Hwnd, GWL_WNDPROC, PrevWndProc)
  49. End Sub
  50.  
  51. Private Sub LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0)
  52.    bReturn(i) = lLong And &HFF
  53.    bReturn(i + 1) = (lLong And 65280) / &H100
  54.    bReturn(i + 2) = (lLong And &HFF0000) / &H10000
  55.    bReturn(i + 3) = ((lLong And &HFF000000) \ &H1000000) And &HFF
  56. End Sub
  57.  
  58. Private Sub Form_Load()
  59.    Call SetSubclassing(Me, 0, Me.Hwnd)
  60. End Sub
4  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 5 Mayo 2011, 17:22 pm
Código
  1. Option Explicit
  2.  
  3. Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  4. Private Declare Function SetWindowLongA Lib "USER32" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  5. Private Declare Function CallWindowProcA Lib "USER32" (ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  6. Private Const GWL_WNDPROC As Long = -4
  7. Private Const WM_DESTROY As Long = &H2
  8. Private Const WM_MOUSEMOVE As Long = &H200
  9.  
  10. Private PrevWndProc As Long
  11. Private bvASM(103) As Byte
  12.  
  13. Public Function WindowProc(ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  14.    WindowProc = CallWindowProcA(PrevWndProc, Hwnd, Msg, wParam, lParam)
  15.  
  16.    If Msg = WM_DESTROY Then
  17.        Call StopSubclassing(Me.Hwnd)
  18.    ElseIf Msg = WM_MOUSEMOVE Then
  19.        Me.Caption = Timer
  20.    End If
  21.  
  22. End Function
  23.  
  24. Private Sub SetSubclassing(Obj As Object, Hwnd As Long)
  25.    Dim pASMWrapper As Long
  26.    Dim pVar As Long
  27.    Dim pObj As Long
  28.    Dim CallbackFunction As Long
  29.    Dim i As Long
  30.  
  31.    pASMWrapper = VarPtr(bvASM(0))
  32.    pObj = ObjPtr(Obj)
  33.  
  34.    Call CopyMemory(pVar, ByVal pObj, 4)
  35.    pVar = (pVar + 1784) 'Form
  36.  
  37.    Call CopyMemory(CallbackFunction, ByVal pVar, 4)
  38.  
  39.    For i = 0 To 55
  40.        bvASM(i) = Choose(i + 1, &H90, &HFF, &H5, &H0, &H0, &H0, &H0, &H6A, &H0, &H54, &HFF, &H74, &H24, &H18, &HFF, &H74, &H24, _
  41.                                 &H18, &HFF, &H74, &H24, &H18, &HFF, &H74, &H24, &H18, &H68, &H0, &H0, &H0, &H0, &HB8, &H0, &H0, _
  42.                                 &H0, &H0, &HFF, &HD0, &HFF, &HD, &H0, &H0, &H0, &H0, &HA1, &H0, &H0, &H0, &H0, &H85, &HC0, &H75, _
  43.                                 &H4, &H58, &HC2, &H10, &H0, &HA1, &H0, &H0, &H0, &H0, &H85, &HC0, &H74, &H4, &H58, &HC2, &H10, _
  44.                                 &H0, &H58, &H59, &H58, &H58, &H58, &H58, &H68, &H0, &H80, &H0, &H0, &H6A, &H0, &H68, &H0, &H0, _
  45.                                 &H0, &H0, &H51, &HB8, &H0, &H0, &H0, &H0, &HFF, &HE0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0)
  46.    Next i
  47.  
  48.    'Zahler Variable setzen
  49.    pVar = pASMWrapper + 96
  50.    Call LongToByte(pVar, bvASM, 3)
  51.    Call LongToByte(pVar, bvASM, 40)
  52.    Call LongToByte(pVar, bvASM, 58)
  53.  
  54.    'Flag Variable setzen
  55.    pVar = pASMWrapper + 100
  56.    Call LongToByte(pVar, bvASM, 45)
  57.  
  58.    'Wrapper Adresse setzen
  59.    pVar = pASMWrapper
  60.    Call LongToByte(pVar, bvASM, 84)
  61.  
  62.    'Instanzzeiger setzen
  63.    pVar = pObj
  64.    Call LongToByte(pVar, bvASM, 27)
  65.  
  66.    'Funktionszeiger setze
  67.    pVar = CallbackFunction
  68.    Call LongToByte(pVar, bvASM, 32)
  69.  
  70.    'VirtualFree Adresse setzen
  71.    'pVar = GetProcAddress(GetModuleHandle("KERNEL32"), "VirtualFree")
  72.    'Call LongToByte(pVar, bvASM, 90)
  73.  
  74.    PrevWndProc = SetWindowLongA(Hwnd, GWL_WNDPROC, pASMWrapper)
  75. End Sub
  76.  
  77. Private Sub StopSubclassing(Hwnd)
  78.    Call SetWindowLongA(Hwnd, GWL_WNDPROC, PrevWndProc)
  79. End Sub
  80.  
  81. Private Sub LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0)
  82.    bReturn(i) = lLong And &HFF
  83.    bReturn(i + 1) = (lLong And 65280) / &H100
  84.    bReturn(i + 2) = (lLong And &HFF0000) / &H10000
  85.    bReturn(i + 3) = ((lLong And &HFF000000) \ &H1000000) And &HFF
  86. End Sub
  87.  
  88. Private Sub Form_Load()
  89.    Call SetSubclassing(Me, 0, Me.Hwnd)
  90. End Sub
  91.  

Gracias por la data Leandro, ahi deje el codigo un poco mas limpio para quien lo necesite, igualmente simplificar mucho el asm.

Saludos
5  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 4 Mayo 2011, 00:18 am
Nadie destripo el clsSubClass de Paul Caton (la version modificada por LaVolpe muy usado por Leandro y por mi)?? :huh: . En la cual hay una funcion scb_GetCallBackAddr (o similar, estoy en el movil) y scb_ReleaseCallback que justamente devuelven un "AddressOf" del ordinal (nro de funcion en orden descendente, la ultima es 1, la anteultima es 2 y asi) de un objeto (por defecto es el que lo llama) y ademas solo hay que especificar el nro de parametros (se hace magia interna con Asm). Lo unico es que todos los parametros deben ser tipo long y la funcion debe devolver long tambien (los parametros en su mayoria son punteros si es que no son numericos).

Cuando tenga internet en casa (por eso estoy muy desaparecido :xD) subire un ejemplo y varios proyectos que tengo listos

Creo que hablás de esto: http://siccs.googlecode.com/svn-history/r2/trunk/classes/ClsRueda.cls. Ya habia logrado solucionarlo, pero muy buen codigo. Quizas le sirva a alguien.

Saludos y muchas gracias :D
6  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 30 Abril 2011, 18:17 pm
El indice de la primera funcion es 0... de todas formas ahora abro el OllyDbg y le doy un vistazo ;)

Ya habia probado con 0 tambien, pero no va :P

Código
  1. Option Explicit
  2. Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
  3. Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  4.  
  5. Public Function llamame()
  6.    MsgBox "hola"
  7. End Function
  8.  
  9. Public Sub oo()
  10.    Dim lVTE As Long
  11.    Dim lPtr As Long
  12.  
  13.    lVTE = GetDWORD(ObjPtr(Me))
  14.    lPtr = GetDWORD(lVTE + &H1C)
  15.    Call CallWindowProc(ByVal lPtr, 0, 0, 0, 0)
  16. End Sub
  17.  
  18. Private Function GetDWORD(ByVal lAddr As Long) As Long
  19.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  20. End Function

lPtr parece ser el puntero correcto. Pero da error 'No se establecio la variable object', pareciera que ObjPtr devuelve el puntero de la clase no inicializada, en vez de la clase establecida en el objecto y a eso se debe ese error!!?
El ejemplo de cobein, sobreescribe por el puntero a un ShellCode y por eso no hay error!?

Será posible esto?  :-(
7  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 30 Abril 2011, 17:44 pm
Lo estas haciendo bien, para obtener el puntero has de leer la vTable.... Pero estas leyendo mal el puntero... el puntero a la funcion no se encuentra en el Offset 0xC, sino en el 0x1C... es decir, el puntero estaría aquí:
Código:
ObjPtr(oObjeto) + (Indice * 4) + &H1C

Creo que así podrás obtener el puntero :D

Gracias por tu respuesta karcrack, no lo logré, probé de estas dos formas y mas variantes tambien, pero parece que el puntero no es el correcto.

cls
Código
  1. Option Explicit
  2.  
  3. Public Function llamame(ByVal jj, ByVal dd, ByVal tt, ByVal jaja) As Long
  4.    MsgBox "hola"
  5. End Function
  6.  
  7. Public Sub oo()
  8.    Dim dd As Long
  9.    Dim jj As Long
  10.  
  11.    dd = GetDWORD(ObjPtr(Me))
  12.    jj = GetDWORD(dd + (1 * 4) + &H1C)
  13.    MsgBox jj
  14.    Call CallWindowProc(ByVal jj, 0, 0, 0, 0)
  15. End Sub
  16.  
  17. Private Function GetDWORD(ByVal lAddr As Long) As Long
  18.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  19. End Function

cls
Código
  1. Option Explicit
  2.  
  3. Public Function llamame(ByVal jj, ByVal dd, ByVal tt, ByVal jaja) As Long
  4.    MsgBox "hola"
  5. End Function
  6.  
  7. Public Sub oo()
  8.    Dim dd As Long
  9.  
  10.    dd = GetDWORD(ObjPtr(Me) + (1 * 4) + &H1C)
  11.    MsgBox dd
  12.    Call CallWindowProc(ByVal dd, 0, 0, 0, 0)
  13. End Sub
  14.  
  15. Private Function GetDWORD(ByVal lAddr As Long) As Long
  16.    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  17. End Function

El intento dos devuelve 3  :-X. Las apis usadas las puse en otro modulo, y a ese class lo llame desde un form. Voy a informarme de la vTable, pero no hay nada mejor que una ayuda de un experto :P

Saludos
8  Programación / Programación Visual Basic / Re: Obtener puntero de funcion dentro de un form o class. en: 29 Abril 2011, 04:45 am
Aqui parece que se obtiene algo parecido: http://cobein.com/wp/?p=236#more-236

Pero no logro obtener el puntero  :-\ Gracias
9  Programación / Programación Visual Basic / Obtener puntero de funcion dentro de un form o class. en: 29 Abril 2011, 04:33 am
Hola, estoy tratando de obtener el puntero de una funcion que esta dentro de un form o class.
La cual no puedo mover a un modulo y usar AddressOf porque es usada por varios hilos, necesito cada funcion independiente. Pero para hacer ello tiene que estar dentro de un class o form, y no puedo obtener su puntero  :-\

Intente esto:

http://www.programmersheaven.com/mb/VBasic/237946/237949/re-hot-to-find-the-address-of-a-function/

Código
  1. Call CallWindowProc(ByVal GetDWORD(ObjPtr(Me) + ((FunctionIndex - 1) * 4) + 12), 0, 0, 0, 0)

Agradeceria de su ayuda  :P
10  Programación / Programación Visual Basic / Problema al poner controles dentro de un ListView. en: 13 Abril 2011, 00:59 am
Hola, estoy tratando de hacer un codigo para contener controles dentro de subitems de un listview. Y esta hecho, pero el problema es que, bueno vean la imagen mejor:



Habria que enviar un mensaje que "actualize", al igual que sucede cuando se hace CLICK en algún ítem. Estuve mirando los mensajes que recibe pero no logre nada.
Si alguien me puede ayudar le agradecería  :)

Saludos

http://www.box.net/shared/d7xd44lhkz
Páginas: [1] 2 3 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines