Título: Problema con MoveMem - Reemplazando RtlMoveMemory.
Publicado por: Shackles en 21 Junio 2012, 21:55 pm
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: Saludos y gracias de antemano.
Título: Re: Problema con MoveMem - Reemplazando RtlMoveMemory.
Publicado por: BlackZeroX en 22 Junio 2012, 12:57 pm
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!¡.
Título: Re: Problema con MoveMem - Reemplazando RtlMoveMemory.
Publicado por: Shackles en 22 Junio 2012, 12:58 pm
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
Título: Re: Problema con MoveMem - Reemplazando RtlMoveMemory.
Publicado por: BlackZeroX en 22 Junio 2012, 20:50 pm
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
Título: Re: Problema con MoveMem - Reemplazando RtlMoveMemory.
Publicado por: Shackles en 23 Junio 2012, 17:19 pm
Lo voy a probar, saludos.
|