Técnicas ANTIDUMP - EVITAR DUMPEADO EN MEMORIA
Publicado: 29 May 2017, 01:27
Bueno la primera técnica consiste en borrar la cabecera para ello usamos:
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:
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:
Y lo podeis descargar de aqui:
[Enlace externo eliminado para invitados]
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);
}
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;
}
[Enlace externo eliminado para invitados]