Buenas tardes.
Me he encontrado con un problema a la hora he reemplazar el rtlmovememory en una cierta funccion. En otras si me funciona correctamente, creo que es porque trato de mover 8bytes. (El resto fueron 4)
Private Sub RTL(ByVal dest As Long, ByVal src As Long, ByVal lLen As Long)
Dim i As Long
For i = CLng("0") To lLen - CLng("1")
bvHack(dest + i - lHackDelta) = bvHack(src + i - lHackDelta)
Next i
End Sub
Las declaraciones de bvHack y tal estan declaradas. Solo que no hace falta pegar mas codigo.
Este es el que trato reemplazar.
RtlMoveMemory c(i), b(i * 8), 8
Lo pongo asi.
RTL varptr(c(i)), varptr(b(i * 8)), 8
y nada, tambien he probado asi:
RTL c(i), b(i * 8), 8
Saludos y gracias de antemano.
Pon el código tal cual los tipos de c y de b pueden afectar en tu resultado, ya que cada tipo ocupa una longitud dada de bytes.
Dulces Lunas!¡.
Esta es la funcion, de iCodeinVB6
Public Declare Sub RtlMoveMemory Lib "kernel32" (dest As Any, src As Any, ByVal lLen As Long)
Public Function ShellcodeToCurrency(ByVal sShellCode As String) As Currency()
Dim c() As Currency
Dim b() As Byte
Dim lLen As Long
Dim i As Long
ReDim b(0 To (Len(sShellCode) / 2) - 1) ' Modifica el tamaño del byte arrar
For i = 0 To Len(sShellCode) - 1 Step 2 ' Loop por el Shellcode
b(i / 2) = CByte("&H" & Mid$(sShellCode, i + 1, 2)) ' Convierte shellcode a bytes
Next i
lLen = UBound(b) + 1
If lLen Mod 8 = 0 Then GoTo Jump ' Si el shellcode es un multiplo de 8 salta este paso
Do
If lLen Mod 8 = 0 Then Exit Do
lLen = lLen + 1 ' Detrmina longitud del byte array que es un multiplo de 8
Loop
ReDim Preserve b(0 To lLen - 1) ' Modifica el tamaño del byte array a una nueva longitud
Jump:
ReDim c(0 To ((UBound(b) + 1) / 8) - 1) ' Modifica el tamaño del Array.
For i = 0 To UBound(c)
RtlMoveMemory c(i), b(i * 8), 8 'Copia 8 bytes de byte arrar a nueva valor currency
Next i
ShellcodeToCurrency = c ' Devuelve un array de Currency
End Function
Puedes usar mi alternativa que usa el mismo método de "Ignorar limites de un array".
Alternativa a CopyMemory (http://infrangelux.hostei.com/index.php?option=com_content&view=article&id=40:mmemoryex&catid=2:catprocmanager&Itemid=3)
solo una modificacion:
Public Function copyMemory(ByVal lpDst As Long, ByVal lpSrc As Long, ByVal lLn As Long) As Long
' // By BlackZeroX.
Dim i As Long
If not bInitialized Then exit function
If (lpSrc = &H0) Or (lpDst = &H0) Or (lLn = &H0) Then Exit Function
i = (lLn Mod 4)
If ((i And &H2) = &H2) Then
Call putWord(lpDst, getWord(lpSrc))
lpDst = (lpDst + 2)
lpSrc = (lpSrc + 2)
copyMemory = (copyMemory + 2)
lLn = (lLn - 2)
End If
If ((i And &H1) = &H1) Then
Call putByte(lpDst, getByte(lpSrc))
lpDst = (lpDst + 1)
lpSrc = (lpSrc + 1)
copyMemory = (copyMemory + 1)
lLn = (lLn - 1)
End If
For i = 0 To (lLn - 1) Step 4
Call putDWord(lpDst + i, getDWord(lpSrc + i))
Next
copyMemory = (copyMemory + lLn)
End Function
Lo voy a probar, saludos.