|
82
|
Foros Generales / Sugerencias y dudas sobre el Foro / Re: Post de inconformidad con la gente del foro.
|
en: 10 Septiembre 2008, 06:52 am
|
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.
|
|
|
85
|
Programación / Ingeniería Inversa / Re: Duda sobre valores de la memoria!!!
|
en: 9 Septiembre 2008, 06:04 am
|
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/c7495Entonces, 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 PERFECTAMENTEPrivate 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
|
Programación / Ingeniería Inversa / Re: Duda sobre valores de la memoria!!!
|
en: 8 Septiembre 2008, 18:10 pm
|
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.
|
|
|
90
|
Programación / Ingeniería Inversa / Re: GameServer.exe
|
en: 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?
|
|
|
|
|
|
|