Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: x64core en 9 Diciembre 2011, 01:24 am



Título: [VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
Publicado por: x64core en 9 Diciembre 2011, 01:24 am
Como prometi aqui hice codigo muy util que utiliza la tecnica :)
Agradecimientos a:
   Karcrack
   Cobein

Si no hubiera sido por ayudarme a entender como funciona no hubiera podido lograrlo :)
la funcion es un putmem x bytes, lo que hace es insertar X bytes a una posicion de memoria indicada, esta funcion que hice
es identica a las funciones:

Declare Sub PutMem1 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Byte)
Declare Sub PutMem2 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Integer)
Declare Sub PutMem4 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Long)
Declare Sub PutMem8 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Currency)

salvo que esta se pueden insertar cualquier cantidad de bytes, que es el tercer parametro el numero de bytes que uno debe
de indicar a insertar, tambien hay que tomar en cuenta como estan almacenados los bytes en la memoria eso es si es microprocesador de uno es little o big...


Código
  1. Option Explicit
  2. Private Declare Function CallWindowProc Lib "USER32" Alias "CallWindowProcW" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  3.  
  4.  
  5. Private Sub Form_Load()
  6.    ' By RHL no quitar texto
  7.    Dim test As String: test = "Test de XXXXXX en inline asm!"
  8.    Dim newp As String:         newp = "PUTMEM"
  9.  
  10.    Dim A As Long:A = &H101010
  11.    Dim B As Byte:B = &H20
  12.  
  13.    Call vASM_PUTMEMx(VarPtr(A), VarPtr(B), 1)
  14.    MsgBox A
  15.  
  16.    Call vASM_PUTMEMx(StrPtr(test) + 16, StrPtr(newp), 12)
  17.    MsgBox test
  18.  
  19. End Sub
  20.  
  21. 'Declare Sub PutMemx Lib "msvbvm60" (ptr As Any, ByVal newval As Byte)
  22. Private Sub vASM_PUTMEMx(ByVal ptr As Long, ByVal newval As Long, ByVal nB As Long)
  23.    Dim Acode(25)   As Byte: Acode(25) = &HC3
  24.  
  25.    Acode(17) = &H8A: Acode(18) = &H10: Acode(19) = &H88: Acode(20) = &H17
  26.    Acode(21) = &H40: Acode(22) = &H47: Acode(23) = &HE2: Acode(24) = &HF8
  27.  
  28.    Dim i           As Long
  29.  
  30.    '       MOV EAX,OFFSET newval
  31.    '       MOV EDI,OFFSET ptr
  32.    '       XOR ECX,ECX
  33.    '       MOV ECX,nB
  34.    'INI:   MOV DL,[EAX]
  35.    '       MOV [EDI], DL
  36.    '       INC EAX
  37.    '       INC EDI
  38.    '       LOOP INI
  39.  
  40.  
  41.    Acode(0) = &HB8
  42.    i = LongToByte(newval, Acode(), i + 1)
  43.  
  44.    Acode(5) = &HBF
  45.  
  46.    i = LongToByte(ptr, Acode(), i + 1)
  47.    Acode(10) = &H33: Acode(11) = &HC9
  48.  
  49.    Acode(12) = &HB9
  50.    i = LongToByte(nB, Acode(), i + 3)
  51.  
  52.    Call CallWindowProc(ByVal VarPtr(Acode(0)), 0&, 0&, 0&, 0&)
  53. End Sub
  54.  
  55. 'by BlackZeroX
  56. Private Function LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0) As Long
  57.    bReturn(i) = lLong And &HFF
  58.    bReturn(i + 1) = (lLong And &HFF00&) \ &H100
  59.    bReturn(i + 2) = (lLong And &HFF0000) \ &H10000
  60.    bReturn(i + 3) = (lLong And &HFF000000) \ &H1000000
  61.    LongToByte = i + 4
  62. End Function
  63. ' By RHL no quitar texto
  64.  

en vb los caracteres estan en unicode osea dos bytes por caracteres



Título: Re: [VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
Publicado por: BlackZeroX en 10 Diciembre 2011, 20:19 pm
yo diria que es un Copymemory... en lugar de un PutMem.

Dulces Lunas!ˇ.


Título: Re: [VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
Publicado por: x64core en 10 Diciembre 2011, 23:45 pm
si asi es, se comporta casi igual que la copymem...
pero a mi se me vino a la idea por la funcion de vb :xD por eso le puse asi :xD
por eso no le puse alternativa aunque indirectamente si lo es :P pero bueno