comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[VB6][SNIPPET] mAPIPatchByID - Carga APIs dinamicamente (Late binding)

  • 0 Respuestas
  • 1371 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Karcrack

  • *
  • Underc0der
  • Mensajes: 87
  • Actividad:
    0%
  • Reputación 0
  • Se siente observado ¬¬'
    • Ver Perfil
« en: Junio 16, 2013, 06:27:34 pm »
Código: Visual Basic
  1. '---------------------------------------------------------------------------------------
  2. ' Module    : mAPIPatchByID
  3. ' Author    : Karcrack
  4. ' Now       : 23/04/2011 14:13
  5. ' Purpose   : Patch API functions by ID
  6. ' History   : 23/04/2011 First cut .........................................................
  7. '---------------------------------------------------------------------------------------
  8.  
  9. Option Explicit
  10.  
  11. 'KERNEL32
  12. 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
  13.  
  14. Public Sub PatchAPIAddr(ByVal lID As Long, ByVal lAddr As Long)
  15.     Dim hInstance       As Long
  16.     Dim lExtTablePtr    As Long
  17.    
  18.     hInstance = App.hInstance
  19.     lExtTablePtr = GetDWORD(GetDWORD((hInstance + GetDWORD(hInstance + GetDWORD(hInstance + &H3C) + &H28)) + &H1) + &H30) + &H234
  20.     If GetDWORD(lExtTablePtr + &H4) >= lID Then
  21.         Call PutDWORD(GetDWORD(GetDWORD(GetDWORD(lExtTablePtr) + (8 * lID) + 4) + &H19), lAddr)
  22.     End If
  23. End Sub
  24.  
  25. Private Sub PutDWORD(ByVal lAddr As Long, ByVal lDWORD As Long)
  26.     Call NtWriteVirtualMemory(-1, ByVal lAddr, lDWORD, 4, ByVal 0&)
  27. End Sub
  28.  
  29. Private Function GetDWORD(ByVal lAddr As Long) As Long
  30.     Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
  31. End Function

Para que sirve? Para cargar APIs dinamicamente :D

Un ejemplo:
Código: Visual Basic
  1. Option Explicit
  2.  
  3. 'USER32
  4. Private Declare Function MessageBox Lib "nadaesloqueparece" Alias "Karcrack" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
  5. 'KERNEL32
  6. Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  7. Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  8.  
  9. Sub Main()
  10.     Call PatchAPIAddr(2, GetProcAddress(LoadLibrary("USER32"), "MessageBoxA"))
  11.     Call MessageBox(0, "Te has fijado en la declaracion del API 'MessageBox'?", "Hola :)", 0)
  12. End Sub
  13.  
Otro un poco mas enrevesado:
Código: Visual Basic
  1. Option Explicit
  2.  
  3. 'USER32
  4. Private Declare Function fnc1& Lib "whatever" (ByVal a&, ByVal b&, ByVal c&, ByVal d&)
  5. Private Declare Function fnc2& Lib "whatever" (ByVal a&, ByVal b&)
  6. 'KERNEL32
  7. Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  8. Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  9.  
  10. Private Const u32$ = "ZXJW87"
  11. Private Const msgbx$ = "RjxxfljGt}\"
  12. Private Const ktmr$ = "PnqqYnrjw"
  13. Private Const stmr$ = "XjyYnrjw"
  14. Private x&
  15. Private bo&
  16.  
  17. Sub Main()
  18.     Dim p&
  19.    
  20.     p = GetProcAddress(LoadLibrary(d(u32)), d(stmr))
  21.     Call PatchAPIAddr(3, p)
  22.     x = fnc1(0, 0, 2 * 1000, AddressOf tproc)
  23.     p = GetProcAddress(LoadLibrary(d(u32)), d(msgbx))
  24.     Call PatchAPIAddr(3, p)
  25.     p = GetProcAddress(LoadLibrary(d(u32)), d(ktmr))
  26.     Call PatchAPIAddr(2, p)
  27.     bo = 1
  28.     While bo
  29.         DoEvents
  30.     Wend
  31. End Sub
  32.  
  33. Private Function d$(s$)
  34.     Dim i&
  35.     d = s
  36.     For i = 1 To Len(d)
  37.         Mid$(d, i, 1) = Chr$(Asc(Mid$(d, i, 1)) - 5)
  38.     Next i
  39. End Function
  40.  
  41. Private Function tproc&(ByVal a&, ByVal b&, ByVal c&, ByVal d&)
  42.     If fnc1(0, StrPtr("Seguimos?"), StrPtr(":)"), vbYesNo) = vbNo Then
  43.         bo = 0
  44.         Call fnc2(0, x)
  45.     End If
  46. End Function

Los ejemplos han de ir en un modulo aparte puesto después del modulo 'mAPIPatchByID' para que los IDs se correspondiesen... en caso contrario hay que calcular los IDs usando por ejemplo el OllyDbg :P

Cualquier duda preguntad!
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

 

¿Te gustó el post? COMPARTILO!



Biblioteca de Apis de Windows

Iniciado por alexander1712

Respuestas: 23
Vistas: 10764
Último mensaje Enero 26, 2013, 02:41:25 am
por alexander1712