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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes  (Leído 5,586 veces)
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
[VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« en: 28 Julio 2010, 21:41 pm »

 :)
Código
  1. Option Explicit
  2. Option Base 0
  3. '---------------------------------------------------------------------------------------
  4. ' Module    : mCopyMemoryASM
  5. ' Author    : Karcrack
  6. ' Date      : 280710
  7. ' Purpose   : A kewl RtlMoveMemory/CopyMemory replacement using ASM :)
  8. '---------------------------------------------------------------------------------------
  9.  
  10. 'USER32
  11. Private Declare Function CallWindowProcW Lib "USER32" (ByVal lpCodePointer As Long, Optional ByVal l1 As Long, Optional ByVal l2 As Long, Optional ByVal l3 As Long, Optional ByVal l4 As Long) As Long
  12.  
  13. Private bvCode(20)      As Byte
  14. '{
  15. '    PUSH ESI
  16. '    PUSH EDI
  17. '    MOV EDI,DWORD PTR SS:[ESP+C]
  18. '    MOV ESI,DWORD PTR SS:[ESP+10]
  19. '    MOV ECX,DWORD PTR SS:[ESP+14]
  20. '    REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  21. '    POP EDI
  22. '    POP ESI
  23. '    RETN 10
  24. '}
  25. Private bInitialized    As Boolean
  26.  
  27. Public Function ASM_Initialize() As Boolean
  28.    On Error GoTo Initialize_Error
  29.    Dim i               As Long
  30.  
  31.    For i = 0 To 20
  32.        bvCode(i) = CByte(Choose(i + 1, &H56, &H57, &H8B, &H7C, &H24, &HC, &H8B, &H74, &H24, &H10, &H8B, &H4C, &H24, &H14, &HF3, &HA4, &H5F, &H5E, &HC2, &H10, &H0))
  33.    Next i
  34.  
  35.    bInitialized = True
  36.    ASM_Initialize = True
  37.  
  38.    On Error GoTo 0
  39.    Exit Function
  40. Initialize_Error:
  41.    ASM_Initialize = False
  42. End Function
  43.  
  44. Public Sub ASM_CopyMemory(ByVal Source As Long, ByVal Destination As Long, ByVal Length As Long)
  45.    If bInitialized = True Then
  46.        Call CallWindowProcW(VarPtr(bvCode(0)), Destination, Source, Length)
  47.    End If
  48. End Sub
  49.  
  50. 'PutMem4 Wrapper
  51. Public Sub ASM_PutMem4(ByVal lLong As Long, ByVal Destination As Long)
  52.    Call ASM_CopyMemory(VarPtr(lLong), Destination, &H4)
  53. End Sub
  54.  
  55. 'GetMem4 Wrapper
  56. Public Function ASM_GetMem4(ByVal Source As Long) As Long
  57.    Call ASM_CopyMemory(Source, VarPtr(ASM_GetMem4), &H4)
  58. End Function
*Actualizado
Ejemplo:
Código
  1. Private Sub Form_Load()
  2.    Dim x       As Long
  3.    Dim y       As Long
  4.    Dim i       As String
  5.    Dim n       As String
  6.  
  7.    If ASM_Initialize = True Then
  8.        x = &H1337
  9.        Call ASM_CopyMemory(VarPtr(x), VarPtr(y), &H4)
  10.        Debug.Print Hex$(x), Hex$(y)
  11.        y = 0
  12.        Call ASM_PutMem4(x, VarPtr(y))
  13.        Debug.Print Hex$(ASM_GetMem4(VarPtr(x)))
  14.        Debug.Print Hex$(x), Hex$(y)
  15.        i = "KARCRACK_ES_GUAY!!!!!!!"
  16.        n = Space$(Len(i))
  17.        Call ASM_CopyMemory(StrPtr(i), StrPtr(n), LenB(i))
  18.        Debug.Print i
  19.        Debug.Print n
  20.    End If
  21. End Sub

Saluuudos ;)


« Última modificación: 28 Julio 2010, 23:30 pm por Karcrack » En línea

Pure Ice

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #1 en: 29 Julio 2010, 15:00 pm »

Aquí no pusistes, que no te podía preguntar como implementarlo en el runpe ehhh así que ya me vas contando >:( Jajajajajaja (L)

Muy buena tio..


En línea

F3B14N

Desconectado Desconectado

Mensajes: 47


Ver Perfil
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #2 en: 29 Julio 2010, 17:52 pm »

Exelente Karcrack! Vas a tener que sacar un libro con tanto code interesante!  ;-)  :xD

Edit:

Alguien podria comentar cada linea del shellcode, aver si logro entenderlo?
'{
'    PUSH ESI 'variable?
'    PUSH EDI 'variable?
'    MOV EDI,DWORD PTR SS:[ESP+C] 'parametro 1?
'    MOV ESI,DWORD PTR SS:[ESP+10] 'parametro 2?
'    MOV ECX,DWORD PTR SS:[ESP+14] 'parametro 3?
'    REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 'esto mueve la data en mem?
'    POP EDI 'fee a var?
'    POP ESI 'fee a var?
'    RETN 10 'retorno
'}

Soy un completo indio en ASM, solo sé un par de instrucciones $:, es parcialmnte correcto lo que puse? :D
« Última modificación: 29 Julio 2010, 17:57 pm por F3B14N » En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #3 en: 29 Julio 2010, 18:46 pm »

Mas o menos, solo que el PUSH es para guardar en el Stack(Pila) un registro (en este caso ESI,EDI), luego con el POP se restaura...
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #4 en: 30 Julio 2010, 02:19 am »

Citar
Código
  1. Option Base 0
Eso es prescindible no?¿

DoEvents¡! :P
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #5 en: 30 Julio 2010, 05:55 am »

Option Base es para definir el numero del cual partira una matrix, vector, bueno es decri si desde 0 o el 1, de forma predeterminada es 0, y este no tendria caso ponerlo por lo antes dicho!¡.

Código
  1.  
  2. Option Explicit
  3. Option Base 0 'Da igual si se declara en 0  (evita escribir    0 to X)
  4. Private Sub Form_Load()
  5.    Dim aaa(10) As Long ' 0 to 10
  6.    MsgBox LBound(aaa) ' 0
  7. End Sub
  8.  
  9.  

Código
  1.  
  2. Option Explicit
  3. Option Base 1 'Solo si se quiere indicar de forma predeterminada el inicio de una matrix en 1 (Evita escrito   1 to X)
  4. Private Sub Form_Load()
  5.    Dim aaa(10) As Long  ' 1 to 10
  6.    MsgBox LBound(aaa)  ' 1
  7. End Sub
  8.  
  9.  

Sangriento Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes
« Respuesta #6 en: 30 Julio 2010, 10:05 am »

A eso me referia... :P

DoEvents¡! :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda] Sobre copyMemory
Programación Visual Basic
ignorantev1.1 0 1,820 Último mensaje 24 Febrero 2011, 22:37 pm
por ignorantev1.1
mMemory - WriteProcessMemory/vbaCopyBytes/RtlMoveMemory replacement [NOAPI!!!] « 1 2 3 4 5 »
Programación Visual Basic
Karcrack 46 23,767 Último mensaje 10 Octubre 2012, 04:57 am
por BlackZeroX
Invoke WININET y CopyMemory
Programación Visual Basic
STARZ 6 3,062 Último mensaje 30 Enero 2012, 08:56 am
por BlackZeroX
Problema con MoveMem - Reemplazando RtlMoveMemory.
Programación Visual Basic
Shackles 4 2,898 Último mensaje 23 Junio 2012, 17:19 pm
por Shackles
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines