Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ...........

#82
A mí de momento, en el poco tiempo que llevo aquí, lo que más me sorprende es la cantidad tan desproporcionada entre registrados y no registrados. No sé, no tienen nada que decir, no tienen ganas de decir nada, en fin.

Y bueno, estoy de acuerdo en todo lo comentado por mipasses123456; leer las normas, escribir bien, ser educado y paciente al responder, simplemente no decir nada, etc, van con la personalidad/educación/skills de cada uno, y por tanto es complicado de cambiar - lo mejor es tener paciencia.
#83
Ingeniería Inversa / Re: Duda de desensambladores
9 Septiembre 2008, 21:10 PM
El más usado es el ollydbg
#84
Ingeniería Inversa / Re: Softice y Win.Vista
9 Septiembre 2008, 11:36 AM
No.

El futuro parece que será este: http://sysersoft.com/

#85
Estuve jugando un poquito y vi que VB almacena los elementos de un array de forma peculiar:
http://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495

Entonces, para obtener un puntero al primer elemento de un array de bytes, tienes que usar: VarPtr(MiArray(0)).

"Value" sí es un Long, ya que es un puntero al inicio del array.

He hecho un miniprograma que escribe 5 bytes en la dirección 403000 del propio proceso (inicio del segmento de datos):

EL VISUAL BASIC SE CIERRA AL EJECUTARLO, NI IDEA PORQUÉ,  PERO EL PROGRAMA FUNCIONA PERFECTAMENTE

Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
----------------------------------------------------------------------------------------------

Private Function WriteMemory(ByVal Offset As Long, ByVal ProcessID As Long, ByVal Value As Long, ByVal NumBytes As Long) As Boolean

Const PROCESS_VM_OPERATION As Long = &H8
Const PROCESS_VM_WRITE As Long = &H20

Dim ProcessHandle As Long
ProcessHandle = OpenProcess(PROCESS_VM_WRITE Or PROCESS_VM_OPERATION, False, ProcessID)

If ProcessHandle = 0 Then
    MsgBox "No se encuentra el proceso", vbCritical, "Error de Lectura"
    Exit Function
End If

Dim exito As Boolean
exito = WriteProcessMemory(ProcessHandle, Offset, Value, NumBytes, 0)

CloseHandle (ProcessHandle)

WriteMemory = exito

End Function

---------------------------------------------------------------------------------------------

Private Sub Form_Load()

Dim MiArray(4) As Byte
MiArray(0) = &H11
MiArray(1) = &H22
MiArray(2) = &H33
MiArray(3) = &H44
MiArray(4) = &H55

Dim exito As Boolean
exito = WriteMemory(&H403000, GetCurrentProcessId(), VarPtr(MiArray(0)), 5)

End Sub





.
.
.
.
.
.

Si ahora queremos leer esos mismos 5 bytes:


Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
--------------------------------------------------------------------
Private Function ReadMemory(ByVal Offset As Long, ByVal ProcessID As Long, ByVal NumBytes As Long) As Byte()

Dim ProcessHandle As Long
Dim Value As Long
Dim ArrayLeer() As Byte
ReDim ArrayLeer(NumBytes)
Value = VarPtr(ArrayLeer(0))
Const PROCESS_VM_READ As Long = &H10

ProcessHandle = OpenProcess(PROCESS_VM_READ, False, ProcessID)

Dim exito As Boolean
exito = ReadProcessMemory(ProcessHandle, Offset, Value, NumBytes, 0)

CloseHandle ProcessHandle

ReadMemory = ArrayLeer

End Function
---------------------------------------------------------------------------
Dim leer() As Byte
leer = ReadMemory(&H403000, GetCurrentProcessId(), 5)

Dim i As Long
Dim texto As String
For i = 0 To 4
   texto = texto & Hex(leer(i))
Next
MsgBox (texto)




#86
No sé de donde has sacado la conclusión de que la memoria se divide en bloque de 16 bytes, pero no es así. Los dump de memoria como el de la imagen de Olly suelen tener 16 bytes en cada línea por ser una forma conveniente de mostarlo, pero nada más. Esas APIs leen/escriben cualquier número de bytes en la memoria del proceso, siempre y cuando dicho segmento tenga los permisos adecuados.
#87
http://msdn.microsoft.com/en-us/library/ms681674.aspx
Entre los parámetros de esa función tienes:

lpBuffer

    Puntero al buffer que contiene los datos que se van a escribir.

nSize

    Número de bytes que se van a escribir.

Pues simplemente especifica el número de bytes que quieras. En tu ejemplo tienes 4, pues cambia ese 4 por un 96, y en "Value" debes tener esos 96 bytes como un array.

Igual no entiendo muy bien tu pregunta, porque me extraña que no lo hayas visto por ti mismo.
#89
Ingeniería Inversa / Re: GameServer.exe
5 Septiembre 2008, 21:01 PM
Una simple búsqueda en google:

http://seeitworks.com/index.php?dir=Server%20Files/

Y en este foro:
http://www.ragezone.com/forum/showthread.php?t=440067

hay un enlace:
_http://rapidshare.com/files/132918548/MuServer.rar.html

donde dentro está el gameserver ya desempacado, e imagino que listo para usarse.
Echa un vistazo a ver si te sirve algo.

_______
Un packer sólo sirve para dificultar la tarea de crackear el programa; no hace que no funcione.
#90
Ingeniería Inversa / Re: GameServer.exe
5 Septiembre 2008, 17:29 PM
gameserver.dll

detected: Trojan program Backdoor.Win32.Hupigon.claf   


El kaspersky detecta un troyano en esa dll. Puede que sea una falsa alarma, porque también me detecta algo similar con el FreshDownload.

En cualquier caso, aún no he desempaquetado nada, así que no te puedo ayudar.
De todas formas, en google seguramente encuentras algo. Has buscado?