Problema con MoveMem - Reemplazando RtlMoveMemory.

Iniciado por Shackles, 21 Junio 2012, 21:55 PM

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

Shackles

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.

BlackZeroX

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!¡.
The Dark Shadow is my passion.

Shackles

Esta es la funcion, de iCodeinVB6

Código (VB) [Seleccionar]

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

BlackZeroX


Puedes usar mi alternativa que usa el mismo método de "Ignorar limites de un array".

Alternativa a CopyMemory

solo una modificacion:

Código (vb) [Seleccionar]


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

The Dark Shadow is my passion.