Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 04-07-2015
Nipx4215 Nipx4215 is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 12
Poder: 0
Nipx4215 Va por buen camino
Hola

Desempacar es lo contrario a empacar un programa con un packer como aspack.com

En este caso no es depurar porque CreateProcess no ha sido lanzado con DEBUG_ONLY_THIS_PROCESS o DEBUG_PROCESS, pudiendo evitarlo con checkRemoteDebuggerPresent o IsDebuggerPresent. La técnica acá es abrir con OpenProcess y rematar con WriteProcessMemory.
Responder Con Cita
  #22  
Antiguo 04-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Nipx4215,

Cita:
Empezado por Nipx4215
...Desempacar es lo contrario a empacar un programa con un packer como Aspack.com...


Pregunto:

1- ¿Podrías explicar cual es la función de tu aplicación y por que requiere verificar quien es el proceso padre?

2- ¿Has considerado hacer un hash a explorer.exe y verificar el mismo en tu proceso? (Msg #15)

Nelson.
Responder Con Cita
  #23  
Antiguo 04-07-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
1.- El problema del hash del explorer es que el engaño de UpdateProcThreadAttribute va a hacer que explorer aparezca siempre como el verdadero padre...

2.- Si el empacador permite desempacar, ya tienen un problema.

3.- El ataque con las API de lectura y escritura sobre procesos remotos siempre va a ser posible aunque el proceso nazca como "empacado" pues al final siempre está en memoria. Dificulta algo, pero no impide nada aún ejecutándolo desde el explorer.

4.- Existen técnicas para que no se detecten los debuggers: Windows Anti-Debug Reference


Saludos.

Última edición por escafandra fecha: 04-07-2015 a las 23:17:03.
Responder Con Cita
  #24  
Antiguo 04-07-2015
Nipx4215 Nipx4215 is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 12
Poder: 0
Nipx4215 Va por buen camino
@nlsgarcia

Para que solo sea lanzado por el explorer, evitando sea lanzado por otra aplicación y modificarlo en memoria con WriteProcessMemory

@ escafandra
1.-Es correcto, mientras no se detecte el proceso padre real es inútil cualquier chequeo como MD5 pues es engañado por el UpdateProcThreadAttribute y el proceso padre siempre será el explorer.

2.-No se puede desempacar, por eso es que lo hacen en memoria

3.-@escafandra si lo lanzan por el explorer no podrán modificarlo ni en memoria, no veo la forma. Si es lanzado por un programa diferente tengo programado que no arranque siquiera.

4. Gracias aunque son técnicas antidebugged, y como comentaba en el post 8 no aplica acá, no sería detectado


Por lo que he estado buscando, no hay solución conocida, como mencionaba anteriormente, la única solución viable sería buscar que atributo no es heredado y rascarle por ahí
Cita:
MSDN
PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
Los atributos heredados del proceso especificado incluyen handles, device map, processor affinity, priority, quotas, process token y job object. (Algunos atributos, como el debug port vendrán del proceso de creación, no el proceso especificado por este handle.)

Gracias a ambos, saludos.
Responder Con Cita
  #25  
Antiguo 05-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Nipx4215,

Cita:
Empezado por escafandra
...El problema del hash del explorer es que el engaño de UpdateProcThreadAttribute va a hacer que explorer aparezca siempre como el verdadero padre...
Cita:
Empezado por Nipx4215
...mientras no se detecte el proceso padre real es inútil cualquier chequeo como MD5 pues es engañado por el UpdateProcThreadAttribute y el proceso padre siempre será el explorer...
Cita:
Empezado por Nipx4215
...Para que solo sea lanzado por el explorer...


Te comento:

1- En los Msg #17, #19 y #22 te he consultado sobre cual es la función o naturaleza de tu aplicación y solo te has limitado a contestar : Para que solo sea lanzado por el explorer, la pregunta sigue sin ser respondida

2- Independientemente que el programa detecte el Parent Process y este empaquetado con UPX, ASPack o similares, una vez en memoria será susceptible a ser modificado por otro proceso.

3- Hasta donde entiendo la técnica en cuestión (UpdateProcThreadAttribute) es valida en Windows Vista y posteriores, por lo tanto no parece factible verificar realmente quien es el Parent Process dado que es una función propia del SO, sin embargo : Norton Internet Security no permite que el programa sea eliminado de memoria, por lo cual asumo que tampoco modificado, ¿Como lo hace?

4- La idea del Hash (Msg #15) es descartar cualquier modificación ilegal a explorer, sería un complemento a la solución final, dado que si explorer es alterado por cualquier medio, el verificar si explorer es el Parent Process no ofrecera ninguna seguridad adicional.

Espero sea útil

Nelson.
Responder Con Cita
  #26  
Antiguo 05-07-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Nipx4215 Ver Mensaje
No se puede desempacar, por eso es que lo hacen en memoria
Algunos compresores permiten la acción contraria, no se que sucede con el que tu usarás.

Cita:
Empezado por Nipx4215 Ver Mensaje
...si lo lanzan por el explorer no podrán modificarlo ni en memoria, no veo la forma. Si es lanzado por un programa diferente tengo programado que no arranque siquiera.
Lo lances como lo lances siempre existirá un proceso, un pid y un hProcess para usar las APis de lecto-escritura de la memoria de otro proceso.

Cita:
Empezado por Nipx4215 Ver Mensaje
...aunque son técnicas antidebugged, y como comentaba en el post 8 no aplica acá, no sería detectado
Si lees el artículo verás que habla también de sus fallos y antídotos, dan ideas de como evitar el antidebuger

Cita:
Empezado por Nipx4215 Ver Mensaje
Por lo que he estado buscando, no hay solución conocida, como mencionaba anteriormente, la única solución viable sería buscar que atributo no es heredado y rascarle por ahí
No hay solución conocida, tampoco la forma de leer los atributos heredados. GetStartupInfo no encuentra la estructura STARTUPINFOEX, de donde se podrían extraer conclusiones interesantes, siempre devuelve STARTUPINFO. Hice algunas pruebas sin resultado práctico. Me llama la atención que M$ no tenga previsto esto.

De todas formas, no veo claro que si encuentras el verdadero padre, puedas evitar la lectura/escritura en el espacio de memoria de tu proceso. Los sistemas que tratan de evitarlo usan Hooks a esas APIs, máquinas virtuales e incluso código en ring0.

Saludos.

Última edición por escafandra fecha: 05-07-2015 a las 01:08:36.
Responder Con Cita
  #27  
Antiguo 06-07-2015
Nipx4215 Nipx4215 is offline
Miembro
NULL
 
Registrado: jul 2015
Posts: 12
Poder: 0
Nipx4215 Va por buen camino
@nlsgarcia Gracias, es un punto de venta, no veo como esto tenga que ver con el tema

@escafandra] Gracias, creo que me entendiste desde el principio, lástima que no haya forma al menos conocida por nosotros jeje

Saludos
Responder Con Cita
  #28  
Antiguo 06-07-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Nipx4215,

Cita:
Empezado por Nipx4215
...es un punto de venta, no veo como esto tenga que ver con el tema...


Te comento:

1- Como se ha comentado durante el hilo este tipo de verificación no es posible en Windows Vista, 7, 8 y 8.1 (No al menos documentada por Microsoft), quizás sea posible en Windows 10, pero hasta el momento no hay conocimiento de ello.

2- Ciertamente este tipo de verificación no aplica para puntos de venta, quizás puedas evaluar formas más estándar de seguridad para este tipo de aplicación.

3- Te sugiero revisar los comentarios de los Msg #25 y #26, quizás puedan aclarar un poco el tema.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 10-07-2015 a las 16:02:33.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber si la aplicación fue ejecutada desde Delphi aeff API de Windows 16 13-11-2008 00:37:18
Aplicacion en Delphi 6 ejecutada por Internet canelita Internet 1 10-07-2008 16:29:07
Cómo cerrar otra aplicacion desde mi aplicacion en Delphi 7 Gaby123 API de Windows 5 04-01-2007 22:44:51
¿Cómo puedo saber desde mi aplicación cuándo se abre por primera vez? nuri Varios 7 21-07-2005 14:07:51
Detectar aplicacion a ser ejecutada. anitra_cattivo API de Windows 7 05-11-2004 18:52:41


La franja horaria es GMT +2. Ahora son las 13:21:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi