Bueno la primera técnica consiste en borrar la cabecera para ello usamos:
Código: Seleccionar todo
public enum FreeConsts : uint
{
MEM_RELEASE = 0x8000
}
[DllImport("kernel32.dll")]
private static extern IntPtr ZeroMemory(IntPtr addr, IntPtr size);
[DllImport("kernel32.dll")]
private static extern IntPtr VirtualProtect(IntPtr lpAddress, IntPtr dwSize, IntPtr flNewProtect, ref IntPtr lpflOldProtect);
[DllImport("kernel32")]
private static extern bool VirtualFree(IntPtr lpAddress, UInt32 dwSize, FreeConsts dwFreeType);
[DllImport("kernel32.dll")]
public static extern IntPtr GetModuleHandle(string lpModuleName);
public static void EraseHeader()
{
IntPtr address = GetModuleHandle(null);
IntPtr dwOld = default(IntPtr);
VirtualProtect(address, (IntPtr)4096, (IntPtr)0x40, ref dwOld);
ZeroMemory(address, (IntPtr)4096);
VirtualFree(address, 0, FreeConsts.MEM_RELEASE);
}
Llamamos a la función y se nos borra. Esta es una buena técnica para evitar el dumpeado pero en el momento en que uno usa eventos deja de ser funcional(o al menos yo probe y no funciono)
La otra técnica consiste en usar PAGE_GUARD, descubierta por kris kapersky. La técnica es bastante simple consiste en que si definimos la protección de memoria de una sección como PAGE_GUARD, la función "ReadProcessMemory" fallará. Lo que hacemos es usar VirtualProtectEx" para quitar el atributo PAGE_GUARD, a continuación, leemos la sección y finalmente restauramos el atributo PAGE_GUARD. Un ejemplo de ello sería:
Código: Seleccionar todo
//http://waleedassar.blogspot.com - (@waleedassar)
//Code to show how to use the "PAGE_GUARD" anti-dumping trick.
#include "stdafx.h"
#include "windows.h"
#pragma data_seg("walied4")
int x=1;
#pragma data_seg()
int __stdcall watch()
{
while(1)
{
MEMORY_BASIC_INFORMATION MBI={0};
VirtualQuery(&x,&MBI,sizeof(MBI));
if(!((MBI.Protect)&PAGE_GUARD)) ExitProcess(0);
}
}
int main(int argc, char* argv[])
{
unsigned long fake_base=(unsigned long)(&x); //the page is initially PAGE_WRITECOPY
*(unsigned long*)fake_base=0xCECECECE; //Now it is PAGE_READWRITE
unsigned long old;
VirtualProtect((void*)fake_base,0x1000,PAGE_READWRITE|PAGE_GUARD,&old);
unsigned long tid;
CreateThread(0,0x1000,(LPTHREAD_START_ROUTINE)&watch,0,0,&tid);
//---------------Useless stuff--------------
MessageBox(0,"Try to dump me","waliedassar",0);
ExitProcess(0);
return 0;
}
Una manera mas creativa es la de indy. Basicamente consiste en diferentes técnicas IDP para evitar el dumpeado en memoria. La documentación sería esta:
Mostrar/Ocultar
La protección de flujo de datos (Guardia de flujo de datos).
flujo de control Protección (CFG) o los datos (DFG) - métodos de detección violaciónes
código de integridad o la detección de datos de objetos extraños.
La violación de la integridad del código - la aparición en ella de las normas extranjeras, el código en sí puede
cambiar o invocar código extranjera manera indirecta - cambiando
memoria, tales como punteros a los métodos de matrices o sobre una pila de direcciones de retorno. En este último
caso de la protección la integridad del código es proteger el nombre del flujo de control (CFG). ella
implementado por diferentes: NT-CFG, TPI, Intel-CET etc, considerado otros aparatos DFG,
su uso para aplicaciones tales como la detección / AVVM bypass y la protección de memoria.
DFG - tiene protección de datos del flujo (ver Gráfico de datos de flujo.). En comparación con el CFG es más
código de validación de profundidad. Cuando CFG escanea direcciones de documentos o de su relación con
columna (por ejemplo: llamar-ret). En DFG comprobado para flujo de datos de integridad usando un contexto
problema (flujo) y la memoria. DFG puede detectar átomos.
Atom - objeto (presente en el código), aislado del entorno de ejecución. tal
objetos operan transacciones sombra no disponibles entorno actual y respectivamente
violar la DFG. Ejemplos de átomos de:
Nanomites - el código se pone un punto de interrupción y un punto de interrupción en este depurador
varía contexto de la tarea / memoria. Esta violación de la integridad de la secuencia de datos -
de entrada / salida de datos y la operación realizada por la instrucción (que es el punto
stop) no está vinculado (por ejemplo: Int3 no cambia el contexto del problema).
servicios nucleares - tales objetos pasar el control a un nivel diferente de privilegios, donde
procesamiento de datos.
Objetos de la emulación - cuando se detecta un marcador en el código de una máquina virtual (emulador)
Se lleva a cabo una determinada función.
Código que se ejecuta átomos generalmente se aísla del medio original - se ejecuta en
un nivel diferente de privilegios en el contexto del hipervisor (VM), etc. Usando átomos permite
detectar la virtualización (AV-emulación (AVVM)), la actividad de depuración etc.
AVVM utiliza la emulación átomos (API) funciones complejas axial. El código de función
átomo de desafío insertado - un marcador tras la detección de que VM obtendrá un evento
rendimiento del servicio, procesarla y continuará aún más la emulación.
Esto hace que sea posible desacoplar el trabajo realizado por el código API del código y el código de la dirección. la
este caso, el desplazamiento de la api cuerpo o reconstruir (morphing) sale del código de llamada a la API.
datos de muestreo (recuperación de datos).
Para uso es necesario para realizar un seguimiento de datos de la muestra DFG motor (DF). este
operaciones de memoria realizado por la CPU. Lograr esto de dos maneras:
1. en la pista de la memoria del hardware, el establecimiento de trampas en la memoria. En este caso, la unidad de memoria
Y pusieron una trampa, que se activa cuando se accede a la memoria.
2. emulación de cada instrucción y dirección de decodificación. requiere la plena
/ Rastreo de aplicación de emulación o la función llamada. Este método es lento
y requiere un complejo sistema de procesamiento (creación hilo de eventos, devoluciones de llamada nucleares
ETC).
Con base en la información sobre el DF (dirección de datos, datos relacionados con el contexto) pueden
validación realiza DFG (comprobación de la memoria y cambiar el resultado de la operación en
contexto).
no existe Los átomos DF (debido al aislamiento de los átomos de medio ambiente). Este método da
Detección y aislamiento átomos. Bloqueo de la memoria (bloqueo de memoria tiene la configuración
trampa en él) de un átomo que no se puede ejecutar correctamente. Cuando Selecciones DF
redirigido a otra memoria o se realiza la emulación. Esta técnica se conoce como
IDP (Intercepción de Destrucción de Punteros (punteros de destrucción de captura)). inicialmente
Fue utilizado como una técnica rootkit: se hizo una referencia a los datos no válidos (CTAB
Trap), DF monitoreado y fueron sustituidos datos.
La protección de memoria.
IDP aparte del aislamiento de átomos como resultado proporciona un método de protección de memoria. El área de origen
almacenamiento de datos no existe. Desde DF se produce sólo en el entorno actual (proceso
respectivamente), el DF de otro medio (el proceso de una CPL (desde el núcleo si el medio -
yuzermod)) no existe.
protección de memoria dinámica (DYPE: dinámicas de protección).
Dado lo anterior describe la siguiente técnica.
Sección del módulo protegido se bloquea y pone una trampa en el DF. Como resultado:
1. / datos de estas zonas no existe el código. Aislado del proceso actual
código (lector) no pueden leer. Es imposible eliminar el vertedero.
2. Los átomos no pueden ser realizadas - cese AVVM de trabajo cuando el axial
funciones utilizando una memoria bloqueada.
Cuando se dispara, la trampa (DF) se determina en la lectura de método de direccionamiento (usuario
decodificada) de datos seleccionado se descifra en el tampón, y se reenvía
DF (a través de un cambio del contexto de la que está formada por una dirección o a través de emulación).
A continuación, el flujo continúa la ejecución normal.
Cuando se activa, la trampa (DF) para la ejecución - es ejecutar flujo y llamar Colbeck
El retorno de los procedimientos lanzó emulación. El código es sinónimo de una instrucción y
marcas / emulados. Esto ocurre antes de la transición al código fuera de un bloqueado
la memoria, entonces el flujo continúa la ejecución normal.
lector de validación (lector de cheques).
DF disponible de código de terceros (lector), que no es seguro (AV) y se carga en la corriente
proceso. El problema no se produce si los datos no incluye en la sección del módulo de código (constantes). la
este caso es suficiente para prohibir totalmente DF - el ejemplo de código se ejecuta AV. si
secciones son constantes, es necesario definir lo que un lector para permitir DF.
Las posibles soluciones se incluyen las siguientes:
1. lector de validación, la determinación de que el lector no es (listas AV) de seguridad. dudoso
método.
2. distinguir los datos (constantes) del código. Se permite de datos DF, prohibida por el código.
Universalmente, pero es difícil.
Sin pasar por el TPI.
La técnica descrita permite evitar CFG, se realiza a través de la validación de la llamada
código (llamadas): TPI. Cuando se pueden devolver los datos virtuales del DF - formada
el código correcto para llamar.
Al regresar a la proyección a ser protegidos de los procedimientos de terceros se dispara
trampas. Evitar esta respuesta (y mejorar la eficiencia DYPE) es posible gracias
puntero de carga al talón que comienza la emulación. Sin embargo, tal operación no es compatible con TPI
y de derivación es posible usando el método descrito anteriormente.
-
(C) Indy, 2016.
Y lo podeis descargar de aqui:
[Enlace externo eliminado para invitados]