Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: arfgh en 3 Julio 2016, 20:43 pm



Título: Extraño error con WriteProcessMemory
Publicado por: arfgh en 3 Julio 2016, 20:43 pm
Hola amigos.

tengo un problema muy extraño usando la api WriteProcessMemory
Resulta que en mi programa uso esa api un montón de veces sin problema  de ningún tipo, pero ahora por alguna extraña razón y con un offset determinado lee pero no escribe.
Código:
Declare Function WriteProcessSingle Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, 
ByRef lpBuffer As Single, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Boolean

    dim datos as single
    ret = ReadProcessMemory(handle, offset, datos, 4, written)
    datos = datos * 2 / 0,0025683
    ret = WriteProcessMemorySingle(handle, offset, datos, 4, written)
    Debug.Print ret, written


resutado del debug: false, 0 No ha escrito los datos.
No entiendo el por qué de este problema.

comentaros que he intentado usar el getlasterror de esta manera:

Código:
    buffer = Space(200)
    Debug.Print FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0&, GetLastError, SUBLANG_DEFAULT, buffer, 200, 0&)

y el resultado ha sido '.46', no sé si sería posible obtener algún string respecto a ese lasterror.....

Deciros que el handle es correcto, etc etc. Si he cometido un error pues estoy ciego y no lo veo. No obstante el proceso lo he abierto de esta forma:

Código:
        CreateProcess vbNullString, app.path & "\test.exe " & Command & commandline, _
            ByVal 0&, ByVal 0&, 1&, CREATE_SUSPENDED, ByVal 0&, revolt, sInfo, pInfo

también comentarios que he intentado abrir el proceso de esta forma, con el mismo resultado de no poder escribir en ese offset:

Código:
OpenProcess(PROCESS_ALL_ACCESS, False, pid)

Ayuda !


Título: Re: Extraño error con WriteProcessMemory
Publicado por: Eleкtro en 4 Julio 2016, 05:28 am
Llama a la función Win32 GetLastError sin intentar formatear el mensaje para mostrarnos que código de error exacto te indica, '.46' no es nada válido.

PD: No utilizo VB6, lo tengo más que oxidado, pero al menos podría ayudarte con el significado del código de error Win32 que estés obteniendo.

Saludos


Título: Re: Extraño error con WriteProcessMemory
Publicado por: BloodSharp en 4 Julio 2016, 21:21 pm
Hola amigos.

tengo un problema muy extraño usando la api WriteProcessMemory
Resulta que en mi programa uso esa api un montón de veces sin problema  de ningún tipo, pero ahora por alguna extraña razón y con un offset determinado lee pero no escribe.
Código:
dim datos as single
ret = ReadProcessMemory(handle, offset, datos, 4, written)
datos = datos * 2 / 0,0025683
ret = WriteProcessMemorySingle(handle, offset, datos, 4, written)
Debug.Print ret, written

resutado del debug: false, 0 No ha escrito los datos.
No entiendo el por qué de este problema.
Ayuda !

¿Verificaste que la/s página/s de la memoria virtual que estás editando tenga permisos de escritura? Porque según tu código no lo hacés...


B#


Título: Re: Extraño error con WriteProcessMemory
Publicado por: arfgh en 9 Julio 2016, 11:53 am
ese es el problema, la zona de memoria está en la .rdata. Me pregunto si programáticamente se puede hacer esa zona RW


Título: Re: Extraño error con WriteProcessMemory
Publicado por: MCKSys Argentina en 9 Julio 2016, 20:20 pm
ese es el problema, la zona de memoria está en la .rdata. Me pregunto si programáticamente se puede hacer esa zona RW

A la API WriteProcessMemory no le importa si la sección de memoria tiene o no permisos de escritura. Sólo le importa que el handle sea válido para escribir y que la memoria a escribir esté mapeada.

Saludos!

EDIT: Para ver dónde te falla, abre tu programa con Olly y pon un BP en la API. Luego de ejecutar la misma, Olly mostrará el valor de GetLastError (lo hace siempre).