elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Duda con sección (VirtualFree)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con sección (VirtualFree)  (Leído 3,949 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Duda con sección (VirtualFree)
« en: 1 Octubre 2011, 19:14 pm »

Hola a todos, estoy intentando desempaquetar un programa, este tiene antidump,tengo la siguiente duda.

si voy a la Memoria del programa dumpeado veo lo siguiente:
Citar
Memory map
Address    Size       Owner      Section    Contains      Type   Access    Initial   Mapped as
00010000   00001000                                       Priv   RW        RW
00020000   00001000                                       Priv   RW        RW
0012C000   00001000                                       Priv   RW  Guar  RW
0012D000   00003000                         stack of mai  Priv   RW  Guar  RW
00130000   00003000                                       Map    R         R
00140000   00001000                                       Priv   RWE       RWE
00150000   00006000                                       Priv   RW        RW
00250000   00006000                                       Priv   RW        RW
00260000   00003000                                       Map    RW        RW
00270000   00016000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\unicode.nls
00290000   00041000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\locale.nls
002E0000   00041000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\sortkey.nls
00330000   00006000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\sorttbls.nls
00340000   00041000                                       Map    R         R
00390000   00001000                                       Priv   RW        RW
003A0000   00001000                                       Priv   RW        RW
003B0000   00004000                                       Priv   RW        RW

si veo el programa empaquetado veo lo siguiente:

Citar
Memory map
Address    Size       Owner      Section    Contains      Type   Access    Initial   Mapped as
00010000   00001000                                       Priv   RW        RW
00020000   00001000                                       Priv   RW        RW
0012C000   00001000                                       Priv   RW  Guar  RW
0012D000   00003000                         stack of mai  Priv   RW  Guar  RW
00130000   00003000                                       Map    R         R
00140000   00001000                                       Priv   RWE       RWE
00150000   0000A000                                       Priv   RW        RW
00250000   00006000                                       Priv   RW        RW
00260000   00003000                                       Map    RW        RW
00270000   00016000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\unicode.nls
00290000   00041000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\locale.nls
002E0000   00041000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\sortkey.nls
00330000   00006000                                       Map    R         R         \Device\HarddiskVolume1\WINDOWS\system32\sorttbls.nls
00340000   00041000                                       Map    R         R
00390000   00001000                                       Priv   RW        RW
003A0000   00001000                                       Priv   RW        RW
003B0000   00005000                                       Priv   RW        RW

el problema surge que el dumpeado intenta acceder al address: 00157E78 que lógicamente no está en el dumpeado, por lo que investigando debo liberar tal sección en la memoria con VirtualFree y luego con VirtualAlloc crearla nuevamente pero con el size correspondiente, luego de eso injertar lo que falta, el problema es que se cita lo siguiente:

Citar
en mi maquina la sección del
antidump empieza en 150000 y alli el sistema creo un heap y tiene valores
necesarios para correr el programa si solo borramos y copiamos lo del
antidump no correra


Citar
The VirtualFree function releases or decommits (or both) a region of pages within the virtual address space of the calling process.

BOOL VirtualFree(

    LPVOID lpAddress,   // address of region of committed pages 
    DWORD dwSize,   // size of region
    DWORD dwFreeType    // type of free operation
   );

Citar
The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero.

LPVOID VirtualAlloc(

    LPVOID lpAddress,   // address of region to reserve or commit 
    DWORD dwSize,   // size of region
    DWORD flAllocationType,   // type of allocation
    DWORD flProtect    // type of access protection
   );   

hago el siguiente injerto(aquí mi duda):

Citar
push 4000
push ???????
push 150000
call VirtualFree
nop
push 4
push 2000
push ??????
push 150000
call VirtualAlloc
nop
push 4
push 1000
push ??????
push 150000
call VirtualAlloc

(el injerto lo tomé del tutorial de ricardo narvaja)
el problema es el size no sé cuanto colocar, debido que no sé que es un heap y cuanto espacio debo colocar y por qué ese espacio, otra cosa es por que se hace dos llamados a VirtualAlloc con diferencia en el parámetro type of access protection

Si pudieran aclararme esas dudas de manera explicativa, se los agradecería demasiado,Saludos




En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.441



Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #1 en: 4 Octubre 2011, 20:14 pm »

en palabras entendibles
 heap= un espacio en la memoria RAM, no en alguna parte del programa, dumpearas y esa parte estara o no segun el permiso que se le hizo, para eso verifica HeapAlloc, y otras asi, segun el permiso de la sección

ahora bien como heap en si es como una parte del s.o o una capa
http://msdn.microsoft.com/en-us/library/ms810603.aspx

pero en palabras criticas de lo que se hizo en el heap, es un espacio reservado  que tiene un permiso especial para la aplicacion que le llamo, en este caso se ve
que se puede usar una u otra api para que sea accedible:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366794%28v=vs.85%29.aspx

luego vemos

arriba ves:Address    Size
00150000   00006000  
osea
arriba ves:
Address  00150000 hex
Size  00006000  hex

luego ves que dice    Priv , esta sección es privada de acceso, puedes usar un dumpeador por sección especializado como pupe, o otras aplicaciones.
muchos hablan aveces de las PAGES pero volviendo a tus preguntas eso es una constante ahi veras tu cual usar:
parametros y constantes de memoria
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366786%28v=vs.85%29.aspx

api virtual alloc
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887%28v=vs.85%29.aspx

ahora bien volviendo, porque en el injerto usaron virtual alloc y no otra?
como bien veias en el espacio:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366794%28v=vs.85%29.aspx

cuando usas virtual alloc, intentas que la direccion sea esa tenga cierta informacion...en este caso de la sección que tenemos que este en ese lugar


pero que pasaria si fallara?, es mejor que resuelvas la redireccion, yo eso hice en pelock y le puse como tute, porque realmente es complejo explicar algo desde ring3, que proviene desde ring0,

una vez nahuel o ncr, hizo algo imposible con un driver, reservar memoria en el espacio cero, osea el comienzo de la memoria, obviamente con ring 0


pero bueno, independiente de los rootkit, hook y temas de permisos y secciones, lo importante es saber que parametros puede retornar,

saludos Apuromafo

En línea

Apuromafo
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #2 en: 4 Octubre 2011, 20:24 pm »

Todo mucho más aclarado, gracias apuromafo  ::)
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #3 en: 4 Octubre 2011, 22:22 pm »

Sigo con problemas, he hecho lo siguiente:

Tengo el Unpackme original, detenido en el OEP y tiene la siguiente memoria virtual:

Memory map, item 6
 Address=00150000
 Size=0002A000 (172032.)
 Owner=         00150000 (itself)
 Section=
 Type=Priv 00021004
 Access=RW
 Initial access=RW

Citar
volco con pupe la sección y la injerto como última sección en el programa:

Pe header
code
..
..
.
Section(490000)


ahora tomo el dumpeado y hago que parta desde aquí:
Citar
004BA000    60              PUSHAD
004BA001    BE 00001500     MOV ESI,150000
004BA006    BF 00004900     MOV EDI,Copia_de.00490000
004BA00B    B9 FF9B0000     MOV ECX,9BFF
004BA010    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
004BA012    68 00400000     PUSH 4000
004BA017    68 00700200     PUSH 27000
004BA01C    68 00001500     PUSH 150000
004BA021    FF15 A4094600   CALL DWORD PTR DS:[<&kernel32.VirtualFree>]        ; kernel32.VirtualFree
004BA027    90              NOP
004BA028    6A 04           PUSH 4
004BA02A    68 00200000     PUSH 2000
004BA02F    68 00A00200     PUSH 2A000
004BA034    68 00001500     PUSH 150000
004BA039    FF15 A8094600   CALL DWORD PTR DS:[<&kernel32.VirtualAlloc>]       ; kernel32.VirtualAlloc
004BA03F    90              NOP
004BA040    6A 04           PUSH 4
004BA042    68 00100000     PUSH 1000
004BA047    68 00A00200     PUSH 2A000
004BA04C    68 00001500     PUSH 150000
004BA051    FF15 A8094600   CALL DWORD PTR DS:[<&kernel32.VirtualAlloc>]       ; kernel32.VirtualAlloc
004BA057    90              NOP
004BA058    BF 00001500     MOV EDI,150000
004BA05D    BE 00004900     MOV ESI,Copia_de.00490000
004BA062    B9 FFA70000     MOV ECX,0A7FF
004BA067    F3:A5           REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
004BA069    61              POPAD
004BA06A    BB 00E0FD7F     MOV EBX,7FFDE000
004BA06F    BC BCFF1200     MOV ESP,12FFBC
004BA074    BD C0FF1200     MOV EBP,12FFC0
004BA079  - E9 32D1F6FF     JMP Copia_de.<ModuleEntryPoint>

esto lo que hace es copiar todo lo que está en el dumpeado en memoria 150000 lo sobre escribe en la sección section copiando el heap en tal sección, una vez hecho eso borra la sección 150000 y luego la crea nuevamente 150000 con size 2A000 luego de eso copia todo lo que está en la sección section a 150000

por lógica y en resumen guarda el heap en section y luego de guardarlo crea de nuevo en memoria a 150000 y copia todo lo que está en section a 150000 pero esto no me funciona, no entiendo el por qué si tan solo copia el heap que tiene estando en el OEP y lo vuelve a escribir agregando adicionalmente lo que falta, si alguien me pudiera decir si este procedimiento esta correcto se lo agradecería

Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.441



Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #4 en: 4 Octubre 2011, 22:27 pm »

004BA05D    BE 00004900     MOV ESI,Copia_de.00490000
004BA062    B9 FFA70000     MOV ECX,0A7FF

versus lo primero que dijiste MOV EDI,150000

como sabes que tienes acceso a 150000?
le diste permiso de escritura?


intenta otra cosa menos densa, aparte de copiar, busca donde realmente esta el programa
490000  ahi esta o esta en 40000+490000 ?

cual es el programa? sera el famoso unpackme de pelock? del cual he comentado varias veces que aveces da lios los injertos y es mejor reparar todo el codesplicit?

saludos Apuromafo
« Última modificación: 4 Octubre 2011, 22:29 pm por apuromafo » En línea

Apuromafo
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #5 en: 4 Octubre 2011, 23:19 pm »


es un Unpackme, es el siguiente:
http://www.megaupload.com/?d=0BJWO39K

tiene stolen bytes, Iat redireccionada y antidump



aquí está todo reparado menos el antidump:
http://www.megaupload.com/?d=XUXRRDQ8

(el antidump lo he podido reparar y funciona perfectamente, pero quiero repararlo de la forma mencionada en el post, si pudieras ayudarme)

lo único que debes hacer es detenerte en el OEP(falso) ubicado en 4271b5
puede usar el siguiente script para los hardware on execution:

http://foro.elhacker.net/ingenieria_inversa/scripthbp_bypass_excepciones-t339827.0.html

Saludos

estando detenido ahí en el original unpack, podrás ver la sección creada


EDIT: el dump no le cambié el EP hacia el injerto debe ser 004BA000
« Última modificación: 4 Octubre 2011, 23:24 pm por .:UND3R:. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
apuromafo CLS


Desconectado Desconectado

Mensajes: 1.441



Ver Perfil WWW
Re: Duda con sección (VirtualFree)
« Respuesta #6 en: 5 Octubre 2011, 05:24 am »

aver.ideas .coloca el codedoctor y multimate assembler como plugins


idea para los xor puedes usar el codedoctor
para los jmp lugar puedes con Multimate cambiar por lo menos el parametro en vez de 17xxx a otra 15xxx o la que quieras... para los otros stolen , pareciera ser poco..
y con notepad o block de notas reemplazas desde el texto de multimate

psi, existe un unpacker para acprotect y un tute para ese packed


adjunto tal cosa en
http://www.mediafire.com/?bahqb8plxeiuo8n

saludos Apuromafo
pd:estare inactivo en la semana, por eso comento del unpacker, tengo varias evaluaciones..saludos
En línea

Apuromafo
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una sección de DB
Sugerencias y dudas sobre el Foro
V18s 2 2,163 Último mensaje 17 Junio 2005, 17:38 pm
por alcatel
DUDA: sección con claves « 1 2 »
PHP
JammDesigner 11 4,871 Último mensaje 6 Agosto 2007, 15:22 pm
por JammDesigner
Duda! En que sección va esto?
Sugerencias y dudas sobre el Foro
verganza 2 2,877 Último mensaje 3 Marzo 2009, 20:14 pm
por Bht Sata
(Duda) Meter archivo dentro de sección
Programación Visual Basic
Pure Ice 0 1,511 Último mensaje 9 Junio 2010, 10:06 am
por Pure Ice
[DUDA] sección PHP
Sugerencias y dudas sobre el Foro
Castg! 2 3,163 Último mensaje 9 Febrero 2011, 16:58 pm
por [u]nsigned
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines